gpt4 book ai didi

php - 在 Magento 中向购物车项目添加属性,在购物车中单独显示

转载 作者:行者123 更新时间:2023-12-03 07:04:19 24 4
gpt4 key购买 nike

针对我遇到的问题,我找到了很多答案,但有些是相互矛盾的,而且很多我并不完全清楚,所以我希望 Magento 专家能够为我指明正确的方向。

对于 Magento 中的某些产品,有一个复杂的定制过程。有一个自定义编辑器,每个“设计”都由唯一的值标识。我需要的是将这个 ID 与购物车中的产品和订单一起存储。它不应该直接显示,但可以在代码中访问(例如,在购物车中显示不同的缩略图或发票上的某些信息)。

此外,由于产品是定制的,因此如果此 ID 不同,同一产品应该在购物车和发票中具有单独的行!

例如,客户打开产品页面,进行一些定制,并且此定制获得 ID“1”。客户将其放入购物车。他再次打开同一个产品,对其进行不同的定制,并获得 ID“2”。客户也把这个放入购物车了!

购物车现在应该是:

  • ProductX [使用 ID 1 的代码生成的自定义文本] 1 件 x€
  • ProductX [使用 ID 2 的代码生成的自定义文本] 1 件 x€

而不是:

  • 产品X 2 件 x€

但是客户仍然应该能够使用相同的 ID 订购多个相同的产品!所以例如

  • ProductX [使用 ID 1 的代码生成的自定义文本] 4 件 x€
  • ProductX [使用 ID 2 的代码生成的自定义文本] 2 件 x€

定制发生在 magento 之外。 Magento 只是有一个带有弹出窗口的链接,然后获取一些 ID,然后可以使用 PHP 附加该 ID。它只存储 ID,并且必须能够获取购物车/发票/...中的每个产品的 ID。

重要的是,ID 会被存储,并且如果 ID 不同,具有相同 sku/可自定义选项的产品不会合并到购物车中!此外,ID 必须是文本字符串,而不是像 magento 可自定义选项那样从列表中选择!

我发现可以实现我想要的方法:

  1. http://www.atwix.com/magento/custom-product-attribute-quote-order-item/这看起来对我来说是最好的,有一个我可以修改的完成模块。但我不确定这是否是正确的方法。购物车中的产品会被分开吗?此外,ID 的值在此处设置为“产品”选项并在后端可见?!就我而言,在客户定制产品之前没有任何值(value)!

  2. https://magento.stackexchange.com/a/1382我不太确定...如何获取 ID,该 ID 可在观察者内的产品详细信息页面上找到...

  3. How can I add every product as a new item into cart也许除了 1. 或 2. 之外我还需要修改它?

如果 Magento 专家能为我阐明这一点,我将不胜感激!

最佳答案

您说过您可以负责将 ID 添加到产品页面。这太棒了。需要时,您需要将值写入产品页面上“添加到购物车”表单中的隐藏输入字段。假设输入如下所示;

<input type="hidden" name="myid" id="myid" value="123" />

在您的自定义模块中,添加事件观察器。我假设您在添加到购物车时仍停留在产品页面上,而不是直接进入购物车。

<catalog_product_load_after>
<observers>
<Company_Module_Model_Observer>
<type>model</type>
<class>Company_Module_Model_Observer</class>
<method>addPostData</method>
</Company_Module_Model_Observer>
</observers>
</catalog_product_load_after>

在模块文件夹中,创建或打开 Company/Module/Model/Observer.php 并创建此函数;

class Company_Module_Model_Observer {


public function addPostData(Varien_Event_Observer $observer) {

$action = Mage::app()->getFrontController()->getAction();
if ($action->getFullActionName() == 'checkout_cart_add') {
if($action->getRequest()->getParam('myid')) {
// ID IS PRESENT, SO LETS ADD IT
$item = $observer->getProduct();
$additionalOptions = array();
$additionalOptions[] = array(
'label' => 'The unique ID',
'value' => $action->getRequest()->getParam('myid')
);
$item->addCustomOption('additional_options', serialize($additionalOptions));
}
}

}


}

完成此操作后,您将在购物车和报价上看到针对产品的 ID,就像该值来自 super 属性一样。任何唯一 ID 都将被视为新订单项。

要根据销售订单保存此值,以便其显示在销售电子邮件和后端中,请添加此观察者;

<sales_convert_quote_item_to_order_item>
<observers>
<Company_Module_Model_Observer>
<type>model</type>
<class>Company_Module_Model_Observer</class>
<method>salesConvertQuoteItemToOrderItem</method>
</Company_Module_Model_Observer>
</observers>
</sales_convert_quote_item_to_order_item>

并将此函数添加到 Company/Module/Model/Observer.php

public function salesConvertQuoteItemToOrderItem(Varien_Event_Observer $observer)
{


$quoteItem = $observer->getItem();
if ($additionalOptions = $quoteItem->getOptionByCode('additional_options')) {
$orderItem = $observer->getOrderItem();
$options = $orderItem->getProductOptions();
$options['additional_options'] = unserialize($additionalOptions->getValue());
$orderItem->setProductOptions($options);
}

}

关于php - 在 Magento 中向购物车项目添加属性,在购物车中单独显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27531980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com