【发布时间】:2011-02-21 17:44:44
【问题描述】:
在 Magento 中获取产品集合时,我希望 StoreFilter 能够做到这一点,按当前商店进行过滤。但我无法让它工作。
假设我有 2 家这样设置的商店:
两家商店都有不同的根类别。 Main Store 是默认的示例数据,Store2 只添加了一个产品。我原以为使用商店过滤器,只会显示当前商店根类别中的产品。但我正在展示每一个产品。我正在通过在我的类别视图模板中放置以下内容来对此进行测试:
$store_id = Mage::app()->getStore()->getId();
$_testproductCollection = Mage::getResourceModel('reports/product_collection')
->setStoreId($storeId)
->addStoreFilter($store_id)
->addAttributeToSelect('*');
$_testproductCollection->load();
foreach($_testproductCollection as $_testproduct){
echo $this->htmlEscape($_testproduct->getName());
};
如果我回显商店 ID,它会给我正确的号码。我在商店 2 中只有一种产品,那么为什么我将所有商店的所有产品都退回?我可以将 Main Store 中的每个产品都设置为不在 Store2 中显示,然后添加可见性过滤器,但这会花很长时间。
另外,我刚刚注意到,如果我回显产品商店 ID,我会得到当前 ID,而不是分配给它的商店:
echo $_testproduct->getStoreId()
发生了什么事?
更新(2011 年 4 月 8 日): 好的,所以我尝试加入字段以便包含 store_id(如下所示),代码部分 {{table}}.store_id = 1 只是将所有产品设置为具有 store_id of 1. 如何才能获取与产品关联的 store_id?
$_testproductCollection = Mage::getResourceModel('catalog/product_collection');
$_testproductCollection->joinField('store_id', 'catalog_category_product_index', 'store_id', 'product_id=entity_id', '{{table}}.store_id = 1', 'left');
$_testproductCollection->getSelect()->distinct(true);
$_testproductCollection->addAttributeToSelect('*')->load();
foreach($_testproductCollection as $_testproduct){
echo $this->htmlEscape($_testproduct->getName())."<br/>";
echo "STORE IS ".$_testproduct->getData('store_id')."<br/>";
};
如果我检查我的数据库的 catalog_category_product_index 表,store_id 是正确的。
【问题讨论】:
-
什么版本的magento?
-
目前有没有解决方案,遇到同样的问题。我绝对需要一个特殊的 storeview 的 productcollection。我有一个网站,4 个商店视图(2 家商店的 2 种语言),它们划分了一些类别,而另一些则没有。我是 magento 的新手,所以我不明白 joinField() 的事情。有没有例子或其他解决方案。
-
见这里 - stackoverflow.com/questions/5078752/… - 我最终改为按根类别过滤。
-
按 root 过滤是非常错误的,所以现在回到这个试图弄清楚它是否会工作......请参阅上面的更新
-
我的按商店进行类别过滤的解决方案)[stackoverflow.com/a/19284088/1266559][1] [1]:stackoverflow.com/a/19284088/1266559
标签: magento