これだけは理解しておこう!EC-CUBEのページ毎に行われる処理の流れ

これだけは理解しておこう!EC-CUBEのページ毎に行われる処理の流れ

Kazuya Takato

Kazuya Takato

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サイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。

Webサイト制作の実績・料金を見る

この記事のシェア数

1983年生まれ。SIerとしてのキャリアをスタートし、JavaやC#を中心に多岐にわたる開発プロジェクトにエンジニアとして参加。その経験を活かし、LIGを創業。バックエンドおよびフロントエンドエンジニアとしての深い知識と経験をもとに、多様なプロジェクトに従事。2023年7月には社長室室長に就任にし、社内の体制やルールの最適化、AI技術の推進など、経営戦略の一翼を担っています。

このメンバーの記事をもっと読む