web-dev-qa-db-fra.com

Obtenir des produits d'une commande dans Magento

Dans mon projet magento, sous Mon compte> Mes commandes (client enregistré), je peux afficher les détails de la commande ainsi que les produits que j'ai commandés. Maintenant, pour chacun des produits commandés, j'aimerais récupérer un attribut spécifique. Cependant, de mon point de vue, l'extrait de code au début de sales/order/items/renderer/default.phtml qui est $_item = $this->getItem(); est la commande elle-même, donc si j'utilise quelque chose comme $_item->getId(), obtenir le numéro de commande et non le produit.

J'ai essayé de faire des recherches et j'ai fini avec ce code:

$orders = Mage::getModel('sales/order')->load($_item->getId());
foreach($orders as $order):
    $is = $order->getAllItems();
    foreach($is as $i):
        echo $i->getProductId();
    endforeach;
endforeach;

En espérant pouvoir utiliser l'identifiant du produit pour obtenir les autres attributs dudit produit, cependant, je reçois une erreur avec ce code sans aucun moyen de dire quelle est l'erreur. J'ai aussi essayé quelque chose comme ça:

 $_productCollection = Mage::getResourceModel('reports/product_collection')
                        ->addAttributeToSelect('*')
                        ->addAttributeToFilter('name', $name);

                    foreach($_productCollection as $_product):
                        $_temp = $_product->getResource()->getAttribute('name_en')->getFrontend()->getValue($_product);
                    endforeach;

Mais je continue à obtenir 0 lorsque j'essaie de vérifier le nombre d'éléments dans la collection de produits. Comment puis-je récupérer un attribut personnalisé pour le produit sur cette page?

10
user1597438

Cela devrait mieux fonctionner:

   $orderIncrementId = '100000010';
   $order = Mage::getModel('sales/order')->loadByIncrementId($orderIncrementId);
   $items = $order->getAllVisibleItems();
   foreach($items as $i):
      echo $i->getProductId();
   endforeach;

Jetez un oeil ici pour plus d'informations: http://www.magentocommerce.com/boards/viewthread/18629/

24
Seth Malaki

Bien que la réponse donnée par Electric Jesus fonctionne, elle pose un problème potentiel de performance lié au chargement de produits dans la boucle.

La mise en œuvre correcte consisterait en premier lieu à obtenir les ID des produits commandés, puis à les charger tous en même temps. En supposant que votre commande soit déjà chargée:

$orderedItems = $order->getAllVisibleItems();
$orderedProductIds = [];

foreach ($orderedItems as $item) {
    $orderedProductIds[] = $item->getData('product_id');
}

$productCollection = Mage::getModel('catalog/product')->getCollection();
$productCollection->addAttributeToSelect('*');
$productCollection->addIdFilter($orderedProductIds);
18
Tim Bezhashvyly
$_orders = $this->getOrders();
$orderitems = $_order->getAllVisibleItems();
foreach ($_orders as $_order): 
  $orderitems = $_order->getAllVisibleItems();
  foreach ($orderitems as $orderitem): 
    $product = $orderitem->getProduct(); 
    echo $product->getId();
  endforeach; 
endforeach;

J'ai le même problème et c'est ma solution

1
julius yusdianto