web-dev-qa-db-fra.com

Magento - Obtenir les options du produit à partir de $ item

Sur la page du panier, il y a la boucle foreach suivante:

foreach($this->getItems() as $_item) {

}

Je dois connaître les options de produit pour ces éléments. J'ai essayé plusieurs méthodes mais je ne parviens pas à récupérer les résultats dont j'ai besoin.

J'ai essayé:

foreach($this->getItems() as $_item) {
    print_r($_item->getProductOptions());
}

Et:

foreach($this->getItems() as $_item) {
    print_r($_item->getOptionList());
}

Existe-t-il d'autres fonctions que je pourrais utiliser?

7
Karl

Essayez d'utiliser: 

$_item->getProduct()->getTypeInstance(true)->getOrderOptions($_item->getProduct());
25
David

Cela pourrait vous aider à démarrer dans la bonne direction ...

$productSku = "ABCDE";
$product = Mage::getModel('catalog/product');
$productId = $product->getIdBySku( $productSku );
$product->load($productId);

/**
 * In Magento Models or database schema level, the product's Custom Options are
 * executed & maintained as only "options". So, when checking whether any product has
 * Custom Options or not, we should check by using this method "hasOptions()" only.
 */
if($product->hasOptions()) {
    echo '<pre>';

    foreach ($product->getOptions() as $o) {
        $optionType = $o->getType();
        echo 'Type = '.$optionType;

        if ($optionType == 'drop_down') {
            $values = $o->getValues();

            foreach ($values as $k => $v) {
                print_r($v);
            }
        }
        else {
            print_r($o);
        }
    }

    echo '</pre>';
}
1
Matthew

Peut-être comme ça:

foreach($items as $product) {
    $options = $product->getProduct()->getTypeInstance(true)->getOrderOptions($product->getProduct());
    if ($options)
    {
        if (isset($options['options']))
        {
            $result = $options['options'];
        }
        if(count($result)>0){
            foreach($result as $key =>$value){
                $resultoption =  $value['value'];
        }
    }
}
0
Christoffer Bubach

La réponse actuelle, telle qu'elle se présente, est un non-départ pour moi. Quel que soit le code $_item, il est possible que la méthode getProduct() ne soit pas utilisée. 

D'autre part, vous aurez probablement une id disponible que vous pourrez charger directement. Dans mon exemple, je devais obtenir l'objet product à partir d'un élément dans $_items = $this->helper('catalog/product_compare')->getItemCollection().

Cela me permet d'utiliser: <?php $product = Mage::getModel('catalog/product')->load($_item->getId()) ?>

0
Jonathan