eccube2.13のカスタマイズ案件をやりました。

PHP

概要

ヤスケ(左向き)
ヤスケ
ひさしぶりの更新!

お仕事で普段やっているプロジェクトとは別に急遽今月だけ、eccubeの案件に関わりました。
8、9年前?にやった2系のカスタマイズでした。ゴリゴリphpですねー
いろいろ忘れてたので、勘所のみをメモ的な感じで残しときます。

今回行ったのは、新規ページの追加とブロック追加。
マイページのカスタマイズ(登録項目を増やす)でした。

ページクラスの処理フロー

マイページを開く場合は、html/mypage/index.phpにアクセスされてクラスがnewされていた。
Exファイルが呼ばれて、extendsされている親のクラスが呼ばれる。
data/class_extends/page_extends/mypage/LC_Page_Mypage_Ex.php
=> extends LC_Page_Mypage

data/class/pages/mypage/LC_Page_Mypage.php
=> extends LC_Page_AbstractMypage_Ex

data/class_extends/page_extends/mypage/LC_Page_AbstractMypage_Ex.php
=> extends LC_Page_AbstractMypage

data/class/pages/mypage/LC_Page_AbstractMypage.php
=> extends LC_Page_Ex

data/class_extends/page_extends/LC_Page_Ex.php
=> extends LC_Page

data/class/pages/LC_Page.phpページの一番上の親クラス
ここでテンプレートとの紐付けなどを行なっているっぽい

ページ追加

ページを新規で作成するには下記の各ファイルをそれぞれ追加します。

data/class/pages/hoge/LC_Page_Hoge.php

<?php
require_once CLASS_EX_REALDIR . 'page_extends/LC_Page_Ex.php';

/**
 * Hoge のページクラス.
 *
 * @package Page
 * @author LOCKON CO.,LTD.
 * @version $Id$
 */
class LC_Page_Hoge extends LC_Page_Ex
{
    /**
     * Page を初期化する.
     *
     * @return void
     */
    public function init()
    {
        parent::init();
    }

    /**
     * Page のプロセス.
     *
     * @return void
     */
    public function process()
    {
        parent::process();
        $this->action();
        $this->sendResponse();
    }

    /**
     * Page のアクション.
     *
     * @return void
     */
    public function action()
    {
    }
}

LC_Page_Hoge_Exを挟まなくても動作するけど、お行儀的に挟んだ方がいいのかな・・・
data/Smarty/templates/default/hoge/index.tpl

<h1>test</h1>

html/hoge/index.php

<?php
require_once '../require.php';
require_once CLASS_REALDIR . 'pages/hoge/LC_Page_Hoge.php';

$objPage = new LC_Page_Hoge();
$objPage->init();
$objPage->process();

dtb_pagelayout テーブルで管理されているので、こちらに1行追加します。

INSERT INTO dtb_pagelayout (device_type_id, page_id, page_name, url, filename, header_chk, footer_chk, edit_flg, create_date, update_date)
VALUES ('10', '29', 'hoge', 'hoge/index.php', 'hoge/index', '1', '1', '2', now(), now());

これでURL確認するとページが追加されてます。

ブロック追加

ブロックを新規に作るには各ファイルをそれぞれ追加します。

data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Hoge.php
data/Smarty/templates/default/frontparts/bloc/hoge.tpl
frontparts/bloc/hoge.php

<?php
require_once realpath(dirname(__FILE__)) . '/../../require.php';
require_once CLASS_REALDIR . 'pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Hoge.php';

$objPage = new LC_Page_FrontParts_BLoc_Hoge();
$objPage->blocItems = $params['items'];
$objPage->init();
$objPage->process();

dtb_bloc テーブルで管理されているので、こちらに1行追加します。(ページのときと同じ感じで他のブロックのやつを真似ればOK)

確認する際はブロックはページにレイアウトする感じなので、
管理画面のページレイアウトから配置すると見れるようになります。

その他いろいろ

定数
全体で使われる定数はシステム設定>パラメータ設定で確認できる。
data/mtb_constants_init.php に設定が書いてあって、mtb_constantsテーブルにも同様に値を持っている。
普段はdata/cacheの下に作られたmtb_constants.phpキャッシュファイルを使われている様子。

ログイン判定
SC_CustomerのisLoginSuccessで。

ログイン者情報
SC_CustomerのgetValue(‘カラム名’)でログインユーザーの各種値が取れる

ページのモード取得
Pageコントローラー内では$this->getMode()でフォームから取得したmodeが取れる。
ルーティングなど存在せず、アクションはmodeで切り替えるべし。
hiddenのname=modeで値をフォームに持っておくべし。

リクエストはパラメータセットする
$objFormParam = new SC_FormParam_Ex();
$objFormParam->setParam($_POST);

addParamでパラメータとして登録されているものだけ、setParamで変数に保持される。
$objFormParam->checkError()でエラーチェック。

eccube2系を触った所感

Smartyがすごく懐かしみを感じさせてきます(笑)

久しぶりに見て、昔のソースの割にはよくできているなーと思いました。
リクエストデータをsetParamとかやっているのは必要か??とも思ったり。。
もうやることないだろうなー たぶん。。。

コメント

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