Sembunyikan atau hapus filter "kategori" dari navigasi berlapis

8

Saya berjuang untuk menghapus filter Kategori dari layered, karena saya sudah memiliki menu dropdown kategori di situs web baru saya, jadi itu hanya akan membuang-buang ruang (dan membingungkan pelanggan saya)

Saya tahu bahwa masalah ini sudah ditanyakan berkali-kali dan sudah diselesaikan, tetapi saya mencoba setiap solusi tanpa hasil. Saya percaya bahwa ini terkait dengan templat kustom yang saya gunakan untuk situs web.

Setelah melihat file local.xml saya (ditemukan di folder template saya), saya percaya bahwa saya harus bekerja di sekitar baris ini:

<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>

Jenis blok pertama - harus menjadi menu kategori (dan saya baik-baik saja dengan itu). Tipe blok kedua - membangun menu "filter oleh", tepat di bawah menu kategori, dan saya cukup yakin bahwa masalahnya ada di sini.

Saya percaya bahwa saya harus menghapus sesuatu di dalam "catalog.leftnav" tetapi bahkan jika saya mencoba menambahkan kode ini:

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

tidak ada yang terjadi. Apa yang saya lakukan salah?

giancarlo
sumber
Anda hanya perlu menghindari bagian kategori dari navigasi berlapis dan tidak ingin menghindari filter lain?
Rajeev K Tomy
persis! tapi aku akan gila mencari tahu bagaimana ....
giancarlo
Tidakkah local.xml berada di folder tata letak, bukan folder template?
Yumecosmos

Jawaban:

14

Berdasarkan jawaban stackexchange.com:
Jika Anda ingin melakukannya melalui XML Anda harus mengedit catalog.xml

menggantikan:

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

dengan ini:

<block type="catalog/layer_view" name="catalog.leftnav" after="currency" template="catalog/layer/view.phtml">  
    <action method="unsetChild"><alias>category_filter</alias></action>
</block>
Amasty
sumber
ya metode bersih klasik, +1 untuk itu
Rajeev K Tomy
1
Saya mencoba, tetapi itu tidak berhasil. Saya yakin ini terkait dengan templat khusus saya. Di template saya "catalog.xml" tidak ada baris ini. Lagi pula, saya sudah membaca di stackexchange bahwa metode yang benar adalah bekerja dengan file "local.xml". Selain metode -.xml-, dapatkah Anda menyarankan saya cara lain untuk mencapai hasil yang diinginkan?
giancarlo
Apa perbedaan antara <alias> dan <child>? Bagi saya, keduanya berfungsi ...
versedi
Tidak ada perbedaan dalam kasus khusus ini. Anda dapat menggunakan bahkan <action method = "unsetChild"> <xyz> category_filter </xyz> </action>
Amasty
Jika seperti saya Anda mencoba menambahkan ini ke local.xml Anda maka Anda mungkin mendapatkan kesalahan semacam ini .... "Anda tidak dapat mendefinisikan nama korelasi 'mycustomattribute' lebih dari sekali" karena modul catalog / layer_view disebut dua kali - Dijelaskan di sini: stackoverflow.com/questions/10524017/... Gunakan kode yang diposting oleh giancarlo di bawah ini <reference name="catalog.leftnav"> <action method="unsetChild"><alias>category_filter</alias></action> </reference>tetapi tambahkan ke local.xml. ini bekerja untuk saya pada 1,8
Tofuwarrior
5

Coba kode ini terlebih dahulu. Di sini kami mencoba untuk menghapus ini melalui pembaruan tata letak xml

File: 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>

Ini akan menyelesaikan masalah Anda.

Jika tidak berhasil, maka Anda perlu melakukan penulisan ulang blokir. Untuk ini, Anda perlu membuat modul. Blok yang perlu Anda tulis ulang adalah Mage_Catalog_Block_Layer_View.

File aktivasi modul terlihat seperti ini

File: app/etc/modules/Avoid_CategoryFromLN.xml

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

Beginilah bentuk konfigurasi ulang

