2011-05-06 12 views

Odpowiedz

13

Mój projekt musiał pokazywać tylko jedną linię dla produktu pakowanego, domyślnie wybrane opcje ukryte i zakupione przy zakupie pakietu. Produkt można kupić z widoku kategorii.

Bundle config:

  • Bundle z dynamicznym cenie
  • opcje są skonfigurowane tak, aby być wymagane, wartości domyślne i przyciski radiowe domyślnie wybrane wartości

poszedłem do mojego widoku niestandardowego kategoria szablonu i dodano:

<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> 

Powyższa kreacja es formularz dodawania do koszyka, pobiera podprodukty pakietów, jeśli mamy pakiet i domyślnie wszystkie opcje. Działa jak urok!

+0

Ten został opublikowany jakiś czas temu, ale chciałem dać ci znać, że to było bardzo przydatne dzięki! –

+0

Zgoda! Dzięki! –

+0

To nie działa dla mnie. Magento 1.7.0.0. Kiedy kupuję produkt w pakiecie w ten sposób przycisk kojarzy tylko jedną z czterech dostępnych opcji. Wydaje się działać, ale jeśli spojrzysz na kolejność i zapasy opcji, tylko jedna się zmieniła. –

4

OK, w końcu udało mi się pracować tak, jak powinienem.

Wgenie postawiła mnie w dobrym kierunku.

używam tego kodu zamiast Wgenie i to nie tylko dodaje element do koszyka ale kontroluje akcji z opcji wiązki i pokazuje Niedostępne jeśli jedna opcja na stanie:

<?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

Tak, to rozwiązanie jest lepsze. –

1

miałem zrobić coś podobnego na stronie Magento 1.7. Udało mi się dodać pakiet produktów do koszyka z list produktów bez przekierowania na stronę produktu.

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

Wymienić wystąpień

<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> 

z

<?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

Rozwiązanie Joras działa, ale może tworzyć e wiele pozycji w ofercie, z których każda zawiera ten sam pakiet (z identycznymi wyborami). Powodem jest to, że podczas porównywania nowo dodanego pakietu z elementami cudzysłowu, Magento (testowane w wersji 1.9.2.2) tworzy łańcuch oznaczeń bundel_identity złożony z

[product_id] _ [option_id_1] _ [option_qty _] _ [option_id_2] _ [option_qty_2] ...

Ten ciąg znaków zależy od kolejności przesłanych parametrów. Aby postępować zgodnie z zamówieniem określonym w ustawieniach produktu, należy użyć:

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

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

} 

Również jest to dość hakowate w tym szablonie.Lepsza opcja imo

override Mage_Catalog_Block_Product_List::getAddToCartUrl($product, $additional = array()) 
Powiązane problemy