我正在尝试获取整个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`
答案 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);
这让我高兴