我正在尝试使用类别过滤器获取产品集合,该过滤器将类别作为对象。问题是我收到以下错误:
致命错误:在非对象中调用成员函数getId() /var/www/vhosts/officeaccounts/subdomains/ls/httpdocs/app/code/core/Mage/Catalog/Model/Resource/Product/Collection.php 在第557行
当我注释掉类别过滤器时,它不会出错。
它说我不是在传递一个物体。但是我仍然可以通过执行var_dump($category->getId());
来访问对象的getId()方法。这会将id作为字符串返回。
$category = Mage::registry('current_category');
if (!$category) {
$product = $this->getProduct();
$cats = $product->getCategoryIds();
$category = Mage::getModel('catalog/category')->load($cats[0]);
}
function getFallbackItems() {
$productCollection = Mage::getResourceModel('catalog/product_collection')
->addAttributeToSelect('*')
->addCategoryFilter($category);
$productCollection->getSelect()->order(new Zend_Db_Expr('RAND()'));
return $productCollection;
}
任何想法?
答案 0 :(得分:0)
如果Mage_Catalog_Model_Resource_Product_Collection的函数addAttributeToFilter()的最后一个if else块尝试此代码
elseif(is_string($attribute) && $attribute == 'category_ids'){
if(isset($condition['eq'])){
$this->getSelect()->join(
array('category' => $this->getTable('catalog/category_product')),
'category.product_id=e.entity_id AND category.category_id='.$condition['eq'],
array()
);
}
return $this;
}
答案 1 :(得分:0)
要按类别获取产品集,请执行以下操作:
$category = Mage::getModel('catalog/category')->load(12);
$productCollection = $category->getProductCollection();
$productCollection->getSelect()->order(new Zend_Db_Expr('RAND()'));
print_r($productCollection->getData());
注意:这里 12 是category_id
答案 2 :(得分:0)
您的代码存在一些问题:
====>
所以代码可以改进如下:
$category = Mage::registry('current_category');
if (!$category) {
$product = $this->getProduct();
$cats = $product->getCategoryIds();
$category = Mage::getModel('catalog/category')->load($cats[0]);
Mage:register('current_category', $category);
}
// Suppose it will be called somewhere
function getFallbackItems() {
$category = Mage::registry('current_category');
$productCollection = Mage::getResourceModel('catalog/product_collection')
->addAttributeToSelect('*');
if ($category && $category->getId()) {
$productCollection->addCategoryFilter($category);
}
$productCollection->getSelect()->order(new Zend_Db_Expr('RAND()'));
return $productCollection;
}