Labo

[EC-CUBE 2.12.4] カテゴリブロックで、特定のカテゴリのみ表示

2013年06月16日 / 投稿者名:fukap


3階層以上を想定する場合はややこしくなるけど、2階層(親と子のみ)であれば、
テンプレートのちょっとした修正だけでできるんじゃないかなと思い、ちょっと調べてみたところ、
やはりできるようですね。カテゴリIDが 1 の場合と、親カテゴリIDが 1 の場合にカテゴリブロックに表示します。

 

data/Smarty/templates/default/frontparts/bloc/category.tpl を以下のような感じで修正。

<!--{assign var=preLev value=1}-->
<!--{assign var=firstdone value=0}-->
<!--{section name=cnt loop=$arrTree}-->
    <!--{* 特定のカテゴリのみ表示 *}-->
    <!--{if $arrTree[cnt].category_id == 1 || $arrTree[cnt].parent_category_id == 1}-->
	    <!--{* 表示フラグがTRUEなら表示 *}-->
	    <!--{if $arrTree[cnt].display == 1}-->

		// ループ処理

    	<!--{/if}-->
    <!--{/if}-->
<!--{/section}-->

sectionのループ内に if文を1組付け加えただけですね。

[EC-CUBE 2.12.4] カテゴリブロックで、特定のカテゴリのみ表示 への8件のコメント

  1. 西岡 より:

    いつもお世話になっております。

    もしよければご助力頂けたらと思うのですが。

    現在服屋さんのショッピングサイトを構築しており、
    商品詳細ページにおいて、上から2階層目のカテゴリ名だけを
    表示させる方法を模索しております。

    例1)大カテゴリ(WOMENS) 中カテゴリ(TOPS) 小カテゴリ(PULLOVER) 極小カテゴリ(ABCD)

    この場合、詳細ページに「TOPS」と表示させたいです。

    また、下記の例2のように極小カテゴリがない場合もあり、
    例2)大カテゴリ(MENS) 中カテゴリ(OTHER) 小カテゴリ(ACC)
    この場合も同じく2階層目だけを表示させたいです。

    パンくずリストなどは設置しておりますので、他のカテゴリや商品名を表示させず、
    「2階層目だけ」のような、階層を指定して表示させる方法はないでしょうか?

    稚拙な質問で申し訳ないですが、どうぞよろしくお願い致します。

  2. chiharu より:

    fukap に代わり返信させていただきます。

    ご質問頂いている内容が、記事内容と異なる気がしますので簡単な説明とさせていただきます。
     ※当記事はカテゴリブロックの表示項目の絞込です。

    商品詳細ページ内に特定階層のカテゴリ名だけを表示される場合は、以下のファイルを触ります。
    /data/Smarty/templates/default/products/detail.tpl

    このファイルの186行目ぐらいに、関連カテゴリを表示する記述があります。
    <a href=”<!–{$smarty.const.ROOT_URLPATH}– rel=”nofollow”>products/list.php?category_id=<!–{$arrRelativeCat[r][s].category_id}–>”><!–{$arrRelativeCat[r][s].category_name}–></a>

    この記述の中に2箇所ほど、”$arrRelativeCat[r][s]”という多次元配列があります。
    この内”r”が関連カテゴリの登録されている配列番号です。
    次の”s”が関連カテゴリの階層情報となります。

    今回の質問では「例1」,「例2」のどちらの場合も2階層目を表示することになるため、”s”の値を
    ”1”に固定する(配列のindexは 0 から始まります)と望んだ結果が出るのではないでしょうか。
    もちろん不要となるループ処理は削除なり、コメントアウトして下さい。

  3. 西岡 より:

    chiharu様
    早速のご返信ありがとうございます。

    臨んだ通りに表示されました!
    本当にありがとうございます、助かりました。

    下記ソースで実装しました。



    ご丁寧に対応していただき、誠にありがとうございました。

  4. 西岡 より:

    すみませんソースが表示されていませんでした。
    下記ソースです。




    本当にありがとうございました。

  5. 西岡 より:
    <!--{section name=r loop=$arrRelativeCat}-->
    <!--{$arrRelativeCat[r][1].category_name|h}-->
    <!--{/section}-->
    
  6. sayaka より:

    お世話になります。

    今回と同様の処理を3階層以上で実現したいのですが、どのようにすれば良いのかご存じでしょうか?

    もしご存じでしたら、教えて頂けると助かります。
    よろしくお願い致します。

  7. chiharu より:

    ご質問頂いた3階層以上の場合ですが、残念ながらテンプレートファイルを
    ちょっと編集しただけでは対応できません。

    当記事で2階層とさせていただいているのには理由があります。
    理由は非常に簡単なことで、カテゴリブロックで使用するカテゴリ情報には、
    「カテゴリ自身」と「カテゴリの親」のカテゴリIDを保持しています。
    つまり2階層までであれば、簡単に特定のカテゴリを指定できるからです。

    ですが3階層以上の場合には、それぞれのカテゴリで「親カテゴリID」を調べて、
    さらに上位の親カテゴリを調べる、と言ったループ処理が必要になります。

    そのため、3階層以上にて同様のことを行う場合、以下のファイルを変更
    するほうが早いのではないかと思います。
    data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Category.php

    function の lfGetCatTree でカテゴリブロックの基礎データを作成しています。
    この辺りの処理で、必要なデータのみを再抽出するようにカスタマイズするとお望みの
    結果が出せるのではないでしょうか。

    この場合、それなりのカスタマイズとなるため、ブログのコメント欄での遣り取りはご容赦願います。
    カスタマイズをご依頼の場合、有償となりますがナックウェブにて対応させていただきます。

  8. sayaka より:

    返信ありがとうございます!

    3階層以上は難しくなるんですね。

    教えて頂いたLC_Page_FrontParts_Bloc_Category.php
    をカスタマイズして実装できるように挑戦してみます。
    ありがとうございました。

コメントを残す

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

* Copy This Password *

* Type Or Paste Password Here *

*

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