Magento получить все продукты - PullRequest
11 голосов
/ 16 января 2012

Я пытаюсь получить всю коллекцию продуктов 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`

Ответы [ 5 ]

13 голосов
/ 26 марта 2014
//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 />';
}
10 голосов
/ 16 января 2012

И как-то так:

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

С помощью этого метода я получаю более 500, но весь мой продукт ...

5 голосов
/ 16 января 2012

Несколько возможностей здесь: 1. Некоторые внутренние ограничения, например, 500.2. Некоторое ограничение подкачки.Продуктов на страницу (в аннотации db) 3. Некоторые ограничения при lazyload.

Возможно, есть некоторые излишние проблемы, но я думаю, что это некое внутреннее ограничение.

2 голосов
/ 20 мая 2016

Отключите ваш flat_catalog_product в разделе админ> система> конфигурация> каталог> каталог. После этого вы получите полную коллекцию товаров. Несмотря на то, что это обходной путь, он помог мне достичь того, что мне нужно было достичь.

1 голос
/ 01 июля 2014

Возможно, вы используете структуру плоского каталога товаров.Это создает отдельную таблицу для каждого представления магазина.

Используйте приведенный ниже код для печати запроса sql.Вы увидите, что коллекция поступает из плоского стола, как

catalog_product_flat_38

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