2011-05-06 40 views
7

Tôi có các sản phẩm nhóm có 3 hộp kiểm được chọn làm mặc định. Tôi muốn thêm một sản phẩm bó từ danh sách danh mục trang (list.phtml) mà không cần phải chỉ định các tùy chọn. Tôi có thể làm cái này như thế nào?Thêm sản phẩm bó vào giỏ hàng mà không cần phải chỉ định các tùy chọn

+0

Bạn có may mắn với điều này không? Tôi thực sự cần để có thể làm điều này và như xa như tôi có thể thấy đây là một lỗi Magento .. –

Trả lời

13

Dự án của tôi chỉ cần hiển thị một dòng cho một sản phẩm gói, các tùy chọn ẩn được chọn mặc định và được mua khi mua gói. Sản phẩm có thể mua được từ chế độ xem danh mục.

Bundle cấu hình: giá trị

  • Bundle với giá cả năng động
  • Tùy chọn được cấu hình để được yêu cầu, giá trị mặc định và nút radio mặc định chọn

tôi đã đi vào mẫu tùy chỉnh loại quan điểm của tôi và đã thêm các mục sau:

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

Tác vụ trên es một biểu mẫu bổ sung, lấy các gói phụ nếu chúng ta có một gói và mặc định tất cả các tùy chọn. Làm việc như một sự quyến rũ!

+0

Điều này đã được đăng một thời gian trở lại nhưng muốn cho bạn biết nó đã rất hữu ích cảm ơn! –

+0

Đồng ý! Cảm ơn! –

+0

Điều này không hiệu quả đối với tôi. Magento 1.7.0.0. Khi tôi mua một sản phẩm đi kèm theo cách này, nút chỉ liên kết một tùy chọn gồm bốn tùy chọn. Dường như làm việc nhưng nếu bạn nhìn vào thứ tự và cổ phiếu của các tùy chọn chỉ có một thay đổi. –

4

Ok, cuối cùng tôi đã làm việc theo cách tôi nghĩ.

Wgenie đưa tôi đi đúng hướng.

tôi sử dụng mã này thay vì Wgenie và nó không chỉ bổ sung thêm các mục vào giỏ hàng nhưng kiểm soát cổ phiếu của các tùy chọn bó và cho thấy không có sẵn nếu một lựa chọn là hết hàng:

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

Có giải pháp này tốt hơn. –

1

tôi đã để làm điều tương tự trong trang web Magento 1.7. Tôi đã có thể thêm sản phẩm đi kèm vào giỏ hàng từ danh sách sản phẩm mà không cần chuyển hướng đến trang sản phẩm.

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

Thay lần xuất hiện của

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

với

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

Giải pháp của Joras hoạt động, nhưng nó có thể tạo e nhiều mục trong báo giá, mỗi mục chứa cùng một gói (với các lựa chọn giống hệt nhau). Lý do là khi so sánh một gói mới được thêm với các mục báo giá, Magento (được thử nghiệm trên 1.9.2.2) tạo một chuỗi bundel_identity được tạo thành từ

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

Chuỗi này phụ thuộc vào thứ tự của các tham số được gửi. Để thực hiện theo thứ tự được chỉ định trong cài đặt sản phẩm, hãy sử dụng:

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

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

} 

Ngoài ra, cũng khá khó để làm điều đó bên trong mẫu.Tùy chọn tốt hơn imo

override Mage_Catalog_Block_Product_List::getAddToCartUrl($product, $additional = array()) 
Các vấn đề liên quan