ディレクトリ構成
「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の方に追加処理を書くのがいいと思います。
