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

magento.stackexchange https://magento.stackexchange.com/questions/6099

Вопрос

У меня есть пользовательский модуль для слоистой навигации 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, страница списка категорий работает нормально, с Price Slider. Но в каталоге страница поиска цена появляется с неправильными значениями.

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

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

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

Это было полезно?

Решение

Я не знаю, как создается ваше расширение, поэтому я не могу предоставить код, но вот идея на WoW, вы можете сделать это.
На странице поиска этот кусок кода всегда возвращает 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');
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top