我一直致力于Magento(版本1.8.0.0)的自定义模块,该模块显示某个产品的相关产品列表。
为了实现这一目标,我通过覆盖Mage_Catalog_Block_Product_List
类创建了自己的模块。
基本上这是它的工作原理:
从控制器我捕获产品entity_id
并将产品存储在注册表中,以便我可以在我的自定义写入块中使用它,该块名为list.php
以下是填充产品集合的方法:
protected function _getProductCollection()
{
if (is_null($this->_productCollection)) {
$prod = Mage::registry('chosenproduct');
$this->_productCollection = $prod->getRelatedProductCollection()
->addAttributeToSelect('required_options')
->addAttributeToFilter(array(array('attribute'=>'accessory_manufacturer','neq'=>false)))
->addAttributeToSort('position', 'asc')
->addStoreFilter()
->setPageSize(30)
->setCurPage(1);
;
$this->_addProductAttributesAndPrices($this->_productCollection);
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($this->_productCollection);
$this->setProductCollection($this->_productCollection);
}
return $this->_productCollection;
}
我还在自定义模块的布局.xml中添加了以下内容,以确保分层导航显示:
<reference name="left">
<block type="catalog/layer_view" name="catalog.leftnav" after="currency" template="catalog/layer/view.phtml"/>
</reference>
分层导航显示,但似乎它将所有产品作为集合而不是我在上面添加的方法中使用的自定义集合。
我也知道我可以使用此$layer = Mage::getSingleton('catalog/layer');
图层类也有一个名为prepareProductCollection和setCollection的方法,但由于某些原因我无法使其工作。
对此有何帮助?
基本上我想为自定义集合中的产品提供分层导航。
谢谢,
答案 0 :(得分:15)
我只是设法实现我想要的。我已经覆盖了Mage_Catalog_Model_Layer
类和Mage_Catalog_Model_Category
两者现在都有一个名为$ _customCollection的新变量:protected $_customProductCollection;
我在两个类中都覆盖了getProductCollection(),并在方法的开头添加了这个:
if(isset($this->_customProductCollection)){
return $this->_customProductCollection;
}
我还有一个方法允许我在这两个类中设置这个“customProductCollection”。设置完成后,分层导航/类别的其余数据将基于此集合。
)