Создание упакованного продукта в magento


Как мы можем создать пакетный продукт в magento. Например. Продукт имеет вес 1 г и базовую цену = 10$ Но когда тот же продукт приобретается в меньшем количестве, скажем, 1 г*10 мешочек, его цена не 10*10 = 100, а будет 90. Аналогично, если у меня будет новая упаковка под тем же продуктом, скажем, 2g*10, ее цена будет 150, а не 200. Надеюсь, мой вопрос понятен. Пожалуйста, прокомментируйте, если что-то неясно.

Подумайте в некотором смысле, что мне нужен продукт что-то связанное с фармацевтикой. И у меня есть мешочки с таблетками разного веса. И пользователь может добавить оба пакета, которые связаны с одним и тем же продуктом. Пожалуйста, помогите мне в этом состоянии Спасибо

Author: Ami Kamboj, 2014-06-05

2 answers

Действительно хорошая ссылка, но всегда лучше поделиться кодом:

$productA = Mage::getModel('catalog/product')->load(Mage::app()->getRequest()->getParam('a_id'));

 $productB = Mage::getModel('catalog/product')->load(Mage::app()->getRequest()->getParam('b_id')); 
 $productA_price = ($productA->getPackageprice() > 0 ? $productA->getPackagePrice() : $productA->getFinalPrice());
 $productB_price = ($productB->getPackageprice() > 0 ? $productB->getPackagePrice() : $productB->getFinalPrice());

2) Проверьте, существует ли уже упакованный продукт, если не создайте его!

Теперь загрузите упакованный продукт на основе артикула, который, как я знаю, я собираюсь создать, если его не существует, я создам продукт и сохраню.

Mage::getModel('catalog/product')->loadByAttribute('sku',$productA->getSku().'__'.$productB->getSku());

 if (!$package_product) { 4
 $package_product = Mage::getModel('catalog/product');
 $package_product
 ->setTypeId(Mage_Catalog_Model_Product_Type::TYPE_SIMPLE)
 ->setWebsiteIds(array(1, 2))
 ->setWeight(1)
 ->setStoreId(Mage::app()->getStore()->getId())
 ->setStatus(Mage_Catalog_Model_Product_Status::STATUS_ENABLED)
 ->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE)
 ->setTaxClassId(2)
 ->setAttributeSetId(15)
 ->setSku($productA->getSku().'__'.$productB->getSku())
 ->setName("PACKAGE DEAL: ".$productA->getName().' & '.$productB->getName())
 ->setPrice($productA_price + $productB_price)
 ->save();

3) Установите данные о запасах для упакованного продукта

    $stockItem = Mage::getModel('cataloginventory/stock_item');
$stockItem->assignProduct($package_product);
$stockItem->setData('is_in_stock', 1);
$stockItem->setData('stock_id', 1);
$stockItem->setData('store_id', 1);
$stockItem->setData('manage_stock', 0);
$stockItem->setData('use_config_manage_stock', 0);
$stockItem->setData('min_sale_qty', 0);
$stockItem->setData('use_config_min_sale_qty', 1);
$stockItem->setData('max_sale_qty', 1000);
$stockItem->setData('use_config_max_sale_qty', 1);
$stockItem->save();

4) Если пакет действительно существует, обновите цену

} else {

$package_product->setStoreId(Mage::app()->getStore()->getId());
$package_product->setPrice($productA_price + $productB_price)->save();

5) Добавить упакованный продукт в тележка

    $cart = Mage::getModel('checkout/cart')->init();
$cart->addProduct($package_product, array('qty' => 1));
$cart->save();
    Mage::getSingleton('checkout/session')->setCartWasUpdated(true);
$this->_redirect('checkout/cart');

6) Уменьшите запас отдельных продуктов

 class Creare_Productpackages_Model_Observer
{
public function packageDecreaseStock($observer) {

$order = $observer['order'];

$items = $order->getAllVisibleItems();
foreach ($items as $itemid => $item){

$product = Mage::getModel('catalog/product')->load($item->getProductId());
if ($product->getAttributeSetId() == 15)
{
$qty = $item->getQtyToInvoice();
$skus = explode('__', $product->getSku());

foreach ($skus as $sku)
{
$_product = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);
$stocklevel = (int)Mage::getModel('cataloginventory/stock_item')->loadByProduct($_product)->getQty();
$newlevel = $stocklevel-($qty);
if ($newlevel > 0) { $instock = 1; } else { $instock = 0; }
$stockItem = Mage::getModel('cataloginventory/stock_item')->assignProduct($_product);
$stockItem->setData('is_in_stock', $instock);
$stockItem->setData('qty', $newlevel);
$stockItem->save();

}
}
}
}
}
 1
Author: TBI Infotech, 2014-06-21 10:10:38

В соответствии с вашим запросом, пожалуйста, перейдите по ссылке:

http://www.blog.plazathemes.com/archives/1839
 2
Author: Rock, 2014-06-21 08:20:32