Ẩn hoặc xóa danh mục bộ lọc loại từ bộ điều hướng lớp


8

Tôi đang vật lộn để loại bỏ bộ lọc Danh mục khỏi lớp, vì tôi đã có menu thả xuống Danh mục trong trang web mới của mình, vì vậy nó sẽ chỉ lãng phí không gian (và gây nhầm lẫn cho khách hàng của tôi)

Tôi biết rằng vấn đề này đã được hỏi nhiều lần và đã được giải quyết, nhưng tôi đã thử mọi giải pháp mà không thành công. Tôi tin rằng điều này có liên quan đến mẫu tùy chỉnh tôi sử dụng cho trang web.

Sau khi xem tệp local.xml của tôi (được tìm thấy trong thư mục mẫu của tôi), tôi tin rằng tôi nên làm việc xung quanh các dòng này:

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

Loại khối đầu tiên - phải là menu danh mục (và tôi ổn với điều đó). Loại khối thứ hai - xây dựng menu "bộ lọc theo", ngay bên dưới menu danh mục và tôi khá chắc chắn rằng vấn đề nằm ở đây.

Tôi tin rằng tôi nên bỏ đặt thứ gì đó bên trong "catalog.leftnav" nhưng ngay cả khi tôi cố gắng thêm mã này:

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

chẳng có gì xảy ra. Tôi đang làm gì sai?


bạn chỉ cần tránh phần danh mục từ điều hướng lớp và không muốn tránh các bộ lọc khác?
Rajeev K Tomy

chính xác! nhưng tôi đang phát điên để tìm hiểu làm thế nào ....
giancarlo

Không nên localDB nằm trong thư mục bố cục, không phải thư mục mẫu?
Yumecosmos

Câu trả lời:


14

Dựa trên câu trả lời của stackexchange.com:
Nếu bạn muốn thực hiện điều đó thông qua XML, bạn nên chỉnh sửa catalog.xml

thay thế:

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

Với cái này:

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

có một phương pháp sạch cổ điển, + 1 cho điều đó
Rajeev K Tomy

1
Tôi đã thử, nhưng đơn giản là nó không hoạt động. Tôi tin rằng điều này có liên quan đến mẫu tùy chỉnh của tôi. Trong mẫu "catalog.xml" của tôi không có những dòng này. Dù sao, tôi đã đọc trong stackexchange rằng phương pháp đúng là làm việc với tệp "local.xml". Khác với phương thức -.xml-, bạn có thể gợi ý cho tôi cách khác để đạt được kết quả mong muốn không?
giancarlo

Sự khác biệt giữa <bí danh> và <con> là gì? Đối với tôi cả hai tác phẩm ...
Versedi 25/215

Không có sự khác biệt trong trường hợp cụ thể này. Bạn có thể sử dụng ngay cả <action method = "unsetChild"> <xyz> category_filter </ xyz> </ action>
Amasty

Nếu giống như tôi, bạn đã thử thêm phần này vào tệp localDB của mình thì bạn có thể gặp loại lỗi này .... "Bạn không thể xác định tên tương quan 'mycustomattribution' nhiều lần" vì mô-đun catalog / layer_view được gọi hai lần - Giải thích tại đây: stackoverflow.com/questions/10524017/ đá Sử dụng mã được đăng bởi giancarlo bên dưới <reference name="catalog.leftnav"> <action method="unsetChild"><alias>category_filter</alias></action> </reference>nhưng thêm vào local.xml. cái này hiệu quả với tôi vào ngày 1.8
Tofuwar chiến binh

5

Hãy thử mã này trước. Ở đây chúng tôi đang cố gắng loại bỏ điều này thông qua bố trí xml update

Tập tin : 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>

Điều này sẽ giải quyết vấn đề của bạn.

Nếu nó không hoạt động, thì bạn cần phải viết lại khối. Đối với điều này, bạn cần phải tạo một mô-đun. Khối mà bạn cần viết lại là Mage_Catalog_Block_Layer_View.

Tập tin kích hoạt mô-đun trông như thế này

Tập tin : app/etc/modules/Avoid_CategoryFromLN.xml

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

Đây là cách viết lại cấu hình

Tập tin : 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>

Bây giờ khối viết lại của bạn sẽ sở hữu nội dung này

Tập tin : 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;
    }
}

