2010-05-13 8 views
13

Tengo un par de productos al finalizar la compra que necesito para poder obtener todas las opciones personalizadas que se seleccionan para ellos mediante el código.Cómo obtener opciones personalizadas mediante programación en Magento

¡Cualquier ayuda es muy apreciada!

+0

Hay muchas maneras (integrados, módulos, etc.) para obtener una costumbre opción adjunta a un producto en Magento. Si le informa a la comunidad cómo agrega las opciones, tendrá más posibilidades de obtener una respuesta. –

+0

Simplemente tiene un productid en php y puede obtener las opciones personalizadas que se adjuntan a ese producto. – DaveC

+0

Es el término "opciones personalizadas" que causa confusión. ¿Cómo se agregaron las opciones personalizadas al producto? ¿A través de Magento? A través de una extensión comercial? A través de una extensión personalizada? –

Respuesta

21

Le daré un ejemplo de un producto. Digamos que conoces el Sku (por ejemplo, deja que sea "ABCDE") de tu producto requerido. Entonces podrá obtener la identificación de ese producto.

El código será algo así como: -

$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>'; 
} 

Creo que esto le permitirá empezar.

Dependiendo del tipo de la opción en la variable "$optionType", debe llamar a otro bucle anidado "foreach". He trabajado en cuadros de texto, campos de texto, menús desplegables, pero no en otros tipos. Entonces supongo que necesitas hacer más RnD por ti mismo.

+0

Tengo un problema al consultar opciones personalizadas también. Para un producto con tamaños variables (Grande, Mediano, Pequeño), quiero mostrar las opciones al usuario. Publiqué una pregunta relacionada aquí: http://stackoverflow.com/questions/5033427/magento-query-for-product-options – John

+0

¡Gracias! Funciona para mí :) Sin embargo, utilicé esto en un archivo phtml e incluso teniendo el producto cargado, no hubo opciones hasta que lo cargué de nuevo. Raro, pero funciona! – s3v3n

+0

@Knowledge Craving, cuando intento hacer esto, me sale un error, ¿me pueden ayudar, por favor? este es el error: 'Error fatal: llamada a una función miembro tieneOpciones() en un no objeto' ¡Muchas gracias! – Abude

7

Para aquellos que quieren ver las opciones de personalización seleccionadas posteriormente en administrador panel de de pedido/factura/envío/Nota de crédito, encontrar archivos: /app/design/adminhtml/[por defecto]/default/template/Ventas/orden/vista/elementos/renderer/default.phtml
/app/design/adminhtml/[default]/default/template/sales/order/invoice/view/items/renderer/default.phtml /app/design/adminhtml /[default]/default/template/sales/order/shipment/view/items/renderer/default.phtml /app/design/adminhtml/[default]/default/template/sales/order/creditmemo/view/items/renderer/default.phtml PD: no he cambiado los archivos configurated.phtml para factura/envío/Nota de crédito

e insertar código en algún lugar después de <?php echo $_item->getSku(); ?></div> y antes de etiqueta de cierre </td> que la de la fila (tenga cuidado, que es diferente para cada archivo)

código

Insertar:

 <?php 
    //---------start:---------------   
    // if ($allOptions = $_item->_getData('product_options')) {    // only for order item 
    if ($allOptions = $_item->getOrderItem()->getData('product_options')) { // for invoice, shipping, creditmemo 
     $options = unserialize($allOptions); 

     if (isset($options['options'])) { 
      foreach ($options['options'] as $optionValues) { 
       if ($optionValues['value']) { 
        echo '&nbsp;<strong><i>'. $optionValues['label'].'</i></strong>: '; 

        $_printValue = isset($optionValues['print_value']) ? $optionValues['print_value'] : strip_tags($optionValues['value']); 
        $values = explode(', ', $_printValue); 
        foreach ($values as $value) { 
         if (is_array($value)) 
          foreach ($value as $_value) 
           echo $_value; 
         else echo $value; 
        } 
        echo '<br />'; 
       } 
      }  
     } 
    } 
    //---------end:---------------     
    ?>   

También tenga en cuenta que en el código no es una línea (si la oración) que solo funciona en el archivo predeterminado default.phtml, y la segunda si la oración funciona en los archivos de factura/envío/crédito. Depende de dónde publiques el código, asegúrate de que la oración correcta esté comentada.

esperanza que esta ayuda, gracias también al conocimiento Ansia cuyo código me ayudó un poco :-) jazkat

7

Tenga en cuenta que la solución

$product->hasCustomOptions() 

en "Ansia Conocimiento" 's hace siempre devuelve falso (al menos en mi caso, Magento 1.6.2). Por lo tanto, la condición if nunca se cumple y el bloque siguiente no se ejecuta.

+1

Muchas gracias por su respuesta. Sí, tengo que admitir que de Magento v1.5.x no funcionó, pero olvidé actualizar esta respuesta. Así que ¡gracias de nuevo por mostrarme el camino correcto! –

+0

@KnowledgeCraving parece que olvidó actualizarlo una vez más: D Aún no veo ninguna mención de esto en su respuesta ... – OZZIE

2
$quote=$observer->getEvent()->getQuote(); 
    $quoteid=$quote->getId(); 
    $session= Mage::getSingleton('checkout/session'); 
    $getotal = Mage::helper('checkout')->getQuote()->getGrandTotal(); 

    foreach($session->getQuote()->getAllItems() as $item) 
     { 

     $sellcheck = Mage::getModel('catalog/product')->load($item->getProduct()->getId())->getissellbool(); 
     $options = Mage::getModel('catalog/product')->load($item->getProduct()->getId())->getProductOptionsCollection(); 
     foreach ($options as $o) 
      { 
       $title = $o->getTitle(); 
       $values = $o->getValues(); 
       foreach($values as $v) 
        { 
        $mydata = $v->getPrice(); 
        echo 'options price: ' . $mydata;      
         } 

       } 

      } 

Para acceder a las opciones personalizadas del producto en el carro de la compra, puede utilizar este código.

+1

Solo una nota: está cargando el producto dos veces –

1

espero que así sea útil a usted para obtener valores solo desplegables personalizado en la página del producto

Simplemente pegue el siguiente código en este archivo al fin

app/design/frontend/base/default/template/catalog/product/view/options.phtml

<?php 
    $product = Mage::getModel("catalog/product")->load($this->getProduct()->getId()); //product id 
    foreach ($product->getOptions() as $_option) { 
     $values = $_option->getValues(); 
     foreach ($values as $v) { 
      print_r($v->getTitle()); 
      echo "<br />"; 
     } 
    } 
?> 
+0

Lo siento, ahora tengo una solución para esto – Naresh

1

Podemos resolverlo también, que se puede mostrar en la página de pago.

$items = Mage::getModel('checkout/cart')->getQuote()->getAllVisibleItems(); 
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

Puede probar este código en la plantilla/Pedido/compra/artículo/default.php:

if($Product->hasOptions) 
      { 
       $optionsArr = $Product->getOptions(); 
       foreach ($optionsArr as $optionKey => $optionVal) 
       { 
          $optStr.= "<select style='display:block; clear:both;' name='options[".$optionVal->getId()."]'>";  
        foreach($optionVal->getValues() as $valuesKey => $valuesVal) 
        { 
          $optStr.= "<option value='".$valuesVal->getId()."'>".$valuesVal->getTitle()."</option>"; 
        } 
        $optStr.= "</select>"; 
        } 
    echo($optStr); 
      } 
Cuestiones relacionadas