Labo

[EC-CUBE 2.11.4] 商品詳細ページで、所属カテゴリごとに表示画像やテキストを変えたい

2011年12月11日 / 投稿者名:fukap


いろいろ方法はあると思いますが、とりあえず簡単そうな方法を1つご紹介します。
商品詳細ページではすでに、関連カテゴリとしてカテゴリ情報は保持しています。
ですので、それを使うのがテンプレートだけの修正で済み、一番簡単でしょう。

 

まずは、その商品が属するカテゴリの中で、第一階層のカテゴリで判別させてみます。
複数のカテゴリを考慮せず、一番最初のカテゴリで判別させてみます。

 

data/Smarty/templates/default/products/detail.tpl の適当な箇所に以下のコードを挿入

<!--{if count($arrRelativeCat) > 0}-->
  <!--{if $arrRelativeCat.0.0.category_id == 1}-->
    第一階層のカテゴリが 1 の場合のHTMLタグ
  <!--{elseif $arrRelativeCat.0.0.category_id == 2}-->
    第一階層のカテゴリが 2 の場合のHTMLタグ
  <!--{elseif $arrRelativeCat.0.0.category_id == 3}-->
    第一階層のカテゴリが 3 の場合のHTMLタグ
  <!--{/if}-->
<!--{/if}-->

今度は、その商品が属するカテゴリの中で、最下層のカテゴリで判別させてみます。
複数のカテゴリを考慮せず、一番最初のカテゴリで判別させています。
この場合カテゴリの設定次第で、最下層の位置が異なりますので、配列数を @count で求める必要があります。
配列の添え字は 0 から始まるので、配列の要素数を -1 した num2 を定義しました。

 

data/Smarty/templates/default/products/detail.tpl の適当な箇所に以下のコードを挿入

<!--{if count($arrRelativeCat) > 0}-->
  <!--{assign var="num" value=$arrRelativeCat[0]|@count}-->
  <!--{assign var="num2" value=`$num-1`}-->
  <!--{if $arrRelativeCat.0.$num2.category_id == 4}-->
    最下層のカテゴリが 4 の場合のHTMLタグ
  <!--{elseif $arrRelativeCat.0.$num2.category_id == 5}-->
    最下層のカテゴリが 5 の場合のHTMLタグ
  <!--{elseif $arrRelativeCat.0.$num2.category_id == 6}-->
    最下層のカテゴリが 6 の場合のHTMLタグ
  <!--{/if}-->
<!--{/if}-->

さらに、一番最初の事例を複数カテゴリにも対応するように書き直してみました。
ループを回しているところと、if文を連ねているところが先ほどと違います。

 

data/Smarty/templates/default/products/detail.tpl の適当な箇所に以下のコードを挿入

<!--{if count($arrRelativeCat) > 0}-->
  <!--{section name=cnt loop=$arrRelativeCat}-->
    <!--{if $arrRelativeCat[cnt].0.category_id == 1}-->
      第一階層のカテゴリが 1 の場合のHTMLタグ
    <!--{/if}-->
    <!--{if $arrRelativeCat[cnt].0.category_id == 2}-->
      第一階層のカテゴリが 2 の場合のHTMLタグ
    <!--{/if}-->
    <!--{if $arrRelativeCat[cnt].0.category_id == 3}-->
      第一階層のカテゴリが 3 の場合のHTMLタグ
    <!--{/if}-->
  <!--{/section}-->
<!--{/if}-->

最後に、二番目の事例を複数カテゴリにも対応させてみました。
ループ内でそれぞれ最下層カテゴリの添え字を求め、if文で各カテゴリに該当するかを調べています。

 

data/Smarty/templates/default/products/detail.tpl の適当な箇所に以下のコードを挿入

<!--{if count($arrRelativeCat) > 0}-->
  <!--{section name=cnt loop=$arrRelativeCat}-->
    <!--{assign var="num" value=$arrRelativeCat[cnt]|@count}-->
    <!--{assign var="num2" value=`$num-1`}-->
    <!--{if $arrRelativeCat[cnt].$num2.category_id == 1}-->
      第一階層のカテゴリが 1 の場合のHTMLタグ
    <!--{/if}-->
    <!--{if $arrRelativeCat[cnt].$num2.category_id == 2}-->
      第一階層のカテゴリが 2 の場合のHTMLタグ
    <!--{/if}-->
    <!--{if $arrRelativeCat[cnt].$num2.category_id == 3}-->
      第一階層のカテゴリが 3 の場合のHTMLタグ
    <!--{/if}-->
  <!--{/section}-->
<!--{/if}-->

もっとスマートにやるなら、管理画面のカテゴリー登録ページで商品詳細ページに表示したいHTMLを格納する枠を設け、DBに格納するようにし、
商品詳細ページの $arrRelativeCat から取り出したカテゴリIDを抽出条件にしてHTMLを出力するとか、
いろいろ方法はあるかと思いますが、とりあえず手っ取り早い方法ということで。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

* Copy This Password *

* Type Or Paste Password Here *

*

コメント欄にコードを挿入したい場合は、[php][/php] を使ってください。