Magento获得所有产品

时间:2012-01-16 13:26:35

标签: magento collections product

我正在尝试获取整个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-string是:

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

6 个答案:

答案 0 :(得分:13)

//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 />';
}

答案 1 :(得分:10)

这样的事情:

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

通过这种方法,我得到的产品超过了500,但我的所有产品......

答案 2 :(得分:5)

这里有几种可能性: 1.一些内在的限制,比如500。 2.一些寻呼限制。每页产品(以db摘要形式) 3.一些延迟限制。

也许,有一些问题,但我认为这是一个内在的限制。

答案 3 :(得分:2)

在admin&gt;中关闭flat_catalog_product “系统”&gt;配置&gt;目录&gt;目录。在此之后,您将获得完整的产品系列。尽管这是一种解决方法,但它帮助我实现了我需要实现的目标。

答案 4 :(得分:1)

您可能正在使用平面目录产品结构。这为每个商店视图创建了单独的表。

使用下面的代码打印sql查询。你会看到这个集合来自像

这样的平台
  

catalog_product_flat_38

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

答案 5 :(得分:0)

尝试使用

Mage::app()->setCurrentStore('0');
// same as 
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

这让我高兴