Как переопределить блок цен только для списка категорий, а не для списка поиска?
-
16-10-2019 - |
Вопрос
У меня есть пользовательский модуль для слоистой навигации 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');
}
}