$ product-> getOptions () renvoie un résultat vide


9

J'essaie d'obtenir les détails du produit, y compris la valeur des options personnalisées du produit dans un bloc personnalisé que j'ai créé.C'est le code que j'ai utilisé sur la page de détail du produit et cela a fonctionné là-bas, mais lorsque j'essaie de l'utiliser sur la page de blocage personnalisée, get Options renvoie une valeur vide.

if ($ _product-> getId ()) {  
    foreach ($ _product-> getOptions () as $ opt) {  
    echo $ optionType = $ opt-> getType ();  
      if ($ optionType == 'drop_down') {  
        $ values ​​= $ opt-> getValues ​​();  
        foreach ($ valeurs comme $ v)
        {
     $ mydata = $ v-> getTitle ();      
print_r ($ mydata);    
        }
      }  
    }   
}

Je suis nouveau sur magento, donc je ne sais pas ce que je manque ici.
Quelqu'un peut-il me donner un indice s'il vous plaît
Merci


Voir cette réponse à partir d'un fil connexe.
quickshiftin

Réponses:


2

Essaye ça:

if (Mage::registry('current_product')) {
    $product = Mage::registry('current_product');
} else {
    $product = Mage::getSingleton('catalog/product');
}


if ($product->getId()) {
    if ($product->hasCustomOptions()) {
        foreach ($product->getOptions() as $option) {
            $optionType = $option->getType();
            if ($optionType == 'drop_down') {
                $values = $option->getValues();
                foreach ($values as $k => $value) {
                    print_r($value);
                }
            }

        }
    }
}

1
ne fonctionne pas ... Lorsque j'imprime le tableau $ prodct, toutes les informations sont affichées, à l'exception des options personnalisées, tandis que le même code fonctionne
correctement

2

Le problème est que le produit n'est pas complètement chargé dans votre bloc. La load()méthode s'assure que toutes les informations d'un objet sont chargées. Si vous utilisez uniquement loadByAttribute()ou une collection, ce n'est pas le cas.

Un exemple serait:

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

Si vous souhaitez afficher plusieurs produits, vous devez éviter de les utiliser, load()car cela a un fort impact négatif sur les performances. Désolé, je ne peux pas vous aider à ajouter des options à une collection.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.