Đây getFilters()là phương pháp thực sự bao gồm các bộ lọc danh mục bên trong bộ lọc điều hướng lớp. Chúng tôi chỉ loại bỏ mã đó bằng cách viết lại lớp lõi. Đó là nó.

Lưu ý lớn : Bạn nên giữ chữ in hoa. Đừng làm cho chúng chữ nhỏ. Nếu bạn làm như vậy, nó sẽ không hoạt động. Magento nghiêm ngặt trong những điều này :) Vì vậy, sửa lại tất cả các tên thư mục, tên tệp nhiều lần. Hãy chắc chắn rằng bạn giữ tất cả các tên nội dung như nó là

Bây giờ hãy thử lại.


xin lỗi, nhưng việc chỉnh sửa tệp local.xml không cho kết quả nào. liên quan đến việc tạo ra một mô-đun tôi có một số nghi ngờ về nó. Tôi là một "newbie" magento vì vậy xin vui lòng chịu đựng với tôi. Đây là những gì tôi đã thực hiện để tạo một mô-đun mới như được đề xuất: Tạo thư mục mới này: "app \ code \ local \ my_module_name \ etc" Tạo tệp config.xml Thêm nội dung bạn đã nói với tôi trong "config.xml" tệp Tạo một thư mục mới: "app \ code \ local \ my_module_name \ block \ layer" Tạo một tệp mới có tên "view.php" Sao chép nội dung bạn đề xuất trong tệp "view.php". Sau này tôi thử lại, nhưng không có gì thay đổi. Tôi có bỏ lỡ điều gì không?
giancarlo

Ngoài ra, tôi đã phát hiện ra câu trả lời này trong stackexchange cung cấp một giải pháp khác: magento.stackexchange.com/questions/31631/ chủ Nhưng tôi tin rằng điều này nên được sửa đổi để phù hợp với cài đặt mẫu của tôi.
giancarlo

Không có ý định của bạn là sai. Tôi sẽ cập nhật câu trả lời của tôi cho bạn
Rajeev K Tomy

chỉnh sửa câu trả lời. Bây giờ nó là một mô-đun hoàn chỉnh. Hãy sử dụng nó. Xin lưu ý rằng bạn cần giữ chữ in hoa như hiện tại
Rajeev K Tomy

liên quan đến liên kết mà bạn đã chỉ ra, nó không lý tưởng trong trường hợp của bạn. Nếu bạn đặt isAnchorvào no, thì toàn bộ điều hướng lớp sẽ biến mất.
Rajeev K Tomy

5

Tôi sẽ đăng những gì nó làm việc cho tôi như một tài liệu tham khảo cho người khác

thêm cái này:

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

trong tab thiết kế tùy chỉnh của mỗi thể loại thực hiện thủ thuật.

Đặc biệt nhớ thêm nó vào danh mục phụ huynh, đó là những gì đã làm cho tôi.


1

Các giải pháp unset-con trong local.xmlhoạt động tốt. Xin lưu ý rằng nếu bạn đang làm việc với phiên bản doanh nghiệp, tham chiếu được gọi là " enterprisecatalog":

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

Lưu ý phụ: Bạn không thể tìm thấy bất kỳ định nghĩa khối con tương ứng nào trong bất kỳ XML cốt lõi nào. Điều này là do thực tế là trẻ em như " category_filter" được tạo ra (mã hóa cứng) trong _prepareLayoutchức năng của chế độ xem lớp danh mục tương ứng. unsetChildTuy nhiên, bằng cách sử dụng, bạn có thể loại bỏ đứa trẻ được thêm mã hóa cứng.


0

Đây là tác phẩm https://magento.stackexchange.com/a/45249/9951

NHƯNG

Cũng cần thêm các thay đổi cho ứng dụng / thiết kế / frontend / rwd / default / template / catalog / layer / view.phtml

như thế này

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

và cũng cần thay đổi thành /app/code/core/Mage/Catalog/Block/Layer/View.php

sao chép /app/code/core/Mage/Catalog/Block/Layer/View.php

đến /app/code/local/Mage/Catalog/Block/Layer/View.php

và thay đổi phương thức canShowOptions ()

cần thay đổi

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

đến

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

và cố gắng


0

Đây là những gì làm việc cho tôi (trên Magento 1.9).

Thêm những dòng này vào local.xmltập tin của bạn :

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

  <!-- ... -->
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.