階層型ナビゲーションから「カテゴリ」フィルターを非表示または削除する


8

新しいWebサイトにカテゴリドロップダウンメニューが既にあるので、レイヤーからカテゴリフィルターを削除するのに苦労しています。

この問題はすでに何度も尋ねられて解決済みであることは知っていますが、すべての解決策を試しても成功しませんでした。これは私がウェブサイトで使用しているカスタムテンプレートに関連していると思います。

(テンプレートフォルダーにある)local.xmlファイルを確認した後、次の行を回避する必要があると思います。

<reference name="product_list">
        <block type="core/text_list" name="category-right" as="category-right" translate="label">
            <label>Right Column</label>
            <block type="catalog/navigation" name="catalog.category" before="-" template="catalog/navigation/category_nav.phtml"/>
            <block type="catalog/layer_view" name="catalog.leftnav" after="catalog.category" template="catalog/layer/view.phtml"/>
            <block type="filterproducts/bestsellers_home_list" name="bestseller" template="catalog/navigation/best_sellers.phtml"/>
            <block type="core/template" name="right.permanent.callout" template="callouts/right_col.phtml">
                <block type="cms/block" name="cms_images_block">
                    <action method="setBlockId"><block_id>category_right_block</block_id></action>
                </block>
            </block>
        </block>
    </reference>

最初の- ブロックタイプ -はカテゴリメニューである必要があります(それで問題ありません)。2番目のブロックタイプは、カテゴリメニューのすぐ下にある「フィルター」メニューを構築します。問題はここにあると確信しています。

「catalog.leftnav」内の設定を解除する必要があると思いますが、このコードを追加しようとしても:

<catalog_category_layered>
     <reference name="product_list">
        <action method="unsetChild"><child>category_filter</child></action>
    </reference>
</catalog_category_layered>

何も起こりません。何が悪いのですか?


階層化されたナビゲーションからカテゴリセクションを回避する必要があるだけで、他のフィルタを回避したくないですか?
Rajeev K Tomy 2014

丁度!しかし、私はその方法を見つけるために夢中になります...
giancarlo

local.xmlは、テンプレートフォルダーではなく、レイアウトフォルダーにあるべきではありませんか?
ユメコスモス

回答:


14

stackexchange.comの回答に基づく:
XMLで実行する場合は、catalog.xmlを編集する必要があります

交換:

<block type="catalog/layer_view" name="catalog.leftnav" 
    after="currency" template="catalog/layer/view.phtml" />  

これとともに:

<block type="catalog/layer_view" name="catalog.leftnav" after="currency" template="catalog/layer/view.phtml">  
    <action method="unsetChild"><alias>category_filter</alias></action>
</block>

はい、古典的なクリーンな方法、そのための+1
Rajeev K Tomy

1
試しましたが、うまくいきません。これは私のカスタムテンプレートに関連していると思います。私のテンプレート「catalog.xml」には、これらの行はありません。とにかく、私はstackexchangeを読んで、正しい方法は「local.xml」ファイルを操作することです。-.xml-メソッド以外に、望ましい結果を達成する別の方法を教えていただけますか?
giancarlo 2014年

<alias>と<child>の違いは何ですか?私にとっては両方とも動作します...
versedi '25

この特定のケースでは違いはありません。<action method = "unsetChild"> <xyz> category_filter </ xyz> </ action>でも使用できます
Amasty

私のようにこれをlocal.xmlに追加しようとすると、この種のエラーが発生 する可能性がありますstackoverflow.com/questions/10524017/… 以下のgiancarloによって投稿されたコードを使用しますが、local.xmlに <reference name="catalog.leftnav"> <action method="unsetChild"><alias>category_filter</alias></action> </reference>追加します。これは1.8
Tofuwarrior

5

最初にこのコードを試してください。ここでは、レイアウトxmlの更新によってこれを削除しようとしています

ファイル: app/design/frontend/<package>/<theme>/layout/local.xml

<layout>
    <catalog_category_layered>
        <reference name="catalog.leftnav">
            <action method="unsetChild"><alias>category_filter</alias></action>
        </reference>
    </catalog_category_layered>
</layout>

これはあなたの問題を解決します。

うまくいかなかった場合は、ブロックの書き換えを行う必要があります。このためには、モジュールを作成する必要があります。書き換えが必要なブロックはMage_Catalog_Block_Layer_Viewです。

モジュールのアクティベーションファイルは次のようになります。

ファイル: app/etc/modules/Avoid_CategoryFromLN.xml

<config>
    <modules>
         <Avoid_CategoryFromLN>
             <active>true</active>
             <codePool>local</codePool>
         </Avoid_CategoryFromLN>
     </modules>
</config>

これは、書き換え構成がどのように見えるかです

ファイル: app\code\local\Avoid/CategoryFromLN/etc/config.xml

