Примените дополнительный фильтр в поле зрения
Я пытаюсь добавить дополнительные фильтры в коллекцию после того, как коллекция, похоже, была сгенерирована. В каталоге product list.phtml есть следующая строка кода:
$_productCollection = $this->getLoadedProductCollection();
Когда я var_dump
это делаю, он отчитывается как коллекция (mage_catalog_model_resource_product_collection). Однако, если я попытаюсь добавить:
$_productCollection->addAttributeToFilter('attr_handle', array('eq' => 155));
Непосредственно после первой строки результирующая коллекция остается точно такой же. Как я могу изменить то, что находится в $_productCollection
в list.phtml
?
Любая помощь приветствуется
---- ОБНОВЛЕНИЕ----
Я замечаю, что в List.php блок коллекция загружается в метод _beforeToHtml
:
$this->_getProductCollection()->load();
Поэтому я предполагаю, что мне нужно "выгрузить" (?) его, а затем применить мои фильтры в представлении, а затем повторно загрузить его (?)
3 answers
Вы можете вызвать $collection->clear()
, применить свои фильтры, а затем перезагрузить коллекцию. Однако IIRC коллекция будет находиться в другом состоянии, чем ожидает модель слоя.
Это комбинация обоих Mage_Catalog_Model_Resource_Product_Collection::clear()
и Varien_Data_Collection::clear()
.
Вы можете отфильтровать коллекцию продуктов перед загрузкой. Смотрите следующее, ваш config.xml
<frontend>
<events>
<catalog_product_collection_load_before>
<observers>
<ssd_ajaxify>
<class>SSD_Ajaxify_Model_Observer</class>
<method>catalogProductCollectionLoadBefore</method>
</ssd_ajaxify>
</observers>
</catalog_product_collection_load_before>
</events>
</frontend>
И Observer.php :
class SSD_Ajaxify_Model_Observer
{
public function catalogProductCollectionLoadBefore($observer)
{
$request = Mage::app()->getRequest();
$path = implode('_', array(
$request->getModuleName(),
$request->getControllerName(),
$request->getActionName(),
));
if ($path == 'catalog_category_view') {
$collection = $observer->getEvent()->getCollection();
$collection->addAttributeToFilter('price', array('gt'=> 50));
}
}
}
Кстати, это влияет на вашу панель инструментов и многоуровневую навигацию, а также на список товаров на странице просмотра категорий.
Используя блок перезаписи списка продуктов Magento, мы можем добавить дополнительный фильтр в коллекцию продуктов.
Please use below link for reference:-
[http://shariqnasir.blogspot.in/2011/06/override-core-modules.html][1]
[http://pratikkhamar.wordpress.com/2012/04/13/magentooverride-block/][2]
Надеюсь, это поможет вам.