Пользовательская коллекция товаров не фильтруется с помощью многоуровневой навигации
Я переопределил класс List.php продукта и вот код
protected function _getProductCollection()
{
if (is_null($this->_productCollection)) {
$result = array_unique($productIds);
$collection = Mage::getResourceModel('catalog/product_collection');
$attributes = Mage::getSingleton('catalog/config')->getProductAttributes();
$collection->addAttributeToSelect($attributes);
$collection->addIdFilter($result);
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);
$this->_productCollection = $collection;
}
return $this->_productCollection;
}
Работая нормально, я также добавил слоистую навигацию, как упомянуто здесь, и слоистая навигация появилась, как и ожидалось.
Единственная проблема заключается в том, что, когда я нажимаю на любой фильтр в многоуровневой навигации, навигация обновляется, и фильтр также добавляется в URL, но список товаров не будет фильтроваться выбранным фильтром. Подскажите пожалуйста, как я могу применить фильтры к коллекции продуктов
1 ответ
Я могу ошибаться здесь, но ваш переопределен _getProductCollection()
Похоже, что метод обхода многоуровневой навигации. Я не знаю, какова была ваша цель, что требовало от вас этого, но в оригинальной версии коллекция продуктов вводится из многоуровневой модели навигации. Mage_Catalog_Model_Layer
:
protected function _getProductCollection()
{
if (is_null($this->_productCollection)) {
$layer = $this->getLayer();
/* @var $layer Mage_Catalog_Model_Layer */
if ($this->getShowRootCategory()) {
$this->setCategoryId(Mage::app()->getStore()->getRootCategoryId());
}
// if this is a product view page
...
$origCategory = null;
if ($this->getCategoryId()) {
$category = Mage::getModel('catalog/category')->load($this->getCategoryId());
if ($category->getId()) {
$origCategory = $layer->getCurrentCategory();
$layer->setCurrentCategory($category);
}
}
$this->_productCollection = $layer->getProductCollection();
$this->prepareSortableFieldsByCategory($layer->getCurrentCategory());
if ($origCategory) {
$layer->setCurrentCategory($origCategory);
}
}
}
Возможно, вам следует вернуться к исходной версии этого метода и посмотреть, начинает ли работать многоуровневая навигация, и если это так, то вы знаете, что вам нужно расширить или включить логику этого слоя в свою версию.