EC-CUBEのお仕事は滅多にないのですが
カスタマイズの案件があったのでメモしておきます。
設置済みのEC-CUBE バージョンは2.4.4でした。
なお、設置から担当してた訳でもなく、
既にカスタマイズされているなどあっても
EC-CUBE初心者の僕では見分けがついてないので
標準では違うけどってあるかもですが、ご了承下さい。
商品の単価に単位をつける
やりたいことは、商品の単位に「箱」や「袋」などを選択させて表示すること。
1.マスタデータ登録
まず、単位を登録するマスタデータを作成します。
データーベースに単位用テーブル「mtb_package」を作成。
CREATE TABLE `mtb_package` (
`id` TINYINT UNSIGNED NOT NULL ,
`name` VARCHAR( 255 ) NOT NULL ,
`rank` TINYINT UNSIGNED NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = InnoDB DEFAULT CHARSET=utf8;
型は最小にしておきました。
商品テーブルに単位の保存フィールドを追加
dtb_products
に
ALTER TABLE `dtb_products` ADD `package` TINYINT UNSIGNED NOT NULL AFTER `___`;
んー・・
実はあまり自信が無い。
いつもphpmyadminからGUIで操作しちゃっています。
データーベース手動操作はここまで。
phpmyadminを開いていたら閉じちゃいましょう。
続いて、EC-CUBEのコンパネから
単位データを登録していきます。
システム設定→マスタデータ管理
セレクトボックスから「mtb_package」を選択して、項目を追加していきます。
まとめて設定はできないみたいです。
一回ずつ選択ボタンを押して登録していきます。
2.admin 商品登録画面
MySQL固有の処理をするクラス
/data/class/db/dbfactory/SC_DB_DBFactory_MYSQL.php
クラス名:SC_DB_DBFactory_MYSQL
function viewToSubQuery() {
$sql['vw_products_allclass_detail'] =<<< __EOS__
(
SELECT
dtb_products.product_id,
dtb_products.name,
...
"vw_products_nonclass" => '
(SELECT
T1.product_id,
T1.name,
...
以下にdtb_products.mtb_package,
とT1.mtb_package,
の二箇所に追加
・・T1ってなんの別名だろう?よくわからないがそー書いてあったのでそれにならった。
商品登録のページクラスにDB読み込みを追加
/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php
クラス名:LC_Page_Admin_Products_Product
$this->arrPACKAGE = $masterData->getMasterData("mtb_package");
これでDBから登録情報を拾ってassignしてくれる。
入力用バリデート
// 入力エラーチェック
function lfErrorCheck($array){
$objErr = new SC_CheckError($array);
...
$objErr->doFunc(array("ケース単位", "package", LLTEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
何をやってるかよくわからないが
前後を見た感じでなんとなく似たように設定。
たぶん違うんだろうな・・(汗)
保存用フィールドの設定
/* 商品の登録 */
function lfRegistProduct($arrList){
// 配列の添字を定義
$checkArray = array("name", "item_sort",..."package"); //"package"を追加
$arrList = SC_Utils_Ex::arrayDefineIndexes($arrList, $checkArray);
// INSERTする値を作成する。
$sqlval['name'] = $arrList['name'];
...
$sqlval['package'] = $arrList['package'];//追加
テンプレートファイル
登録画面用
/data/Smarty/templates/default/admin/products/product.tpl
表示させたい場所に上記を挿入。
html_optionsタグってなんか使い方が違うような・・。EC-CUBEオリジナルでしょうか。
確認画面
/data/Smarty/templates/default/admin/products/product.tpl
表示させたい場所に上記を挿入。
3.フロント画面
データベース読み込みクラスを変更
商品一覧 のページクラス
普通ならこっち
/data/class/pages/products/LC_Page_Products_List.php
クラス名:LC_Page_Products_List
カスタマイズしている場合はこっち
/data/class_extends/page_extends/products/LC_Page_Products_List_Ex.php
クラス名:LC_Page_Products_List_Ex
/**
* Page を初期化する.
*
* @return void
*/
function init() {
parent::init();
$masterData = new SC_DB_MasterData_Ex();
$this->arrSTATUS = $masterData->getMasterData("mtb_status");
...
$this->arrPACKAGE = $masterData->getMasterData("mtb_package");//追加
商品詳細 のページクラス
普通ならこっち
/data/class/pages/products/LC_Page_Products_Detail.php
クラス名:LC_Page_Products_Detail
カスタマイズしている場合はこっち
/data/class_extends/page_extends/products/LC_Page_Products_Detail_Ex.php
クラス名:LC_Page_Products_Detail_Ex
/**
* Page を初期化する.
*
* @return void
*/
function init() {
parent::init();
$masterData = new SC_DB_MasterData_Ex();
$this->arrSTATUS = $masterData->getMasterData("mtb_status");
...
$this->arrPACKAGE = $masterData->getMasterData("mtb_package");//追加
テンプレート
普通ならここらへんのファイルだと思うのだが
data/Smarty/templates/default/
カスタマイズ用フォルダを参照してるっぽかったのでこっち
一覧ページ
/user_data/packages/default/list.tpl
むー・・
配列から配列参照できればよかったのだが
うまく書けなかったので一旦assignしてから代入
詳細ページ
/user_data/packages/default/detal.tpl
これで一通りの作業が完了です。
おつかれ!
コメント