EC-CUBE 2.11 フォルダ構成と基本

ディレクトリ構成


「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の方に追加処理を書くのがいいと思います。

タイトルとURLをコピーしました