AddAttributeToFilter未在Magento中加载特定产品

时间:2013-01-31 08:30:28

标签: php magento

我在app / code / local / myown / layoutmods / catalog / block / product / list /中写了Manufacturer.php文件 有功能。现在,当我尝试使用它时,加载所有产品。我检查了该文件,但它不会被制造商过滤。谢谢大家的建议。

protected function _getProductCollection() {
        if (is_null($this->_productCollection)) {

            // Get attribute value id:
            $manufacturer_name = Mage::registry( 'current_category' )->getName();
            $productModel = Mage::getModel('catalog/product');
            $attr = $productModel->getResource()->getAttribute('manufacturer');
            if ($attr->usesSource()) {
                $manufacturer_id = $attr->getSource()->getOptionId($manufacturer_name);
            }

            // load and filter product collection
            $collection = Mage::getModel('catalog/product')->getCollection();
            Mage::getModel('catalog/layer')->prepareProductCollection($collection);
            $collection->addStoreFilter();
            $this->_productCollection = $collection;
            $this->_productCollection->addAttributeToSelect( 'manufacturer' )->addAttributeToFilter( 'manufacturer', array( 'eq' => $manufacturer_id ) );
        } 

        return $this->_productCollection;
    }

1 个答案:

答案 0 :(得分:0)

据我所知,问题不在产品系列或过滤器中,而是在$ manufacturer_id参数中。

如果您在// Get属性值id:和//之间注释掉代码并加载和过滤产品集合注释,然后将$ manufacturer_id替换为数据库中的一个ID,它将起作用。我也不得不发表评论

Mage::getModel('catalog/layer')->prepareProductCollection($collection);

在我的情况下,这一行阻止了任何东西进入收集,所以我不确定它到底是做什么的。

我看到的第一个问题是$ manufacturer_id并不一定总是因为

而被设置
if ($attr->usesSource()) {

我无法运行代码,因为Mage :: registry('current_category')在我测试时没有包含值。我建议您重新测试用于检索制造商ID的代码。