Создание упакованного продукта в magento
Как мы можем создать пакетный продукт в magento. Например. Продукт имеет вес 1 г и базовую цену = 10$ Но когда тот же продукт приобретается в меньшем количестве, скажем, 1 г*10 мешочек, его цена не 10*10 = 100, а будет 90. Аналогично, если у меня будет новая упаковка под тем же продуктом, скажем, 2g*10, ее цена будет 150, а не 200. Надеюсь, мой вопрос понятен. Пожалуйста, прокомментируйте, если что-то неясно.
Подумайте в некотором смысле, что мне нужен продукт что-то связанное с фармацевтикой. И у меня есть мешочки с таблетками разного веса. И пользователь может добавить оба пакета, которые связаны с одним и тем же продуктом. Пожалуйста, помогите мне в этом состоянии Спасибо
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();
}
}
}
}
}
В соответствии с вашим запросом, пожалуйста, перейдите по ссылке:
http://www.blog.plazathemes.com/archives/1839