以前、EC-CUBE 2.11.4 で同じ内容をやってみましたが、その応用です。以前の記事はこちら。
[EC-CUBE 2.11.4] 商品一覧ページのページタイトルに親カテゴリも含めたい
https://ec-cube.nakweb.com/blog/1010.html
とりあえずバージョンが違うので、同じカスタマイズが通用するか試してみましたが、問題なく動作しました。
2.12.3でもSC_Helper_DB::sfGetCatCombName はご健在のようです。
さて次にご質問いただいた、「最上層のカテゴリのみ表示しないようにする」をやってみたいと思います。
いろいろと方法はありそうですが、SC_Helper_DB::sfGetCatCombName をローカルメソッドとして再定義する方法でやってみました。
(ちょっと共通メソッドをいじくるのに気が引けたので・・・)
1.data/class/pages/products/LC_Page_Products_List.php の lfGetPageTitle メソッドを以下のように修正
/** * ページタイトルの設定 * * @return str */ function lfGetPageTitle($mode, $category_id = 0) { if ($mode == 'search') { return '検索結果'; } elseif ($category_id == 0) { return '全商品'; } else { // 親カテゴリを含むカテゴリ一覧を取得(カスタマイズ) //$arrCat = SC_Helper_DB_Ex::sfGetCat($category_id); //return $arrCat['name']; $arrCat = $this->lfGetCatCombName($category_id); return $arrCat; } }
2.data/class/pages/products/LC_Page_Products_List.php に以下のような新規メソッドを追加
/** * 親カテゴリを連結した文字列を取得する. * * @param integer $category_id カテゴリID * @return string 親カテゴリを連結した文字列 */ function lfGetCatCombName($category_id) { // 商品が属するカテゴリIDを縦に取得 $objQuery =& SC_Query_Ex::getSingletonInstance(); $objDb = new SC_Helper_DB_Ex(); $arrCatID = $objDb->sfGetParents('dtb_category', 'parent_category_id', 'category_id', $category_id); $ConbName = ''; // 配列の先頭を削除(カスタマイズ) array_shift($arrCatID); // カテゴリ名称を取得する foreach ($arrCatID as $val) { $sql = 'SELECT category_name FROM dtb_category WHERE category_id = ?'; $arrVal = array($val); $CatName = $objQuery->getOne($sql,$arrVal); $ConbName .= $CatName . ' | '; } // 最後の | をカットする $ConbName = substr_replace($ConbName, '', strlen($ConbName) - 2, 2); return $ConbName; }
「新規メソッドを追加」なんて書いていますが、
要は lfGetPageTitle メソッドのブロックの下にでも、ブロックごと追加すればOKです。
「最上層のカテゴリのみ表示しないようにする」を質問したものです。早速ご返答いただき感激です。
やってみたところバッチリできました!ありがとうございました。
こちらを参考に、いろいろと勉強させていただきます。今後ともよろしくお願いします。