gpt4 book ai didi

Magento - addStoreFilter 不起作用?

转载 作者:行者123 更新时间:2023-12-04 23:09:03 24 4
gpt4 key购买 nike

在 Magento 中获取产品集合时,我希望 StoreFilter 做到这一点,按当前商店进行过滤。但我无法让它工作。

假设我有 2 家商店是这样设置的:enter image description here

两个商店都有不同的根类别。 Main Store 是默认的示例数据,Store2 只添加了一个产品。我原以为使用商店过滤器,只会显示当前商店的根类别内的产品。但我正在展示所有产品。我通过在我的类别 View 模板中放置以下内容来测试这个:

$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 设置为 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 是正确的。

最佳答案

$_testproductCollection应该是这样的 $_testproductCollection = Mage::getResourceModel('reports/product_collection')->addAttributeToSelect('*')->addStoreFilter() .

如果您打印 SELECT从该集合中您会看到没有任何商店列,因此 addStoreFilter()不能申请 WHERE .

您应该使用 joinField()在您的收藏中添加 store_id来自 catalog_product_entity_varchar 的专栏 table 。

编辑

对不起,让你久等了 ;)

$collection = Mage::getResourceModel('catalog/product_collection');
$collection->joinField('store_id', 'catalog_category_product_index', 'store_id', 'product_id=entity_id', '{{table}}.store_id = 1', 'left');
$collection->getSelect()->distinct(true);

这应该可以解决问题,但为了确定,请检查您是否获得了正确的产品:)

关于Magento - addStoreFilter 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5069318/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com