EC CUBE titleを階層的に表示する

titleタグなので、
data/Smarty/templates/作成したテンプレート名/site_frame.tpl
を修正。

デフォルトだと、
サイト名 / カテゴリ名
とか、
サイト名 / 商品名
となる。
これを
商品名 | カテゴリ | サイト名
のように変えたい。

デフォルトでは、

1
2
3
4
5
6
7
8
<title>
<!--{$arrSiteInfo.shop_name|h}-->
<!--{if $tpl_subtitle|strlen >= 1}--> /
<!--{$tpl_subtitle|h}-->
<!--{elseif $tpl_title|strlen >= 1}--> /
<!--{$tpl_title|h}-->
<!--{/if}-->
</title>

となっている。

簡単にできると思ったら、結構面倒くさい。

$tpl_subtitleに入る文字列が、商品一覧ページと商品詳細ページで異なってしまう。

以下のようにカスタマイズしてみたが、汎用性には乏しいかな。
検証ももっと必要だし。

このカスタマイズによって、タイトルが
商品名 | カテゴリ名 | サイト名
と表示されるように。
現在作っているサイト構成では、

親カテゴリ(複数不可)
子カテゴリ(複数可)
商品

で統一しているけど、親カテゴリに複数登録する場合は非対応になってしまう。
商品詳細ページでは、子カテゴリは一つも表示しない。

data/class_extends/page_extends/products/LC_Page_Products_List_Ex.php
に以下の関数を追記。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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'];
    $objDb = new SC_Helper_DB_Ex();
    $catStr = $objDb->sfGetCatCombName($category_id);
    $arrCat = explode(' | ',$catStr);
    krsort($arrCat);
    $arrCat = implode(' | ', $arrCat);
    return $arrCat;
  }
}

data/class_extends/page_extends/products/LC_Page_Products_Detail_Ex.php
に以下の関数を追記。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function getMainCatId($product_id){
  $objDb = new SC_Helper_DB_Ex();
  $mainCat = $objDb->sfGetRootId($product_id);
  return $mainCat;
}
 
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'];
    $objDb = new SC_Helper_DB_Ex();
    $catStr = $objDb->sfGetCatCombName($category_id);
    $arrCat = explode(' | ',$catStr);
    krsort($arrCat);
    $mainCat = implode(' | ', $arrCat);
    return $mainCat;
  }
}

同ファイルのprocess()に以下を追加。

1
2
$category_id = $this->getMainCatId($this->tpl_product_id);
$this->mainCat =  $this->lfGetPageTitle($mode,$category_id);

data/Smarty/templates/marikona/site_frame.tpl
のtitleタグを以下のように変更

1
2
3
4
5
6
7
8
9
<title>
<!--{if $tpl_subtitle|strlen >= 1}-->
<!--{$tpl_subtitle|h}--> |
<!--{/if}-->
<!--{if $mainCat|strlen >= 1}-->
<!--{$mainCat|h}--> |
<!--{/if}-->
<!--{$arrSiteInfo.shop_name|h}-->
</title>

これで一応できたけど、改善の余地が多いなあ。

シェアする

フォローする