Как переопределить блокировку цен только для списка категорий, а не для списка поиска?
У меня есть пользовательский модуль для многоуровневой навигации 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
маг_каталог_блок_слоя_фильтра_цена
Я не знаю, что для этого нужно сделать. Кто-нибудь может, пожалуйста, помочь?
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');
}
}