$ product-> getOptions () devuelve un resultado vacío

9

Estoy tratando de obtener detalles del producto, incluido el valor de las opciones personalizadas del producto en un bloque personalizado que creé. Este es el código que utilicé en la página de detalles del producto y funcionó allí, pero cuando trato de usarlo en la página de bloque personalizado, obtener Opciones devuelve un valor vacío.

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

Soy nuevo en magento, así que no estoy seguro de lo que me estoy perdiendo aquí.
¿Alguien puede darme una pista por favor
Gracias

Shivika Sharma
fuente
Ver esta respuesta de un hilo relacionado.
quickshiftin

Respuestas:

2

Prueba esto:

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
fuente
1
no funciona ... Cuando imprimo el array $ prodct, se muestra toda la información, excepto las opciones personalizadas, mientras que el mismo código funciona bien en la página de vista del producto
Shivika Sharma
2

El problema es que el producto no está completamente cargado en su bloque. El load()método asegura que se cargue toda la información de un objeto. Si solo usa loadByAttribute()o una colección, este no es el caso.

Un ejemplo sería:

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

Si desea mostrar varios productos, debe evitar el uso, load()ya que tiene un fuerte impacto negativo en el rendimiento. Lamento no poder ayudarlo a agregar opciones a una colección.

simonthesorcerer
fuente