php – 扩展Magento购物车
我需要扩展Magento购物车,为商店定位器添加一个额外的步骤.我知道我需要覆盖核心OnePage控制器(Mage_Checkout_OnepageController)和块(Mage_Checkout_Block_Onepage),但是需要做些什么才能跟踪额外信息(例如用户从我的自定义步骤中选择的选项).
此处需要执行许多步骤才能获得整个解决方案.
首先,创建一个新模块.如果您愿意,请使用ModuleCreator. 然后,在模块中写一个setup script,将新字段添加到Magento的属性结构中,例如: $setup = new Mage_Sales_Model_Mysql4_Setup('core_setup'); $setup->startSetup(); $setup->addAttribute('quote','my_attribute',array('type' => 'varchar','visible' => false,'required' => false)); $setup->addAttribute('order','required' => false)); $setup->addAttribute('invoice','required' => false)); $setup->addAttribute('creditmemo','required' => false)); 请注意使用Mage_Sales_Model_Mysql4_Setup将字段添加到相关的sales_flat_quote和sales_flat_order表. 现在,在模块的config.xml文件中插入以下值: <global> <fieldsets> <sales_convert_quote> <my_attribute> <to_order>*</to_order> </my_attribute> </sales_convert_quote> <sales_convert_order> <my_attribute> <to_cm>*</to_cm> <to_invoice>*</to_invoice> </my_attribute> </sales_convert_order> </fieldsets> 这将指示Magento将自定义字段的值从报价复制到订单到发票和credit_memo等. 然后在您的自定义块/控制器代码中,您将能够使用Magento的魔法getter和setter来保持值. $oQuote = Mage::getSingleton('checkout/session')->getQuote(); $oQuote->setMyAttribute('some_value'); $oQuote->save(); 您应该看到sales_flat_quote中保存的新列和值.然后,一旦客户完成结账,则应在sales_flat_order中保存相同的值. 请注意,上述代码可以扩展为仅对quote_item和order_item起作用,只需将quote更改为quote_item等,但是,如果您希望保存已在产品上设置的属性值,则需要进行一些额外的工作. 将新的XML块插入config.xml(再次在全局节点内): <sales> <quote> <item> <product_attributes> <my_attribute /> </product_attributes> </item> </quote> </sales> 其中my_attribute是产品型号上的属性代码.这将使链接产品上的my_attribute可用,因此您可以通过它访问它 $oQuoteItem->getProduct()->getMyAttribute() 无需执行完整的Mage :: getModel(‘catalog / product’) – > load($oQuoteItem-> getProductId()).这样效率更高. 然后,您将需要一个观察者将产品对象中的值复制到quote_item对象.所以,在config.xml中声明你的观察者: <events> <sales_quote_item_set_product> <observers> <quoteitem_set_custom_data> <type>singleton</type> <class>mymodule/observer</class> <method>setCustomDataOnQuoteItem</method> </quoteitem_set_custom_data> </observers> </sales_quote_item_set_product> <events> 并在您的观察者类中编写代码,如下所示: public function setCustomDataOnQuoteItem($oObserver){ $oProduct = $oObserver->getProduct(); $oQuoteItem = $oObserver->getQuoteItem(); foreach(array('my_attribute') as $vAttributeCode){ $oQuoteItem->setData($vAttributeCode,$oProduct->getData($vAttributeCode)); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |