Magento-addCategoryFilter引发错误

Magento-addCategoryFilter引发错误,magento,magento-1.4,Magento,Magento 1.4,我正在成功运行此查询: $_productCollection = Mage::getResourceModel('reports/product_collection') ->addAttributeToSelect('*') ->setOrder('created_at', 'desc') ->setPage(1, 5); 但当

我正在成功运行此查询:

 $_productCollection = Mage::getResourceModel('reports/product_collection')
                        ->addAttributeToSelect('*')
                        ->setOrder('created_at', 'desc')
                        ->setPage(1, 5);
但当我加上

->addCategoryFilter('3')
我得到了以下错误:

Fatal error: Call to a member function getId() on a non-object in /home/sitename/public_html/app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Product/Collection.php on line 556
它正在运行的块定义为

<block type="catalog/product_list" name="catalog.right.bestsellers" template="catalog/navigation/right.phtml"/>


在catalog.xml上,的参数必须是类型为
Mage\u catalog\u Model\u Category
的对象。的参数必须是类型为
Mage\u catalog\u Model\u Category的对象。基于您的错误,我认为您运行的是稍旧的版本,但错误的根本原因应该是相同的

类别名
reports/product\u collection
解析为

Mage_Reports_Model_Mysql4_Product_Collection
在资源模式上下文中。类
Mage\u Reports\u Model\u Mysql4\u Product\u Collection
Mage\u Catalog\u Model\u Resource\u Eav\u Mysql4\u Collection\u Abstract
的子类。
Mage\u Catalog\u Model\u Resource\u Eav\u Mysql4\u Collection\u Abstract上的
addCategoryFilter
如下所示

public function addCategoryFilter(Mage_Catalog_Model_Category $category)
{
    $this->_productLimitationFilters['category_id'] = $category->getId();
    if ($category->getIsAnchor()) {
        unset($this->_productLimitationFilters['category_is_anchor']);
    }
    else {
        $this->_productLimitationFilters['category_is_anchor'] = 1;
    }

    ($this->getStoreId() == 0)? $this->_applyZeroStoreProductLimitations() : $this->_applyProductLimitations();

    return $this;
}
请注意,在1.4.2中,参数中正在进行一些类型检查

public function addCategoryFilter(Mage_Catalog_Model_Category $category)
我怀疑你的版本没有那个检查。因此,它在到达时失败

$this->_productLimitationFilters['category_id'] = $category->getId();
您传入一个字符串,然后Magento尝试调用该字符串上的
getId
。这就是为什么会出现错误

Magento希望您传入一个类别对象,而不是类别ID。请尝试一下

$category = Mage::getModel('catalog/category')->load(3);
$p = Mage::getResourceModel('reports/product_collection')
            ->addAttributeToSelect('*')
            ->setOrder('created_at', 'desc')
            ->addCategoryFilter($category)
            ->setPage(1, 5);

这包括第1.4.2条。基于您的错误,我认为您运行的是稍旧的版本,但错误的根本原因应该是相同的

类别名
reports/product\u collection
解析为

Mage_Reports_Model_Mysql4_Product_Collection
在资源模式上下文中。类
Mage\u Reports\u Model\u Mysql4\u Product\u Collection
Mage\u Catalog\u Model\u Resource\u Eav\u Mysql4\u Collection\u Abstract
的子类。
Mage\u Catalog\u Model\u Resource\u Eav\u Mysql4\u Collection\u Abstract上的
addCategoryFilter
如下所示

public function addCategoryFilter(Mage_Catalog_Model_Category $category)
{
    $this->_productLimitationFilters['category_id'] = $category->getId();
    if ($category->getIsAnchor()) {
        unset($this->_productLimitationFilters['category_is_anchor']);
    }
    else {
        $this->_productLimitationFilters['category_is_anchor'] = 1;
    }

    ($this->getStoreId() == 0)? $this->_applyZeroStoreProductLimitations() : $this->_applyProductLimitations();

    return $this;
}
请注意,在1.4.2中,参数中正在进行一些类型检查

public function addCategoryFilter(Mage_Catalog_Model_Category $category)
我怀疑你的版本没有那个检查。因此,它在到达时失败

$this->_productLimitationFilters['category_id'] = $category->getId();
您传入一个字符串,然后Magento尝试调用该字符串上的
getId
。这就是为什么会出现错误

Magento希望您传入一个类别对象,而不是类别ID。请尝试一下

$category = Mage::getModel('catalog/category')->load(3);
$p = Mage::getResourceModel('reports/product_collection')
            ->addAttributeToSelect('*')
            ->setOrder('created_at', 'desc')
            ->addCategoryFilter($category)
            ->setPage(1, 5);

我们如何从多个类别获得产品?此“addCategoryFilter()”将只接受一个类别。如何从多个类别中获取产品?此“addCategoryFilter()”将只接受1个类别。