$ product-> getOptions () gibt ein leeres Ergebnis zurück


9

Ich versuche, Produktdetails einschließlich des Werts für benutzerdefinierte Produktoptionen in einem von mir erstellten benutzerdefinierten Block abzurufen. Dies ist der Code, den ich auf der Produktdetailseite verwendet habe und der dort funktioniert hat. Wenn ich jedoch versuche, ihn auf einer benutzerdefinierten Blockseite zu verwenden, gibt get Options einen leeren Wert zurück.

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

Ich bin neu in Magento, also nicht sicher, was ich hier verpasse.
Kann mir bitte jemand einen Hinweis geben
Danke


Siehe diese Antwort aus einem verwandten Thread.
Quickshiftin

Antworten:


2

Versuche dies:

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
funktioniert nicht ... Wenn ich das Array $ prodct drucke, werden alle Informationen außer den benutzerdefinierten Optionen angezeigt, während derselbe Code auf der Produktansichtseite
einwandfrei

2

Das Problem ist, dass das Produkt nicht vollständig in Ihren Block geladen ist. Die load()Methode stellt sicher, dass alle Informationen eines Objekts geladen werden. Wenn Sie nur loadByAttribute()eine Sammlung verwenden, ist dies nicht der Fall.

Ein Beispiel wäre:

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

Wenn Sie mehrere Produkte anzeigen möchten, sollten Sie die Verwendung jedoch vermeiden, load()da dies einen starken negativen Einfluss auf die Leistung hat. Es tut mir leid, dass ich Ihnen beim Hinzufügen von Optionen zu einer Sammlung nicht helfen kann.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.