phpExit Ver2.x Preview
現在プレビューリリース版です。実用レベルではありません。作成途中、実装途中の機能が多数あります。更に全然デバッグしてません。
バグレポート&感想大歓迎♪
概要
PHP4.3↑推奨。
Ethnaを使おうと思いましたが、そこまで大きいスクリプトでもないし、DBも使ってないし、構造だけ意識して作ったのですが、スカスカです。
ViewClassとか付けなかったんですけど、ほぼアクション内で完結してて、通常の検索部分とアドミンの検索部分とか書いててViewとかマネージャとかもうちょい分離すればよかったなと思いました。
結構やっつけな部分が多いので、もう少し書き直します。
やっぱりEthna使うかも><
新しく追加・変更された点
- ロジックを大幅に書き直し
- セキュリティ周りを見直した
- 設定可能な項目を増やしました
- 設定画面を小分けした
- キャッシュの生存時間の設定を追加
- ホームページURLの設定を追加
- タグの無効化/有効化の設定を追加
- テンプレートのショートカットメソッドを幾つか追加
- 画像を最大2つUPできるようにした
- 記事によってバナーUP、URL入力両方可能にしました
- 画像用フォームで「アップロード画像1」「画像URL入力1」「アップロード画像2」「画像URL入力2」をそれぞれ使用するか設定可能にした
- カテゴリ作成時に、キーが空白だと自動ナンバリングするようにした
- カテゴリ説明にタグを使用できるように。改行を含められるように変更
- フロントページでSmartyタグが使用できるようにした
- 連続投稿制限機能の追加
- データファイルのフォーマットを変更しました
- 検索結果画面で、検索ワードをにマーカーを付けるようにしました
画像のアップロードフォームの追加
今までは、一つの記事に対して1つのアップロード画像または画像URLいずれか一つしか設定できませんでしたが、Ver2からは最大2つの画像が表示する事が可能です。
アップロードフォームx2、入力フォームx2のフォームを組み合わせて使用する事が出来ます。

(画像1)に対応するアップロードフォーム1と入力フォーム1を両方使用する場合、アップロード画像が存在すればアップロード画像を表示、無い場合入力フォームにURLがあればURLを画像として表示、無い場合NoBanner画像を表示します。
(画像2)についても(画像1)と同様に表示します。
たとえば、アップロードフォーム(1)(2)を使用して、入力フォームは使用しないということも出来ますし、アップロードフォームは使用せず入力フォーム(1)だけを使用する事も出来ます。また、全て使用しないという設定も可能です。

テンプレートで呼び出す場合はショートカットメソッドを利用してください。
デフォルトのテンプレートでは画像2は使用していないため表示されませんが、テンプレートに以下の画像2用のメソッドを書き込めば表示されます。
$entry->getBanner('banner1') // 画像1を表示
$entry->getBanner('banner2') // 画像2を表示
アップロードと入力フォームはそれぞれ連動している為、アップロードと入力フォームに登録されているものを両方表示するという事は出来ません。(メソッドを使用せずにテンプレートに直接書き込めば可能ですが…)
改造してギャラリー用に使う場合とか、1をサムネイル用、2を本体とかにして、検索画面ではサムネイルを、アイテムページで本体を表示とかできるよ!><
連続投稿制限機能の追加
ユーザーエントリモードの場合、前回の更新時間より設定した時間以上たたないと再更新できないように設定が出来るようになりました。
たとえば、更新上げを許可しているが、毎日更新上げされるとちょっと…というような場合、最低3日以上たたないと再更新できないという制限が可能です。
0に設定すると、この機能は使用しません。

セッションまわり
セッション名(保存するセッションIDのクッキーの名前)の設定が可能になりました。
セッションは発行すると、クッキーに
「PHPSESSID=dfs0mt9043o2xe02idasa57894y75ymr」
みたいな感じのものが保存されますが、これの「PHPSESSID」の部分を設定可能です。デフォルトは「EXITSID」となっていますが、適当に変更してください。
IPを使用してハッシュ化した文字列をセッション名に使用する事も出来ます。
セッションIDのリフレッシュ機能の追加、および設定可能になりました。
アクセスするたびに「dfs0mt9043o2xe02idasa57894y75ymr」の部分のセッションIDを変更します。
ちなみに、セッションIDの生成は、session_regenerate_id()ではなくmd5(hogehoge)で生成してます。(古いファイルが残ってしまう為…)
ワンタイムトークンの導入
連続投稿対策、ロボット対策、SPAM対策、CSRF対策の為チケットの発行を行うかを設定できるようにしました。
実行前に一度限り有効のチケットを発行し、実行時にそのチケットを持っていない投稿を排除します。
特に問題が無い限り、チケットを使用する事をお勧めします。

「アドミンチケット」「エントリチケット」の2つありますが、「アドミンチケット」は主にCSRF対策の為のもので、「設定変更」「フロントページ編集」「カテゴリ編集」「バックアップ機能」を実行する際にチケットを発行します。
「エントリチケット」は記事を投稿する際に発行されるチケットで、最初に述べた問題を防止するためのものです。
phpexitの場合、途中確認画面が出ないので薄いかもしれないですが…。
チケットは1画面上有効の為、編集画面を2つ開くと先に開いた画面のチケットは無効になりますので注意してください。
タグの無効化/有効化
ユーザーエントリがオフで記事中にタグを利用したい場合有効にして下さい。
ユーザーエントリがオンでタグを有効化してしまうと、XSS(クロスサイトスクリプティング)の原因になりますので注意してください。
ショートカットメソッド
エントリ用メソッド
$entry->getCatsLink([skip cid], [textformat]) // 登録カテゴリのリンクを作成
$entry->getFormatMark() // マークを作成
$entry->getTitleLink([textformat]) // タイトルのリンクを作成
$entry->getBanner(fieldname) // バナー表示タグを作成
$entry->getItemLink() // 詳細を表示 リンクを作成
$entry->getEditLink() // 編集 リンクを作成
$entry->ifDispCats() // 登録カテゴリ一覧を表示するか調べる
エントリ用プロパティ
$entry->entrydate // 登録日(フォーマット済)
$entry->updatetime // 更新時間(未フォーマット タイムスタンプ)
$entry->cid // カテゴリキー配列
$entry->mark // マークキー配列
$entry->name // 管理者名
$entry->title // タイトル
$entry->url // URL
$entry->content // コメント
$entry->banner1 // 画像1のアップロード画像(ファイル名,横,縦)の配列
$entry->banner1_url // 画像1の入力URL
$entry->banner2 // 画像2のアップロード画像(ファイル名,横,縦)の配列
$entry->banner2_url // 画像2の入力URL
カテゴリ用メソッド
$entry->checked() // チェック項目にする 廃止予定
$entry->selected() // チェック項目にする
$entry->disabled() // 登録不可設定の場合、アドミンでなければ非選択項目にする
カテゴリ用プロパティ
$entry->parent // 親カテゴリキー
$entry->name // カテゴリ名
$entry->description // カテゴリ説明
$entry->link // メニューでリンクするかのフラグ
$entry->reg // 管理者以外の登録フラグ
$entry->num // 登録数
$entry->childs // 子要素 (子カテゴリオブジェクトの配列)
今後の予定
- 仮登録機能の実装
- ロジックはまだ少し書き直す予定。
- セッション周りもう少し手直しするかも。
- カテゴリ削除時、データファイルのカテゴリを更新するように
- メール送信
既知のバグ
- 検索画面でサブカテゴリが表示されていない
ダウンロード
Ver.2.0.0 PR1 - 2006/06/12
