EC-CUBEのversionが2.12になって、ダウンロードに会員登録が必要になったり、プラグインが必要になったりといろいろ変化がありました。
ver2.11以前の知識を元に、初心に帰る意味もこめて大まかにコードを追ってみたいと思います。
ディレクトリ構成
ここは昔と変化はなさそう。「data」「html」「test」「docs」の4が解凍後に入っていました。
- data ここがプログラムの本体
- html 画像やCSSがあったり、URLから呼ばれるphpファイルがある公開用のディレクトリ
- test PHPUnitを利用した、ECCUBEのテスト用コードがあるディレクトリ
- docs ER図とかドキュメントがありますが、ver2.11用でした
html ディレクトリの中
htmlディレクトリの中は、URLにアクセスがあった際に呼ばれるファイル群があり、やってることはほぼ同じで、下記のようになっています。
パス:/html/index.php
<br />
require_once './require.php';<br />
require_once CLASS_EX_REALDIR . 'page_extends/LC_Page_Index_Ex.php';</p>
<p>// }}}<br />
// {{{ generate page</p>
<p>$objPage = new LC_Page_Index_Ex();<br />
register_shutdown_function(array($objPage, 'destroy'));<br />
$objPage->init();<br />
$objPage->process();<br />
まず共通処理を読み込んでいき、URL毎に対応したクラスのインスタンスを作って、init → process の順番で関数を呼んでいます。
上のコードはTOPページ用のもののため、LC_Page_Index_Exクラスを利用しているのですが、ここがページによって違ってくる部分になるので、LC_Page_Index_Exのinitとprocessの中身を見てみると、下記となっています。
パス:/data/class_extends/page_extends/LC_Page_Index_Ex.php
<br />
class LC_Page_Index_Ex extends LC_Page_Index {</p>
<p> // }}}<br />
// {{{ functions</p>
<p> /**<br />
* Page を初期化する.<br />
*<br />
* @return void<br />
*/<br />
function init() {<br />
parent::init();<br />
}</p>
<p> /**<br />
* Page のプロセス.<br />
*<br />
* @return void<br />
*/<br />
function process() {<br />
parent::process();<br />
}</p>
<p> /**<br />
* デストラクタ.<br />
*<br />
* @return void<br />
*/<br />
function destroy() {<br />
parent::destroy();<br />
}<br />
}<br />
「ほにゃらら_Ex」クラスはインストールした状態だと全部この形になっていて、initとproceessは親クラスの処理を呼んでいるだけなので、親クラスのLC_Page_Indexを見てみます。
パス:/data/class/pages/LC_Page_Index.php
<br />
class LC_Page_Index extends LC_Page_Ex {</p>
<p> // }}}<br />
// {{{ functions</p>
<p> /**<br />
* Page を初期化する.<br />
*<br />
* @return void<br />
*/<br />
function init() {<br />
parent::init();<br />
}</p>
<p> /**<br />
* Page のプロセス.<br />
*<br />
* @return void<br />
*/<br />
function process() {<br />
parent::process();<br />
$this->action();<br />
$this->sendResponse();<br />
}</p>
<p> /**<br />
* Page のアクション.<br />
*<br />
* @return void<br />
*/<br />
function action() {<br />
$this->tpl_title = '';<br />
$objCustomer = new SC_Customer_Ex();<br />
$this->isLogin = $objCustomer->isLoginSuccess(true);<br />
}</p>
<p> /**<br />
* デストラクタ.<br />
*<br />
* @return void<br />
*/<br />
function destroy() {<br />
parent::destroy();<br />
}<br />
}<br />
initはさらに親クラスのinitを呼んでいて、processはactionとsendResponseを呼んでいますが、sendResponseも親クラスにある共通処理となるため、actionの中身がTOPページで行っている独自処理となります。
そのため、基本的にはLC_Page_Index_Exの方にaction関数を作成して、そちらに独自の処理を書いて行くのが基本となります。
<br />
/**<br />
* Page のアクション.<br />
*<br />
* @return void<br />
*/<br />
function action() {<br />
// ここにオリジナル処理を書いたりする<br />
// 必要に応じて、parent::action();で親のactionを呼ぶのもありです<br />
}<br />
LC_Page_Index_Exではなく、直接LC_Page_Indexのactionをいじってもよいのですが、マイナーバージョンアップした時にファイルを置き換えるだけで済む様にExの方に追加処理を書くのがいいと思います。
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。