[EC-CUBE]商品カテゴリの表示・非表示フラグ追加









概要
メニューブロックの「カテゴリ」に表示させたくは無いけど、自分で作成したメニュー(ヘッダメニューとかね)からはアクセスできるカテゴリを作りたいと思って、カテゴリテーブル(dtb_category)に表示・非表示のフラグを設けました。メモ程度に記事にしておきます。
※フラグON・OFFの編集機能(管理画面の機能)は作っていない(とりあえずデータベースを直に編集してます)ので注意してください。
dtb_categoryにview_flagを追加
dtb_categoryにフィールドview_flag:tinyint 1を追加します。
NULL禁止、規定値は1としました。
そして、表示させたくないカテゴリのview_flagは0にします。
LC_Page_FrontParts_Block_Category.phpの編集
IfGetCatTree()メソッドを編集します。例によって親クラスから子クラスにメソッドをコピーですね。
ここからはソースで説明しますね。
LC_Page_FrontParts_Block_Category_EX.php
function IfGetCatTree($arrParent_category_id, $count_check = false)
// カテゴリツリーの取得
function lfGetCatTree($arrParent_category_id, $count_check = false) {
$objQuery = new SC_Query();
$objDb = new SC_Helper_DB_Ex();
$col = "*";
$from = "dtb_category left join dtb_category_total_count using (category_id)";
// 登録商品数のチェック
if($count_check) {
$where = "del_flg = 0 AND product_count > 0";
} else {
$where = "del_flg = 0";
}
$objQuery->setoption("ORDER BY rank DESC");
$arrRet = $objQuery->select($col, $from, $where);
foreach ($arrParent_category_id as $category_id) {
$arrParentID = $objDb->sfGetParents($objQuery, 'dtb_category', 'parent_category_id', 'category_id', $category_id);
$arrBrothersID = SC_Utils_Ex::sfGetBrothersArray($arrRet, 'parent_category_id', 'category_id', $arrParentID);
$arrChildrenID = SC_Utils_Ex::sfGetUnderChildrenArray($arrRet, 'parent_category_id', 'category_id', $category_id);
$this->root_parent_id[] = $arrParentID[0];
$arrDispID = array_merge($arrBrothersID, $arrChildrenID);
foreach($arrRet as $key => $array) {
foreach($arrDispID as $val) {
// $valが$array("category_id")と同じなら$arrRet[$key]['display']に1を代入しているところを、
// $arrRet[$key]['display'] = $arrRet[$key]['view_flag']でview_flagを代入してください。
if($array['category_id'] == $val) {
$arrRet[$key]['display'] = $arrRet[$key]['view_flag'];
break;
}
}
}
}
$this->arrTree = $arrRet;
}
変更点はこの一箇所だけです。カテゴリブロックのビューは何もしなくても大丈夫なはず。たぶん。
最後におまけで管理画面のカテゴリ管理をちょっと見やすくしてあげましょう。
カテゴリ管理ページの編集
カテゴリ管理ページで、view_flagが0のカテゴリは色が薄く表示されるようにしたいと思います。そう、これは完全なおまけです。*1
SC_Helper_DB.phpの編集
sfGetCatTree()メソッドの$colの取得フィールドを定義している箇所に”cat.view_flag”を追加
~略~
$col = "";
$col .= " cat.category_id,";
$col .= " cat.category_name,";
$col .= " cat.parent_category_id,";
$col .= " cat.view_flag,";
$col .= " cat.level,";
$col .= " cat.rank,";
$col .= " cat.creator_id,";
$col .= " cat.create_date,";
$col .= " cat.update_date,";
$col .= " cat.del_flg, ";
$col .= " ttl.product_count";
~略~
LC_Page_Admin_Products_Category.phpの編集
IfGetCat()メソッドの$colの取得フィールドを定義している箇所に”view_flag”を追加。
例によって親クラスから子クラスにメソッドコピー推奨。
~略~ $col = "category_id, category_name, view_flag, level, rank"; ~略~
category.tplを編集
/data/Smarty/templates/default/admin/products/category.tplを2箇所編集します。
1箇所目
// 変更前
<a href="<!--{$smarty.server.PHP_SELF|escape}-->" onclick="fnModeSubmit('tree', 'parent_category_id', <!--{$arrTree[cnt].category_id}-->); return false;">
↓
// 変更後
<!--{if $arrTree[cnt].view_flag > 0}-->
<a href="<!--{$smarty.server.PHP_SELF|escape}-->" onclick="fnModeSubmit('tree', 'parent_category_id', <!--{$arrTree[cnt].category_id}-->); return false;">
<!--{else}-->
<a href="<!--{$smarty.server.PHP_SELF|escape}-->" onclick="fnModeSubmit('tree', 'parent_category_id', <!--{$arrTree[cnt].category_id}-->); return false;" style=" color: #B4D4E4;">
<!--{/if}-->
2箇所目
// 変更前
<a href="<!--{$smarty.server.PHP_SELF|escape}-->" onclick="fnModeSubmit('tree', 'parent_category_id', <!--{$arrList[cnt].category_id}-->); return false"><!--{$arrList[cnt].category_name|escape}--></td>
↓
// 変更後
<!--{if $arrList[cnt].view_flag > 0}-->
<a href="<!--{$smarty.server.PHP_SELF|escape}-->" onclick="fnModeSubmit('tree', 'parent_category_id', <!--{$arrList[cnt].category_id}-->); return false"><!--{$arrList[cnt].category_name|escape}--></td>
<!--{else}-->
<a href="<!--{$smarty.server.PHP_SELF|escape}-->" onclick="fnModeSubmit('tree', 'parent_category_id', <!--{$arrList[cnt].category_id}-->); return false" style=" color: #B4D4E4;"><!--{$arrList[cnt].category_name|escape}--></td>
<!--{/if}-->
あとがき
雑な記事でごめんなさい。時間が無い上に、自分のためのメモというスタンスで書いたのでこんな感じになりました*2 。需要もなさそうだし*3 。
管理画面まで作りこみたいという方は「HappyQuality » [EC-CUBE]カテゴリにコンテンツを登録できるようにする」あたりを参考にしていただけば簡単に実装できると思います。
何かありましたらコメント・チャットなどでお問い合わせください。
関連する投稿
コメントはまだありません »
RSS feed for comments on this post. トラックバックURL