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

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

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

デフォルトでは、

<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
に以下の関数を追記。

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
に以下の関数を追記。

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()に以下を追加。

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

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

<title>
<!--{if $tpl_subtitle|strlen >= 1}--> 
<!--{$tpl_subtitle|h}--> | 
<!--{/if}-->
<!--{if $mainCat|strlen >= 1}--> 
<!--{$mainCat|h}--> | 
<!--{/if}-->
<!--{$arrSiteInfo.shop_name|h}-->
</title>

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

シェアする

  • このエントリーをはてなブックマークに追加

フォローする