Как переопределить блокировку цен только для списка категорий, а не для списка поиска?


У меня есть пользовательский модуль для многоуровневой навигации ajax с несколькими фильтрами, в котором есть ползунок цен. Мне не нужен ползунок цен на странице результатов поиска.

Мой config.xml переписывает блок следующим образом

    <blocks>
        <catalog>
            <rewrite>
                <layer_state>Royal_Layerednav_Block_Catalog_Layer_State</layer_state>
                <layer_view>Royal_Layerednav_Block_Catalog_Layer_View</layer_view>
                <product_list_toolbar>Royal_Layerednav_Block_Catalog_Product_List_Toolbar</product_list_toolbar>
                <layer_filter_attribute>Royal_Layerednav_Block_Catalog_Layer_Filter_Attribute</layer_filter_attribute>
                <layer_filter_price>Royal_Layerednav_Block_Catalog_Layer_Filter_Price</layer_filter_price>
            </rewrite>
        </catalog>
        <catalogsearch>
            <rewrite>
                <layer_filter_attribute>Royal_Layerednav_Block_CatalogSearch_Layer_Filter_Attribute</layer_filter_attribute>
                <result>Royal_Layerednav_Block_CatalogSearch_Result</result>
            </rewrite>
        </catalogsearch>

Без переопределения этого ценового блока все работает нормально (конечно, без ползунка цен). Если я переопределю ценовой блок Royal_Layerednav_Block_Catalog_Layer_Filter_Price, страница списка категорий отлично работает с ползунком цен. Но в поиске по каталогу ползунок цены страницы отображается с неправильными значениями.

Я признаю, что я не создавал ценовой блок для сбора цен на странице результатов поиска. Но мне не нужно показывать ценовой фильтр на странице поиска.

Итак, мой вопрос: Есть ли способ, чтобы catalogsearch не принимал мой переопределенный ценовой блок, вместо этого он должен использовать ценовой блок по умолчанию Mage_Catalog_Block_Layer_Filter_Price

маг_каталог_блок_слоя_фильтра_цена

Я не знаю, что для этого нужно сделать. Кто-нибудь может, пожалуйста, помочь?

Author: Shathish, 2013-07-26

1 answers

Я не знаю, как построено ваше расширение, поэтому я не могу предоставить какой-либо код, но вот идея о том, как вы можете это сделать.
На странице поиска этот фрагмент кода всегда будет возвращать значение null:

Mage::registry('current_category');

На странице категории это вернет экземпляр категории. Вы можете использовать это в своем собственном блоке. Поэтому для каждого метода, который вы переопределяете, вы можете выполнить следующую проверку, прежде чем что-то делать. Допустим, ваш метод называется doSomething(). В вашем блоке это может выглядеть так:

public function doSomething($someParam) {
    if (!Mage::registry('current_category')){//not on category page
        //call the default behavior
        return parent::doSomething($someParam);
    }
    //your custom behavior here
}

Вы даже можете измените шаблон, который отображает блок следующим образом:

public function __construct()
{
    parent::__construct();
    //by default the template 'catalog/layer/filter.phtml' will be set
    if (Mage::registry('catalog_category')){//if category page
        //set your custom template with price slider.
        $this->setTemplate('custom/template/here.phtml');
    }
}
 2
Author: Marius, 2013-07-26 07:07:42