2011-05-06 5 views
7

Tengo paquetes de productos con 3 casillas de verificación marcadas como predeterminadas. Deseo agregar un paquete de productos de la lista de categorías de páginas (list.phtml) sin tener que especificar las opciones. ¿Cómo puedo hacer esto?Agregar paquete de productos al carrito sin tener que especificar las opciones

+0

¿Has tenido algo de suerte con esto? Realmente necesito poder hacer esto y, por lo que puedo ver, este es un error de Magento. –

Respuesta

13

Mi proyecto necesitaba mostrar solo una línea para un producto agrupado, las opciones ocultas estaban seleccionadas y compradas por defecto al comprar el paquete. El producto puede ser comprado desde la vista de categoría.

paquete de configuración: Los valores

  • paquete con precio dinámico
  • opciones están configurados para ser requerido, los valores predeterminados y los botones de opción por defecto que aparecen

Fui a mi nueva plantilla categoría de vista y ha agregado lo siguiente:

<form action="<?php echo Mage::$this->helper('checkout/cart')->getAddUrl($product); ?>" method="post" id="product_addtocart_form_<?php echo $product->getId()?>"> 
<?php 

// If we have a bundle: 
if ($_product->getTypeId() == 'bundle'){ 

    $selectionCollection = $_product->getTypeInstance(true)->getSelectionsCollection(
      $_product->getTypeInstance(true)->getOptionsIds($_product), $_product 
     ); 

    foreach($selectionCollection as $option) { 

     echo '<input type="hidden" name="bundle_option[' . $option->option_id . ']" value="' . $option->selection_id . '" />'; 
     echo '<input type="hidden" name="bundle_option_qty[' . $option->option_id . ']" value="1" />'; 

    }//end: foreach $selectionCollection 

} // end: if $_product == bundle 
?> 
<input type="text" name="qty" class="qty" maxlength="4" value="1" /> 
<button type="button" onclick="this.form.submit()" /> 
</form> 

La creatividad anterior es un add-to-cart-form, recupera los subproductos del paquete si tenemos un paquete y predetermina todas las opciones. ¡Funciona como un encanto!

+0

Este fue publicado hace un tiempo pero quería hacerle saber que fue muy útil gracias. –

+0

De acuerdo! ¡Gracias! –

+0

Esto no funciona para mí. Magento 1.7.0.0. Cuando compro un producto incluido de esta manera, el botón solo asocia una opción de cuatro disponible. Parece estar funcionando, pero si observa el orden y el stock de las opciones, solo una ha cambiado. –

4

Ok, finalmente lo tengo funcionando como creo que debería.

Wgenie me puso en la dirección correcta.

Puedo usar este código en lugar de Wgenie de y no sólo añade el artículo al carro, pero controla el balance de las opciones de bloque, y no muestra disponible si una opción está fuera de stock:

<?php if ($_item->getTypeId() == 'bundle') : ?> 
<form action="<?php echo Mage::helper('checkout/cart')->getAddUrl($_item); ?>" method="post" id="product_addtocart_form_<?php echo $_item->getId()?>"> 
    <?php $selectionCollection = $_item->getTypeInstance(true)->getSelectionsCollection(
      $_item->getTypeInstance(true)->getOptionsIds($_item), $_item 
     ); ?> 

    <?php $saleable = true; ?> 
    <?php foreach($selectionCollection as $option) : ?> 
     <input type="hidden" name="bundle_option[<?php echo $option->option_id; ?>][]" value="<?php echo $option->selection_id; ?>" /> 
     <input type="hidden" name="bundle_option_qty[<?php echo $option->option_id; ?>][]" value="1" /> 
     <?php 
      //Stock control for each bundle option 
      $opt_product = Mage::getModel('catalog/product')->load($option->product_id); 
      $stocklevel = (int)Mage::getModel('cataloginventory/stock_item') 
          ->loadByProduct($opt_product)->getQty(); 
      if($stocklevel<=0) 
       $saleable = false;       
     ?> 
    <?php endforeach; ?> 

    <?php if($saleable): ?> 
     <button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button" onclick="this.form.submit()"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button>  
    <?php else: ?> 
     <p class="availability out-of-stock"><span><?php echo $this->__('Out of stock') ?></span></p> 
    <?php endif; ?> 
</form><?php else : ?> 
<button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button" onclick="setLocation('<?php echo $this->getAddToCartUrl($_item) ?>')"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button><?php endif; ?> 
+0

Btw, Magento 1.7.0.0 –

+0

Sí, esta solución es mejor. –

1

que tenía hacer algo similar en el sitio web de Magento 1.7. Pude agregar productos empaquetados al carro desde las listas de productos sin redireccionar a la página del producto.

/app/design/frontend/your_package/your_theme/template/catalog/product/list.phtml

Reemplazar ocurrencias de

<button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button> 

con

<?php 
 
$productAddUrl = $this->helper('checkout/cart')->getAddUrl($_product); 
 
if ($_product->getTypeId() == 'bundle'): 
 
    $bundleOptions = '?'; 
 
    $selectionCollection = $_product->getTypeInstance(true)->getSelectionsCollection($_product->getTypeInstance(true)->getOptionsIds($_product), $_product); 
 

 
    foreach($selectionCollection as $option): 
 
    $bundleOptions .= '&bundle_option[' . $option->option_id . ']=' . $option->selection_id; 
 
    $bundleOptions .= '&bundle_option_qty[' . $option->option_id . ']=1'; 
 
    endforeach; 
 

 
    $productAddUrl .= $bundleOptions; 
 
endif; 
 
?> 
 

 
<button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart" onclick="setLocation('<?php echo $productAddUrl ?>')"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button>

0

La solución de Joras funciona, pero puede crear e múltiples elementos en la cotización, cada uno con el mismo paquete (con selecciones idénticas). El motivo es que al comparar un paquete recién agregado con los elementos de cita, Magento (probado en 1.9.2.2) crea una cadena bundel_identity compuesta de

[id_producto] _ [opción_id_1] _ [opción_qty _] _ [opción_id_2] _ [option_qty_2] ...

La cadena depende del orden de los parámetros enviados. Para seguir el orden especificado en la configuración del producto use:

$typeInstance = $product->getTypeInstance(true) 
        ->setStoreFilter($product->getStoreId(), $product); 

       $optionCollection = $typeInstance->getOptionsCollection($product); 
foreach ($optionCollection as $option) { 
// build your query string here.... 

} 

También es bastante hacky hacer eso dentro de la plantilla.Mejor opción imo

override Mage_Catalog_Block_Product_List::getAddToCartUrl($product, $additional = array()) 
Cuestiones relacionadas