概要
お仕事で普段やっているプロジェクトとは別に急遽今月だけ、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とかやっているのは必要か??とも思ったり。。
もうやることないだろうなー たぶん。。。
コメント