Quel est la différence entre getAllVisibleItems() et getAllItems() ?

septembre 12th, 2015 | by | magento

Sep
12

Avant de voir les résultats obtenus en appelant ces 2 fonctions, voyons déjà ce qu'elles ont dans le ventre.

Ces fonctions sont utilisées pour récupérer tous les produits d'une commande :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Charger une commande spécifique
$order_id = 100000123;
$order = Mage::getModel("sales/order")->load($order_id);
 
$items = $order->getAllItems(); 
// Ou
$items = $order->getAllVisibleItems();
 
foreach ($items as $itemId => $item)
{
    echo "SKU : ".$item->getSku()."<br />";
    /* d'autres infos :
    $item->getName();
    $item->getPrice();
    $item->getProductId();
    $item->getQtyOrdered();*/
}

Avec le code ci-dessus, on récupère une commande et affiche les infos des produits.

Voyons maintenant le code de chacune des deux fonctions qui nous intéressent :

1
2
3
4
5
6
7
8
9
10
public function getAllItems()
{
    $items = array();
    foreach ($this->getItemsCollection() as $item) {
       if (!$item->isDeleted()) {
          $items[] = $item;
       }
    }
    return $items;
}
1
2
3
4
5
6
7
8
9
10
public function getAllVisibleItems()
{
    $items = array();
    foreach ($this->getItemsCollection() as $item) {
       if (!$item->isDeleted() && !$item->getParentItemId()) {
          $items[] = $item;
      }
    }
    return $items;
}

Comme on peut le voir la seule différence se situe dans la condition avec l'ajout de && !$item->getParentItemId()

Qui ne récupèrent les produits, que s'ils sont parents. Cela signifie que si vous avez un produit configurable dans votre commande/panier getAllVisibleItems ne récupèrera que le produit parent alors que
getAllItems récupèrera les 2 produits (parent ET enfant)

Avec getAllItems() :

SKU : TsIbiza
Nom : Tshirt Ibiza
Prix : 24.9200
ID : 17212
quantité : 1.0000
SKU : TsIbizaFit
Nom : Tshirt Ibiza Fitness
Prix : 0.0000
ID : 17213
quantité : 1.0000

Avec getAllVisibleItems()

SKU : TsIbiza
Nom : Tshirt Ibiza
Prix : 24.9200
ID : 17212
quantité : 1.0000

Pour conclure, il est préférable d'utiliser getAllVisibleItems pour avoir la quantité exacte de produits.

Authored by

Laisser un commentaire