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`
Ответы
Ответ 1
Несколько возможностей здесь:
1. Некоторое внутреннее ограничение, как и 500.
2. Некоторое ограничение пейджинга. Продукты на странице (в аббревиатуре db)
3. Некоторое ограничение lazyload.
Возможно, есть некоторые проблемы, но я думаю, что это какой-то внутренний предел.
Ответ 2
//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 />';
}
Ответ 3
И что-то вроде этого:
$products = Mage::getModel('catalog/product')->getCollection();
foreach($products as $prod) {
$product = Mage::getModel('catalog/product')->load($prod->getId());
}
С помощью этого метода я получаю более 500, но весь мой продукт...
Ответ 4
Возможно, вы используете структуру продукта Flat Catalog. Это создает отдельную таблицу для каждого вида хранилища.
Используйте код ниже для печати SQL-запроса. вы увидите, что коллекция идет из плоского стола, например
catalog_product_flat_38
echo Mage::getModel('catalog/product')->getCollection()->getSelect();
Ответ 5
Отключите файл flat_catalog_product в каталоге admin > system > configuration > catalog > . После этого вы получите полную коллекцию продуктов. Несмотря на то, что это обходной путь, это помогло мне достичь того, чего мне нужно было достичь.