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 > . После этого вы получите полную коллекцию продуктов. Несмотря на то, что это обходной путь, это помогло мне достичь того, чего мне нужно было достичь.