ディレクトリ構成
「data」「html」のフォルダがあります。
- data プログラム本体
- html 画像,css など公開用ディレクトリ
html
htmlディレクトリの中は、URLにアクセスがあった際に呼ばれるファイル群があり、やってることはほぼ同じで、下記のようになっています。
<?php require_once './require.php'; require_once CLASS_EX_REALDIR . 'page_extends/LC_Page_Index_Ex.php'; $objPage = new LC_Page_Index_Ex(); register_shutdown_function(array($objPage, "destroy")); $objPage->init(); $objPage->process(); ?>
まず共通処理を読み込んでいき、URL毎に対応したクラスのインスタンスを作って、init → process の順番で関数を呼んでいます。
require_once './require.php';
- 各種定数の定義(数百ある)
- データベース操作関連環境の整備
- ダウンロードしたモジュールの読み込み
- Smartyの準備
- エラーチェッカの用意
- カート、顧客などのクラス定義
- セッションクラスの準備と開始
$objPage = new LC_Page_Index_Ex(); register_shutdown_function(array($objPage, "destroy"));
1行目は、インスタンスをつくり
2行目では、終了時に呼び出す関数としてLC_Page_Index_Exのdestroyメソッドを登録しています。
デフォルトでは LC_Page_Index_Ex->destroy() は
LC_Page_Index->destroy() を呼び出し、
これは LC_Page->destory() を呼び出します。
LC_Pageでは以下のようになっており、特に何もしていない。
function destroy() { parent::destroy(); }
上のコードはTOPページ用のもののため、LC_Page_Index_Exクラスを利用しているのですが、ここがページによって違ってくる部分になるので、LC_Page_Index_Exのinitとprocessの中身を見てみると、下記となっています。
パス:/data/class_extends/page_extends/LC_Page_Index_Ex.php
<?php require_once CLASS_REALDIR . 'pages/LC_Page_Index.php'; class LC_Page_Index_Ex extends LC_Page_Index { // }}} // {{{ functions /** * Page を初期化する. * * @return void */ function init() { parent::init(); } /** * Page のプロセス. * * @return void */ function process() { parent::process(); } /** * デストラクタ. * * @return void */ function destroy() { parent::destroy(); } } ?>
「ほにゃらら_Ex」クラスはインストールした状態だと全部この形になっていて、initとproceessは親クラスの処理を呼んでいるだけなので、親クラスのLC_Page_Indexを見てみます。
パス:/data/class/pages/LC_Page_Index.php
<?php require_once CLASS_EX_REALDIR . 'page_extends/LC_Page_Ex.php'; class LC_Page_Index extends LC_Page_Ex { /** * Page を初期化する. * * @return void */ function init() { parent::init(); } /** * Page のプロセス. * * @return void */ function process() { parent::process(); $this->action(); $this->sendResponse(); } /** * Page のアクション. * * @return void */ function action() { $this->tpl_title = ''; $objCustomer = new SC_Customer_Ex(); $this->isLogin = $objCustomer->isLoginSuccess(true); } /** * デストラクタ. * * @return void */ function destroy() { parent::destroy(); } } ?>
initはさらに親クラスのinitを呼んでいて、processはactionとsendResponseを呼んでいますが、sendResponseも親クラスにある共通処理となるため、actionの中身がTOPページで行っている独自処理となります。
そのため、基本的にはLC_Page_Index_Exの方にaction関数を作成して、そちらに独自の処理を書いて行くのが基本となります。
/** * Page のアクション. * * @return void */ function action() { //こにオリジナル処理を書いたりする //要に応じて、parent::action();で親のactionを呼ぶ }
C_Page_Index_Exではなく、直接LC_Page_Indexのactionをいじってもよいのですが、マイナーバージョンアップした時にファイルを置き換えるだけで済む様にExの方に追加処理を書くのがいいと思います。