web-dev-qa-db-ja.com

Magentoがすべての製品を入手

フィルターや制限なしで、magento製品コレクション全体を取得しようとしていますが、すべての製品を取得できません。

私はすでにさまざまな方法を試しましたが、それらはすべて非常に限られた製品の選択肢を与えてくれます。ストアに5000の商品が含まれているが、500しか表示されていないとします。カタログをチェックすると、商品がリスト全体に表示されます。

Mage::getModel('catalog/product')->getCollection();
Mage::getResourceModel('catalog/product_collection')->addAttributeToSelect('*');
Mage::getModel("catalog/product")->getResourceCollection()->load();

それらはすべて同じ量(500)を返しますが、5000個の製品が得られると思います。私はZendやPHPを使用せず、Magentoの方法を使用してそれらを取得することを好みます。

誰もが本当にすべての製品を入手する方法を知っていますか、これがうまくいかない理由を正しい方向に私に向けることができますか?

返される選択文字列は次のとおりです。

SELECT 1 AS `status`, `e`.`entity_id`, `e`.`type_id`, `e`.`attribute_set_id` FROM `catalog_product_flat_4` AS `e`
11
JNDPNT

ここにいくつかの可能性があります:1.全部で500のようないくつかの内部制限。 2.ページングの制限。ページあたりの製品数(db抽象)3.レイジーロードの制限。

たぶん、問題があるのか​​もしれませんが、これは内なる限界だと思います。

5
Jevgeni Smirnov
//to overwrite limit but you need first to increase your memory limit

 $collection = Mage::getModel('catalog/product')->getCollection()
->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 />';
}
14
ashraf mohammed

そして、このようなもの:

$products = Mage::getModel('catalog/product')->getCollection();
foreach($products as $prod) {
$product = Mage::getModel('catalog/product')->load($prod->getId());
}

この方法で500を超えるが、すべての製品が...

10
Alexandre

Admin> system> configuration> catalog> catalogでflat_catalog_productをオフにします。この後、完全な製品コレクションを取得します。これは回避策ですが、必要なことを達成するのに役立ちました。

2
Joey Gomes

フラットカタログプロダクトストラクチャーを使用している可能性があります。これにより、ストアビューごとに個別のテーブルが作成されます。

以下のコードを使用してSQLクエリを出力します。あなたはコレクションがのようなフラットテーブルから来ていることがわかります

catalog_product_flat_38

echo Mage::getModel('catalog/product')->getCollection()->getSelect();
1
Santosh kumar