简体   繁体   English

Magento按商店ID获取产品集合过滤器

[英]Magento Get Product Collection Filter By Store Id

Both stores have a different root category. 两个商店都有不同的根类别。 Main Store is the default sample data, Second Store has just one product I was added. Main Store是默认的样本数据,Second Store只有一个我添加的产品。 I would have thought that using the store filter, only products within the root category of the current store would show up. 我原以为使用商店过滤器,只会显示当前商店根类别中的产品。 But I'm getting every product showing. 但我正在展示每一件产品。 I'm testing this by placing the following in my category view template: 我通过在类别视图模板中放置以下内容来测试它:

$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()); 
};

If I print the store ID, it's giving me the correct number. 如果我打印商店ID,它会给我正确的号码。 I have only one product in second Store , so why am I getting every product from all stores returned? 我在第二个商店只有一个产品,为什么我要从所有商店回收所有产品? I can set every product in Main Store to not show in Store2 and then add a visibility filter, but that would take forever. 我可以将主商店中的每个产品设置为不在Store2中显示,然后添加可见性过滤器,但这将需要永远。

Also, I just noticed, if I echo the products store ID, I get the current ID, not the store it's assigned to: 另外,我刚注意到,如果我回应产品商店ID,我会得到当前ID,而不是它分配给的商店:

echo $_testproduct->getStoreId()

How to solve this issue? 如何解决这个问题?

Try this You get as you want 试试这个你得到你想要的

$counter = "";
/*$model=Mage::getModel('catalog/product')->setStoreId($post['stores']);
$rootCategoryId = Mage::app()->getStore($post['stores'])->getRootCategoryId();
$products = $model->getCollection();
$products->addStoreFilter($post['stores']);
$products->addAttributeToFilter('sku', array('nlike' => 'B%'));
$products->addAttributeToFilter('status',1);
$counter=$products->getData();*/
$model=Mage::getModel('catalog/product')->setStoreId($post['stores']);
$category_model = Mage::getModel('catalog/category');
$rootCategoryId = Mage::app()->getStore($post['stores'])->getRootCategoryId();
$_category = $category_model->load($rootCategoryId);
$all_child_categories = $category_model->getResource()->getAllChildren($_category);
foreach($all_child_categories as $storecategories):

$category = Mage::getModel('catalog/category')->load($storecategories);
$products = $category->getProductCollection();
//echo "Category id is::".$storecategories."Products are::".count($products);
//echo "<br/>";
foreach($products as $collection):
   $removecatindex = $collection->getData();
   unset($removecatindex['cat_index_position']);
   $counter[] = $removecatindex;
  endforeach;
endforeach;

You can also try adding a store filter to the resource model like this: 您还可以尝试将商店过滤器添加到资源模型,如下所示:

$collection = Mage::getResourceModel('catalog/product_collection')
    ->addStoreFilter($this->getStoreId())
    ->addAttributeToSelect('*');
$collection = Mage::getModel('catalog/product')->getCollection()->addStoreFilter($store_id)
->addAttributeToSelect('*') // select all attributes
->setPageSize(5000) // limit number of results returned
->setCurPage(1); // set the offset (useful for pagination)

// we iterate through the list of products to get attribute values
foreach ($collection as $product) {
  echo $product->getName(); //get name
  echo (float) $product->getPrice(); //get price as cast to float
  echo $product->getDescription(); //get description
  echo $product->getShortDescription(); //get short description
  echo $product->getTypeId(); //get product type
  echo $product->getStatus(); //get product status

  // getCategoryIds(); returns an array of category IDs associated with the product
  foreach ($product->getCategoryIds() as $category_id) {
      $category = Mage::getModel('catalog/category')->load($category_id);
      echo $category->getName();
      echo $category->getParentCategory()->getName(); // get parent of category
  }
  //gets the image url of the product
  echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA).
      'catalog/product'.$product->getImage();
  echo $product->getSpecialPrice();
  echo $product->getProductUrl();  //gets the product url
  echo '<br />';
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM