我一直在互联网上阅读很多的教程,但即使是Magento网站上的教程也是1.5版本或少,甚至还有一些功能引用不再存在。
我正在做的很简单,我将一个项目发送到Magento之外的用户进行设计的自定义脚本,然后客户可以从那里点击添加到购物车并添加回来到Magento。
我需要的是将设计的图像文件名称作为订单处理中显示的特定于订单项的数据,以及客户和管理的视图订单历史记录。
我有一个挂钩到checkout_cart_product_add_after
的模块,可以获取以下信息:designs
和designId
。如果用户返回编辑设计,则使用designId
,因此重新加载设计,然后当项目被传回时,designs
和designId
内容应为如果不同则更换。
目前,我正在通过网址将产品添加到购物车,因为有关如何实际添加产品的示例在某种程度上有效,但最终无法保存到购物车。我假设Magento代码中STORE_ID
和一些随机故障之间存在差异。
我非常感谢指向更加可靠的信息,而不仅仅是翻阅旧的文档,看看是否有任何有用的东西可以摆脱它,它已经让我这么远,但它不是一个有效的方法来完成任务。
答案 0 :(得分:7)
这种方法有很多事情要考虑,有几种方法可以做到。如果有什么不是很简单。
A)首先,看看是否可以使用现有的产品自定义选项实现这一目标。如果有任何方法可以在不改变大量核心功能的情况下完成,那么它将使您的生活更轻松。
B)就个人而言,我会考虑为您的自定义内容创建一个模型,并考虑该内容与sales/quote_item
和sales/order_item
之间的关系。您需要修改前端以将其带入,并且还需要管理区域来显示信息,并为管理员提供将自定义内容添加到项目的方法。这可能是你可以做到最彻底的方式。
C)或者,您可以在将项添加到引号时向引号添加一组自定义数据。为此,您必须完全劫持添加到购物车的控制器。首先,从现有控制器中获取所有功能。查看Mage_Sales_Model_Quote :: addProduct()函数,你会发现它需要两个参数:
$quote->addProduct($product, $request);
其中$request
的类型为Varien_Object
,格式如下:
$request = new Varien_Object(array(
'qty'=>$qty,
'options'=>$options,
'custom_options'=>$custom_options
));
以及$custom_options
是自定义数据的数组。
这种方式很有用,但却充满了危险。您需要确保复制原始“添加到购物车”控制器的所有功能,包括调度事件和设置所有会话标志。还有其他考虑因素。如果您的数据是特定于行项目,那么我们可以安全地假设您不希望Magento只是增加购物车中订单项的数量,因为特定数据适用于特定订单项。为此,您将覆盖Mage_Sales_Model_Quote
,并复制getItemByProduct()
函数以对该订单项运行一组不同的检查,以确定是否增加数量。
如果你不能做A,B是我的推荐方法。它可能在短期内耗费更多时间,但长期是更好的解决方案。