web-dev-qa-db-fra.com

Magento obtenir tous les produits

J'essaie d'obtenir l'intégralité de la collection de produits magento, sans aucun filtre ni restriction, mais je n'arrive pas à obtenir tous les produits.

J'ai déjà essayé différentes méthodes, mais elles me donnent toutes une sélection très limitée de produits. Disons que le magasin contient 5000 produits, mais il n'en montre que 500. Lorsque je vérifie le catalogue -> les produits me montrent la liste complète.

Mage::getModel('catalog/product')->getCollection();
Mage::getResourceModel('catalog/product_collection')->addAttributeToSelect('*');
Mage::getModel("catalog/product")->getResourceCollection()->load();

Ils retournent tous le même montant (500), alors que je m'attends à ce qu'il me donne 5000 produits. Je préférerais ne pas utiliser Zend ou PHP et simplement m'en tenir à la manière Magento pour les obtenir.

Quelqu'un sait-il vraiment obtenir TOUS les produits ou peut-il m'indiquer dans la bonne direction pourquoi cela ne fonctionne pas?

La chaîne de sélection renvoyée est:

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

Plusieurs possibilités ici: 1. Quelques limitations internes, comme 500 du tout. 2. Quelques limitations de pagination. Produits par page (dans le résumé db) 3. Quelques limitations de lazyload.

Peut-être, il y a un problème, mais je pense que c'est une limite intérieure.

5
Jevgeni Smirnov
//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 />';
}
14
ashraf mohammed

Et quelque chose comme ça:

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

Avec cette méthode j'obtiens plus de 500 mais tout mon produit ...

10
Alexandre

Désactivez votre flat_catalog_product dans admin> système> configuration> catalogue> catalogue. Après cela, vous obtiendrez une collection complète de produits. Même s'il s'agit d'une solution de contournement, cela m'a aidé à atteindre ce que j'avais besoin de réaliser.

2
Joey Gomes

Vous utilisez peut-être la structure de produit du catalogue plat. Cela crée une table distincte pour chaque vue de magasin.

Utilisez le code ci-dessous pour imprimer la requête SQL. vous verrez que la collection vient d'une table plate comme

catalog_product_flat_38

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