Magento-使用observer在cart addAction上保存报价单地址
我正在编写一个定制的Magento模块,它在产品页面上提供报价(基于外部API)。在我在产品页面上得到响应后,它会将响应中的一些信息添加到产品视图的表单中 目标是保存地址(以及其他一些东西,但这些东西现在可以在会话中)。地址需要保存到报价中,以便签出(onestepcheckout,免费版本)将自动填充(城市、州、邮政编码、国家、配送方式[其中有3种])中的值,并通过ajax加载报价(它已经在这样做) 我已经使用了一个观察者,观察了购物车事件。我填写地址并保存它。当我到达购物车页面或结帐页面时,数据丢失了约4/5倍,sql表显示quote_地址在没有地址信息的情况下被保存,即使存在显式保存 我使用的观察者方法有:Magento-使用observer在cart addAction上保存报价单地址,magento,magento-1.7,Magento,Magento 1.7,我正在编写一个定制的Magento模块,它在产品页面上提供报价(基于外部API)。在我在产品页面上得到响应后,它会将响应中的一些信息添加到产品视图的表单中 目标是保存地址(以及其他一些东西,但这些东西现在可以在会话中)。地址需要保存到报价中,以便签出(onestepcheckout,免费版本)将自动填充(城市、州、邮政编码、国家、配送方式[其中有3种])中的值,并通过ajax加载报价(它已经在这样做) 我已经使用了一个观察者,观察了购物车事件。我填写地址并保存它。当我到达购物车页面或结帐页面时,
checkout_cart_update_item_complete
checkout_cart_product_add_after
保存的代码是:(我尝试了地址、引号和购物车都不调用save(),结果相同,也不调用setQuote())
我想这很可能不是保存此信息的最佳位置,但我不太确定。我想知道是否有一个好位置可以在不覆盖整个控制器的情况下保存“添加到购物车”操作上的地址
非常感谢,如果我需要在Magento中澄清,请告诉我您可以在任何需要的地方创建自己的活动,但在这种情况下,您可以在事件后使用
结帐\购物车\产品\添加\来更新quore地址详细信息
这是同样的代码
$quote = Mage::getSingleton('checkout/session')->getQuote();
$billingAddress = Mage::getModel('sales/quote_address')
->setStoreId($storeId)
->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_BILLING)
->setCustomerId(('Your_Value_Here'))
->setCustomerAddressIpd(('Your_Value_Here'))
->setCustomer_address_id(('Your_Value_Here'))
->setPrefix(('Your_Value_Here'))
->setFirstname(('Your_Value_Here'))
->setMiddlename(('Your_Value_Here'))
->setLastname(('Your_Value_Here'))
->setSuffix(('Your_Value_Here'))
->setCompany(('Your_Value_Here'))
->setStreet(('Your_Value_Here'))
->setCity(('Your_Value_Here'))
->setCountry_id(('Your_Value_Here'))
->setRegion(('Your_Value_Here'))
->setRegion_id(('Your_Value_Here'))
->setPostcode(('Your_Value_Here'))
->setTelephone(('Your_Value_Here'))
->setFax(('Your_Value_Here'));
$quote->setBillingAddress($billingAddress);
$shippingAddress = Mage::getModel('sales/quote_address')
->setStoreId($storeId)
->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_SHIPPING)
->setCustomerId(('Your_Value_Here'))
->setCustomerAddressId(('Your_Value_Here'))
->setCustomer_address_id(('Your_Value_Here'))
->setPrefix(('Your_Value_Here'))
->setFirstname(('Your_Value_Here'))
->setMiddlename(('Your_Value_Here'))
->setLastname(('Your_Value_Here'))
->setSuffix(('Your_Value_Here'))
->setCompany(('Your_Value_Here'))
->setStreet(('Your_Value_Here'))
->setCity(('Your_Value_Here'))
->setCountry_id(('Your_Value_Here'))
->setRegion(('Your_Value_Here'))
->setRegion_id(('Your_Value_Here'))
->setPostcode(('Your_Value_Here'))
->setTelephone(('Your_Value_Here'))
->setFax(('Your_Value_Here'));
$quote->setShippingAddress($shippingAddress)
->setShipping_method('flatrate_flatrate')
->setShippingDescription($this->getCarrierName('flatrate'));
$quote->save();
这当然很复杂,但你做了一个很好的概述。欢迎!谢谢!我想给你一个很好的概述,我正在尝试做什么,所以有很多解释。我是堆栈溢出的狂热用户,所以我希望我做得很好。
$quote = Mage::getSingleton('checkout/session')->getQuote();
$billingAddress = Mage::getModel('sales/quote_address')
->setStoreId($storeId)
->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_BILLING)
->setCustomerId(('Your_Value_Here'))
->setCustomerAddressIpd(('Your_Value_Here'))
->setCustomer_address_id(('Your_Value_Here'))
->setPrefix(('Your_Value_Here'))
->setFirstname(('Your_Value_Here'))
->setMiddlename(('Your_Value_Here'))
->setLastname(('Your_Value_Here'))
->setSuffix(('Your_Value_Here'))
->setCompany(('Your_Value_Here'))
->setStreet(('Your_Value_Here'))
->setCity(('Your_Value_Here'))
->setCountry_id(('Your_Value_Here'))
->setRegion(('Your_Value_Here'))
->setRegion_id(('Your_Value_Here'))
->setPostcode(('Your_Value_Here'))
->setTelephone(('Your_Value_Here'))
->setFax(('Your_Value_Here'));
$quote->setBillingAddress($billingAddress);
$shippingAddress = Mage::getModel('sales/quote_address')
->setStoreId($storeId)
->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_SHIPPING)
->setCustomerId(('Your_Value_Here'))
->setCustomerAddressId(('Your_Value_Here'))
->setCustomer_address_id(('Your_Value_Here'))
->setPrefix(('Your_Value_Here'))
->setFirstname(('Your_Value_Here'))
->setMiddlename(('Your_Value_Here'))
->setLastname(('Your_Value_Here'))
->setSuffix(('Your_Value_Here'))
->setCompany(('Your_Value_Here'))
->setStreet(('Your_Value_Here'))
->setCity(('Your_Value_Here'))
->setCountry_id(('Your_Value_Here'))
->setRegion(('Your_Value_Here'))
->setRegion_id(('Your_Value_Here'))
->setPostcode(('Your_Value_Here'))
->setTelephone(('Your_Value_Here'))
->setFax(('Your_Value_Here'));
$quote->setShippingAddress($shippingAddress)
->setShipping_method('flatrate_flatrate')
->setShippingDescription($this->getCarrierName('flatrate'));
$quote->save();