7

両方のストアのルート カテゴリは異なります。メインストアはデフォルトのサンプルデータで、セカンドストアには 1 つの製品だけが追加されました。ストア フィルターを使用すると、現在のストアのルート カテゴリ内の製品のみが表示されると思っていたでしょう。しかし、私はすべての製品を表示しています。カテゴリ ビュー テンプレートに以下を配置して、これをテストしています。

$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 番目の Store に商品が 1 つしかないのに、すべてのストアからすべての商品が返品されるのはなぜですか? Main Store のすべての製品を Store2 に表示しないように設定してから、可視性フィルターを追加できますが、それには時間がかかります。

また、製品ストア ID をエコーすると、割り当てられているストアではなく、現在の ID が取得されることに気付きました。

echo $_testproduct->getStoreId()

この問題を解決するには?

4

3 に答える 3

6

次のようにリソース モデルにストア フィルターを追加することもできます。

$collection = Mage::getResourceModel('catalog/product_collection')
    ->addStoreFilter($this->getStoreId())
    ->addAttributeToSelect('*');
于 2014-03-11T07:30:30.210 に答える
5

これを試してみてください

$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;
于 2013-10-29T05:09:47.557 に答える
2
$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 />';
}
于 2014-03-26T15:52:22.433 に答える