File: 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>

Sekarang blok penulisan ulang Anda harus memiliki konten ini

File: 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;
    }
}

Berikut getFilters()adalah metode yang sebenarnya termasuk filter kategori di dalam filter navigasi berlapis. Kami hanya menghapus kode itu dengan menulis ulang kelas inti. Itu dia.

Catatan Besar :: Anda harus menyimpan huruf kapital apa adanya. Jangan membuat mereka huruf kecil. Jika Anda melakukannya, itu tidak akan berhasil. Magento sangat ketat dalam hal ini :) Jadi perbaiki semua nama folder, nama file beberapa kali. Pastikan Anda menyimpan semua nama konten apa adanya

Sekarang coba lagi.

Rajeev K Tomy
sumber
maaf, tetapi mengedit file local.xml tidak memberikan hasil apa pun. mengenai pembuatan modul saya ragu tentang itu. Saya seorang "pemula" magento jadi tolong tahan dengan saya. Inilah yang telah saya lakukan untuk membuat modul baru seperti yang disarankan: Buat folder baru ini: "app \ code \ local \ my_module_name \ etc" Buat file config.xml Tambahkan konten yang Anda katakan pada "config.xml" file Buat folder baru: "app \ code \ local \ my_module_name \ block \ layer" Buat file baru bernama "view.php" Salin konten yang Anda sarankan dalam file "view.php". Setelah ini saya coba lagi, tetapi tidak ada yang berubah. Apakah saya melewatkan sesuatu?
giancarlo
Juga, saya telah menemukan jawaban ini di stackexchange yang menawarkan solusi lain: magento.stackexchange.com/questions/31631/... Tapi saya yakin bahwa ini harus dimodifikasi agar sesuai dengan pengaturan template saya.
giancarlo
tidak kondfigurasi Anda salah. Saya akan memperbarui jawaban saya untuk Anda
Rajeev K Tomy
jawaban yang diedit. Sekarang ini adalah modul yang lengkap. Jangan ragu untuk menggunakannya. Harap perhatikan bahwa Anda perlu menyimpan huruf kapital apa adanya
Rajeev K Tomy
mengenai tautan yang Anda tunjukkan, itu tidak ideal untuk kasus Anda. Jika Anda menempatkan isAnchorke no, maka seluruh berlapis get navigasi menghilang.
Rajeev K Tomy
5

Saya akan memposting apa yang berhasil bagi saya sebagai referensi untuk orang lain

menambahkan ini:

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

di tab desain khusus setiap kategori melakukan trik.

Ingat terutama untuk menambahkannya di kategori induk, itulah yang melakukannya untuk saya.

giancarlo
sumber
1

Solusi unset-child dalam local.xmlbekerja dengan baik. Harap dicatat, bahwa jika Anda bekerja dengan edisi perusahaan referensi disebut " enterprisecatalog":

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

Catatan sisi: Anda tidak dapat menemukan definisi anak-blok yang sesuai di salah satu inti XML. Ini disebabkan oleh kenyataan, bahwa anak-anak seperti " category_filter" dibuat (dikodekan) dalam _prepareLayoutfungsi tampilan layer katalog yang sesuai. Namun, dengan menggunakan unsetChildAnda dapat menghapus anak yang ditambahkan dengan kode-keras.

Manuel Rülke
sumber
0

Ini berfungsi https://magento.stackexchange.com/a/45249/9951

TAPI

Juga perlu menambahkan perubahan ke aplikasi / desain / frontend / rwd / default / template / katalog / layer / view.phtml

seperti ini

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

dan juga perlu perubahan ke /app/code/core/Mage/Catalog/Block/Layer/View.php

salin /app/code/core/Mage/Catalog/Block/Layer/View.php

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

dan ubah metode canShowOptions ()

butuh perubahan

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

untuk

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

dan coba

Alex
sumber
0

Inilah yang bekerja untuk saya (di Magento 1.9).

Tambahkan baris ini di local.xmlfile Anda :

<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>

  <!-- ... -->
Andrea
sumber