Magento: добавьте товар дважды в корзину, с разными атрибутами! - PullRequest
4 голосов
/ 17 июня 2010

Я работал с этим целый день, но не могу найти решение:

У меня есть продукт (линзы), который имеет идентичные атрибуты, но пользователь может выбрать один набор атрибутов для одного глаза и другой набор атрибутов для другого.

На фронтенде у меня все нормально, посмотри здесь .

Таким образом, пользователь может выбрать атрибуты для левого или правого глаза, но это один и тот же продукт.

Я строю функцию, которая должна брать товар в корзину (перед сохранением), добавлять другой набор атрибутов, поэтому в корзине должно быть два товара. Что происходит, если есть два продукта, но с одинаковым набором атрибутов ???

Вот фрагмент функции:

$req = Mage::app()->getRequest(); 
$request[’qty’] = 1; 
$request[’product’] = 15; 
$request[’uenc’] = $req->get(’uenc’); 
$request[’options’][1] = 1; 
$request[’options’][3] = 5; 
$request[’options’][2] = 3; 
$reqo = new Varien_Object($request); 
$newitem = $quote->addProduct($founditem->getProduct(), $reqo); 

//add another one ------------------------------------------ 

$request[’qty’] = 1; 
$request[’product’] = 15; 
$request[’uenc’] = $req->get(’uenc’); 
$request[’options’][1] = 2; 
$request[’options’][3] = 6; 
$request[’options’][2] = 4; 
$reqo = new Varien_Object($request); 
$newitem = $quote->addProduct($founditem->getProduct(), $reqo);

Или другой тест с некоторыми другими функциями (опять же, добавлен продукт, с 2 количеством, но с такими же атрибутами ...):

$req = Mage::app()->getRequest(); 
$request[’qty’] = 1; 
$request[’product’] = 15; 
$request[’uenc’] = $req->get(’uenc’); 
$request[’options’][1] = 2; 
$request[’options’][3] = 6; 
$request[’options’][2] = 4;

$product = $founditem->getProduct();

$cart = Mage::getSingleton(’checkout/cart’); 
//delete all first… 
$cart->getItems()->clear()->save(); 
$reqo = new Varien_Object($request);

$cart->addProduct($founditem->getProduct(), $reqo); 
$cart->getItems()->save();

$request[’options’][1] = 1; 
$request[’options’][3] = 5; 
$request[’options’][2] = 3;

$reqo = new Varien_Object($request);

$cart->addProduct($founditem->getProduct(), $reqo); 
$cart->getItems()->save();

Я действительно не знаю, что еще делать, пожалуйста, любой совет, это мой первый модуль в Magento…

Спасибо, Питер

Ответы [ 3 ]

3 голосов
/ 03 января 2012

перейти в класс Mage_Sales_Model_Quote и найдите метод getItemByProduct($product) и сделайте его return false; все время. Будьте осторожны, это может помешать minimum & maximum, разрешенному в корзине для продуктов.

1 голос
/ 13 апреля 2012

Я думаю, что ваша основная проблема заключается в том, как вы настраиваете продукты. Атрибут должен быть примерно таким: прочность линзы для правого глаза, сила линзы для левого глаза, толщина линзы для правого глаза, толщина линзы для левого глаза.один набор атрибутов может содержать различные значения, которые вам нужны

, если вы хотите использовать отдельные наборы атрибутов, вы можете использовать комплектные продукты, т.е. все товары поставляются в виде комплекта, и вам необходимо добавить линзы к покупке, линзы - это отдельныйпродукт с различными наборами атрибутов и ценами (которые могут быть установлены на ноль)

возможно, ни один из них не является идеальным решением, но с некоторыми CSS и шаблонами он должен выглядеть достаточно профессионально

0 голосов
/ 16 июня 2013

Вы можете создать наблюдателя

<catalog_product_load_after>
          <observers>
                  <subscription>
                      <type>singleton</type>
                     <class>Itdelight_Subscription_Model_Observer</class>
                     <method>catalogProductLoadAfter</method>
                 </subscription>
        </observers>
</catalog_product_load_after>

А затем добавьте свой уникальный атрибут в продукт.

public function catalogProductLoadAfter(Varien_Event_Observer $observer){
     $action = Mage::app()->getFrontController()->getAction();
    if ($action->getFullActionName() == 'checkout_cart_add')
    {
       if ($options = $action->getRequest()->getParam('spy'))
        {
            $product = $observer->getProduct();
            $product->addCustomOption('product_attribute','subscription');
            $a=$product->getCustomOption('product_attribute');


}
...