我正在尝试将字符串ABC
附加到添加到购物车的每个商品的名称中。这应该显示在购物车/结帐中,并可以编程方式访问。
到目前为止,我已经使用我的自定义Mage_Checkout_CartController
重载了ABC_DEF_CartController
:
<frontend>
<routers>
<checkout>
<args>
<modules>
<ABC_DEF before='Mage_Checkout'>ABC_DEF</ABC_DEF>
</modules>
</args>
</checkout>
</routers>
</frontend>
新的CartController.php
overloades addAction()
:
public function addAction(){
//prepare
$cart = $this->_getCart();
$params = $this->getRequest()->getParams();
$params['qty']=1;
try{
$product = $this->_initProduct();
$product->setData('qty',1);
if(!$product){
//TODO product not found
return;
}
$product->setData('name',$product->getName()."ABC");
$cart->addProduct($product,$params);
$cart->save();
$this->_getSession()->setCartWasUpdated(true);
Mage::dispatchEvent('checkout_cart_add_product_complete',
array('product' => $product, 'request' => $this->getRequest(), 'response' => $this->getResponse())
);
} catch (Exception $e) {
//TODO
Mage::logException($e);
}
根据我的理解,所有基本的产品信息都是从某个地方的数据库重新加载的,但我无法确定在何处或如何使更改持久化。提前致谢。
答案 0 :(得分:1)
我认为你最好加入事件sales_quote_item_set_product
。此事件将在Mage_Sales_Model_Quote_Item::setProduct()
中发送
在派遣活动之前,有这一行:
->setName($product->getName())
所以我假设您可以在我提到的事件中更改自定义观察者的名称 该事件作为参数接收当前报价项目和分配给它的产品。