OpenPNE標準ではwebappに書かれているが、 これをカスタマイズするとか新しくページを作る場合は拡張ディレクトリwebapp_extに 作るようにする。
webappとwebapp_extに同名のファイルがあった場合はwebapp_extが優先されて、webappのファイルは読まれない。
| page | テンプレートを使用して、画面を表示するもの |
| do | DB変更などの処理のみで、画面を表示しないもの |
doは正確には『はまちちゃん対策』がされる必要がある場合に使用する。
(POSTで入力を送って、DBを変更し、そこではページを表示せず、リダイレクトにより終了するページのこと)
つまりdoにはsessidを付けて送らないとエラーになる
| 画面を表示するもの | |
|---|---|
| 実行ファイル | /webapp_ext/modules/【モジュール名】/page/【ファイル名】.php |
| テンプレート | /webapp_ext/modules/【モジュール名】/template/【ファイル名】.tpl |
| POSTにより値を送信するなら | /webapp_ext/modules/【モジュール名】/validate/page/【ファイル名】.ini |
| 画面を表示しないもの | |
|---|---|
| 実行ファイル | /webapp_ext/modules/【モジュール名】/do/【ファイル名】.php |
| POSTにより値を送信するなら | /webapp_ext/modules/【モジュール名】/validate/do/【ファイル名】.ini |
実行ファイル
基本
class 【モジュール名】_page_【アクション名】 extends OpenPNE_Action
{
function execute($requests)
{
………………
………………
return 'success';
}
}
ログインしていなくても見れるページ
function isSecure()
{
return false;
}
ヘッダメニューリンク
$inc_navi = fetch_inc_navi('h');
$this->set('inc_navi', $inc_navi);
このように書かないとリンクメニューは出ない。
| h | 標準 |
| c | コミュニティ |
| f | フレンド |
テンプレート
テンプレートエンジンはSmarty
基本は$this->set('inc_navi', $inc_navi);こんな感じで実行ファイルから値を送る。
validate(バリデート)
[値名]
値条件
のように書く。
実行ファイル内で$requests['値名']として値が得られる。
このルールを無視して$_POSTなどを使用してはいけない。(Null Byte Attack)
| 値条件 | ||
|---|---|---|
| type | int | 整数 |
| string | 文字列 | |
| bool | bool型(1or0) | |
| regexp | 正規表現 | |
| required | 1 | 必須項目 |
| required_error | 文言 | 必須項目がなかった場合のエラー文言 |
| default | 値 | デフォルト値 |
| caption | 文言 | キャプション |
| is_array | 1 | 送られる値が配列のとき |
| max | 値 | 最大値 |
| min | 値 | 最小値 |
| regexp | 値 | 正規表現 |
| pre_filter | trim | トリムフィルタ |
| ltrim | トリムフィルタ | |
| rtrim | トリムフィルタ | |
| ntrim | NULL バイト・制御文字(HT,LF,NBSP以外)をすべて削除 | |
| mysqltext | 65535バイトに切り詰め | |
| intval | 整数変換 (type=int)の場合は必ず実行される |
|
『sessid』、『msg』、『msg1』、『msg2』、『msg3』はデフォルトでstringに設定されている。
| エラーメッセージ系 | /webapp/validate/msg.ini |
| セッションID | /webapp/validate/sessid.ini |
必須項目などエラーを表示するページを指定する場合
function handleError($errors)
{
$_REQUEST['msg'] = array_shift($errors);
openpne_forward('pc', 'page', 'h_diary_add', $errors);
exit;
}
function handleError($errors)
{
$_REQUEST['msg1'] = $errors['subject'];
$_REQUEST['msg2'] = $errors['body'];
$_REQUEST['msg3'] = $errors['public_flag'];
openpne_forward('pc', 'page', 'h_diary_add', $errors);
exit;
}
メッセージは最大3つまで送ることができます。(というより3つまでしか送れません)
(管理画面用のものであれば配列になるので無制限)
ページ遷移制御
リダイレクト(読み直し)
openpne_redirect('pc', 'page_h_home', $params);
フォワード(読み直さず表示)
openpne_forward('pc', 'page', 'h_home', $errors);