【问题标题】:Magento: add product twice to cart, with different attributes!Magento:将产品两次添加到购物车,具有不同的属性!
【发布时间】:2010-06-17 16:11:05
【问题描述】:

我已经为此工作了一整天,但我找不到任何解决方案:

我有一个产品(镜片),它具有相同的属性,但用户可以为一只眼睛选择一个属性集,为另一只眼睛选择另一个属性集。

在前端我没问题,看到它here

所以用户可以选择左眼或右眼的属性,但它是同一个产品。

我构建了一个函数,它应该在购物车中获取一个产品(保存之前),添加其他属性集,因此购物车中应该有两个产品。如果有两种产品,但具有相同的一组属性,会发生什么情况???

这里是函数的sn-p:

$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 中的第一个模块......

谢谢你,彼得

【问题讨论】:

  • 请编辑您的代码并使用“代码示例”功能格式化代码。
  • 属性集在 Magento 中具有非常特殊的含义。你的意思是他们可以为产品选择一个选项?
  • 是的,他们可以为产品选择选项。对于每只眼睛相同的选项。你可以在这里看到它:connecta.si/clarus/index.php/featured/…

标签: attributes magento cart


【解决方案1】:

去上课Mage_Sales_Model_Quote 并一直搜索方法getItemByProduct($product) 并使其成为return false;。 请注意,这可能会干扰产品购物车中允许的minimummaximum

【讨论】:

    【解决方案2】:

    我认为您的主要问题是您如何设置产品属性应该是右眼镜片强度,左眼镜片强度,右眼镜片厚度,左眼镜片厚度。一个属性集可以包含您需要的不同值

    如果您想使用单独的属性集,您可以使用捆绑产品,即所有产品都是捆绑的,您需要在购买时添加镜片,镜片是具有不同属性集和定价的单独产品(可以设置为无)

    也许这些都不是一个完美的解决方案,但通过一些 css 和模板应该能够看起来足够专业

    【讨论】:

      【解决方案3】:

      你可以创建一个观察者

      <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');
      
      
      }
      

      【讨论】:

        猜你喜欢
        • 2012-01-06
        • 2020-01-03
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-18
        相关资源
        最近更新 更多