<config>
    <modules>
        <Avoid_CategoryFromLN>
            <version>1.0.0</version>
        </Avoid_CategoryFromLN>
    </modules>
    <global>
        <blocks>
            <catalog>
                <rewrite>
                    <layer_view>Avoid_CategoryFromLN_Block_Layer_View</layer_view>
                </rewrite>
            </catalog>
        </blocks>
    </global>
</config>

これで、書き換えブロックはこのコンテンツを所有するはずです

ファイル: app\code\local\Avoid/CategoryFromLN/Block/Layer/View.php

<?php
class Avoid_CategoryFromLN_Block_Layer_View exteds Mage_Catalog_Block_Layer_View
{
    public function getFilters()
    {

        $filterableAttributes = $this->_getFilterableAttributes();
        foreach ($filterableAttributes as $attribute) {
            $filters[] = $this->getChild($attribute->getAttributeCode() . '_filter');
        }

        return $filters;
    }
}

getFilters()レイヤードナビゲーションフィルター内に実際にカテゴリフィルターを含めるメソッドを次に示します。コアクラスを書き換えて、そのコードを削除するだけです。それでおしまい。

Big Note::大文字はそのままにしておくべきです。それらを小文字にしないでください。使用した場合、機能しません。Magentoはこれらの点で厳密です:)したがって、すべてのフォルダ名、ファイル名を何度も修正します。すべての名前の内容をそのままにしてください

もう一度やり直してください。


申し訳ありませんが、local.xmlファイルを編集しても結果は得られません。モジュールの作成に関して、私はそれについていくつか疑問があります。私はマゼントの「初心者」なので、ご容赦ください。これは、提案されたように新しいモジュールを作成するために行ったものです。この新しいフォルダーを作成します: "app \ code \ local \ my_module_name \ etc" config.xmlファイルを作成します "config.xml"で指定した内容を追加しますファイル新しいフォルダを作成します:「app \ code \ local \ my_module_name \ block \ layer」「view.php」という新しいファイルを作成します「view.php」ファイルで提案したコンテンツをコピーします。この後、私は再試行しますが、何も変わりません。私は何かを逃していますか?
ジャンカルロ2014年

また、私は別のソリューションを提供するstackexchangeでこの回答を発見しました:magento.stackexchange.com/questions/31631/…しかし、これは私のテンプレート設定に合うように変更する必要があると確信しています。
giancarlo 2014年

いいえ、あなたの構成は間違っています。私はあなたのために私の答えを更新します
ラジーブKトミー14年

回答を編集しました。これで完全なモジュールになりました。お気軽にご利用ください。大文字はそのままにしておく必要があることに注意してください
Rajeev K Tomy

あなたが指摘したリンクに関しては、それはあなたの場合には理想的ではありません。に配置isAnchorするとno、階層化されたナビゲーション全体が非表示になります。
Rajeev K Tomy 2014

5

他の人への参照としてそれが私のために働いたものをポストします

これを追加する:

<reference name="catalog.leftnav">  
<action method="unsetChild"><alias>category_filter</alias></action>
</reference>

すべてのカテゴリのカスタムデザインタブでトリックを行います。

特に、親カテゴリーに追加することを忘れないでください。それが私のためにそれをしたのです。


1

のunset-childソリューションはlocal.xmlうまく機能します。エンタープライズ版で作業している場合、参照は " enterprisecatalog" と呼ばれることに注意してください。

<reference name="enterprisecatalog.leftnav">
    <action method="unsetChild">
        <alias>category_filter</alias>
    </action>
</reference>

補足:コアXMLのいずれにも対応する子ブロック定義が見つからない場合があります。これは、 " category_filter"のような子_prepareLayoutが、対応するカタログレイヤービューの関数で作成(ハードコード)されるためです。unsetChildただし、これを使用すると、ハードコードされた追加の子を削除できます。


0

これは動作し ますhttps://magento.stackexchange.com/a/45249/9951

だが

app / design / frontend / rwd / default / template / catalog / layer / view.phtmlに変更を追加する必要もあり ます

このような

if($_filter != '' && $_filter->getItemsCount())

/app/code/core/Mage/Catalog/Block/Layer/View.phpへの変更も必要 です

/app/code/core/Mage/Catalog/Block/Layer/View.phpをコピーします

/app/code/local/Mage/Catalog/Block/Layer/View.php

そしてメソッドcanShowOptions()を変更します

変更が必要

if (&& $filter->getItemsCount())

if ($filter != '' && $filter->getItemsCount())

してみてください


0

これは私のために働いたものです(Magento 1.9で)。

local.xmlファイルに次の行を追加します。

<layout version="0.1.0">

  <default>

    <reference name="left">

      <!-- Remove layered navigation block form catalog page -->
      <remove name="catalog.leftnav"/>

      <!-- ... -->

    </reference>

    <!-- ... -->

  </default>

  <!-- ... -->

  <catalogsearch_result_index>

    <!-- Remove layered navigation from search result page -->
    <reference name="left">
      <action method="unsetChild">
        <child>catalogsearch.leftnav</child>
      </action>
    </reference>

  </catalogsearch_result_index>

  <!-- ... -->
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.