$ product-> getOptions () retorna resultado vazio

9

Estou tentando obter detalhes do produto, incluindo o valor das opções personalizadas do produto, em um bloco personalizado que eu criei. Este é o código que eu usei na página de detalhes do produto e funcionou lá, mas ao tentar usá-lo na página de bloco personalizado, as opções retornam valor vazio.

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

Eu sou novo no magento, então não tenho certeza do que estou perdendo aqui.
Alguém pode me dar uma dica, por favor
Obrigado

Shivika Sharma
fonte
Veja esta resposta em um tópico relacionado.
quickshiftin

Respostas:

2

Tente o seguinte:

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);
                }
            }

        }
    }
}
Abdul
fonte
11
não trabalhando ... Quando eu imprimir o array $ prodct toda a informação está sendo mostrado, exceto as opções personalizadas enquanto o mesmo código está funcionando bem na página de visualização do produto
Shivika Sharma
2

O problema é que o produto não está totalmente carregado no seu bloco. O load()método garante que todas as informações de um objeto sejam carregadas. Se você usar apenas loadByAttribute()uma coleção, esse não é o caso.

Um exemplo seria:

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

Se você deseja exibir vários produtos, evite usá- load()los, pois isso tem um forte impacto negativo no desempenho. Lamentamos, mas não posso ajudá-lo a adicionar opções a uma coleção.

simonthesorcerer
fonte