OpenPNE ディレクトリ構造
/bin | 全てのバッチが入っています。 |
/lib | ライブラリーが入ってます。 |
/public_html | ドキュメントルート。全てのページはここのindex.phpを読み込む |
/setup | OpenPNEを最初に使う時必要なものが入っています。 |
/webapp | OpenPNEデフォルトのモジュールが入っています。 |
/webapp_biz | ビズで使うモジュールが入っています。 |
/webapp_ext | カスタマイズで使うモジュールを入れます。 |
モジュール、テンプレートは全てwebapp_extの配下にwebappと同じような構造で同じファイル名で入れてあげると、webapp_extが優先されます。
ただし、/webapp_ext/lib配下は使用されないので、そこは/webapp/lib配下を編集・新規作成する必要があります。
OpenPNE URLコントロールの仕組み
- http://localhost/OpenPNE/public_html/?m=admin&a=page_login
- このようなURLの場合
/webapp/modules/admin/page/login.php
/webapp/modules/admin/template/login.tpl
を見にいきます。 - http://localhost/OpenPNE/public_html/?m=pc&a=do_o_login
- このようなURLの場合
/webapp/modules/pc/do/o_login.php
を見にいきます。
http://localhost/OpenPNE/public_html/?m=【モジュール名】&a=【アクション名】
モジュール名
admin | 管理画面 |
api | OpenPNE内部の情報を外部に提供する |
ktai | 携帯版ユーザ画面 |
pc | ユーザ画面 |
setup | 初期設定 |
モジュール名(BIZ関連)
biz | BIZ関連メイン |
ktai | BIZ関連携帯 |
ktai_biz | BIZ関連携帯 |
pc | BIZ関連PC |
BIZ関連は使用していないのでよくわかりません。
アクション名
[pageまたはdo]_[ファイル名]
page | テンプレートを使用して、画面を表示するもの |
do | DB変更などの処理のみで、画面を表示しないもの |
pageを使うか、doを使うかは正確には『テンプレートがあるかどうか』の違いではない。
[ページの作り方]参照
バリデート
- /webapp/modules/【モジュール名】/validate/do
- /webapp/modules/【モジュール名】/validate/page
何かアクションをした時、validateの中に同じ名前でiniファイルを作成してあげる必要があります。
作成しないと、「$request」に値が渡ってきません。
- Null Byte Attack
- リクエストバリデーションの際に、事前のフィルタリングで全変数デフォルトでヌルバイトを削除している
OpenPNE ファイルネームルール
ユーザ画面
c系 | コミュニティ系のページ |
f系 | 自分以外のメンバーのページ系 |
h系 | 自分の日記や、自分のプロフィールなど、自分に関わるページ |
fh系 | マイホーム・フレンド共通 |
biz系 | Biz共通 |
inc系 | Include用テンプレート |
o系 | ログイン前、規約、エラー表示などの雑多なページ |
なので新規でファイルを作成する場合、コミュニティ系なら c_○○というファイル名で作成してあげる。
関数系
/webapp/lib/db 配下
すべてのPHPファイルがインクルードされます
スタイルシートルール
/public_html/css/default.css
のコメントに書かれてます
/public_html/css/default.cssから引用
- スタイルシートルールのメモ:
- 幅や高さはhtml内で記述する(※inc_x系、専用ページなど一部例外あり)
- alignはhtml属性使用
- スタイルのmarginとpadding(横方向)はbox要素には使わない
- 配色(背景)や背景模様、フォント(サイズや太さや色)の管理はCSSで行う
- 各インクルードtplのプロパティは各同名cssに記述
例) inc_page_header.tpl -> inc_page_header.css
inc_info.tpl -> inc_info.css- 特殊ページ用のCSSはxyz.tplに対応したpage_xyz.cssでおこなう
例) login.tpl -> page_login.css- その他課題
- 色彩設定は色が違うクラス名と被る場合の判別がしづらくなる。
OpenPNEのデータベースストレージエンジン
OpenPNE標準のMySQLはMyISAMを使用しているため、トランザクションは使えない。
OpenPNEがMyISAMを使用している理由は『MySQLの標準だから』とのこと。
トランザクションを使用する場合はInnoDBを使用するようにする。
データがクラッシュした場合に、InnoDBのほうが強いというのもある。
MyISAMがクラッシュするとテーブル単位でアクセス不可となるが、InnoDBならレコード単位のアクセス不可となる。
データベースについて
OpenPNEのinsert関数の返り値はインサートされたIDが返る。
つまりはAUTO_INCREMENTキーのないテーブルにインサートした場合、返り値は0となり、正誤判断ができなくなる。
mail_queueはidが返らないので、returnの値をとるとfalseに相当する。
(mail_queue_seqで主キーを持っているため。)
コーディングルール
- <?phpで始める
- 最後は必ず?>の後に1つ改行を入れる。
- PHPファイルの文字コードはUTF-8、改行コードはLF
- インデントは半角空白4文字
- 配列名は最後にsを付ける(例:$params)
テンプレートエンジンSmarty
- ({で始め、})で終わる
- OpenPNEでは、送られる値はデフォルトでHTMLエスケープされる。
(この影響を受けない変数にするには、{$var|smarty:nodefaults} のように nodefaults 修飾子をパラメータに持つ smarty 修飾子を指定します) - ユーザ画面のURLは基本的にSmartyの拡張タグで生成する。
(ヘッダメニューリンクはこのルールから外れる)