我是 magento 的初学者。我需要将动态价格从详细页面传递到购物车。
现在,当我传递动态价格时,它不会在购物车中更新,而是被产品的原始价格取代。
任何帮助将不胜感激。 在这条线上我得到了价格值。
$price=$this->getRequest()->getParam('price_custom');
索引控制器.php
public function cartAction()
{
if ($this->getRequest()->getParam('cart')){
if ($this->getRequest()->getParam('cart') == "delete"){
$id = $this->getRequest()->getParam('id');
if ($id) {
try {
Mage::getSingleton('checkout/cart')->removeItem($id)
->save();
} catch (Exception $e) {
Mage::getSingleton('checkout/session')->addError($this->__('Cannot remove item'));
}
}
}
}
if ($this->getRequest()->getParam('product')) {
$cart = Mage::getSingleton('checkout/cart');
$params = $this->getRequest()->getParams();
$related = $this->getRequest()->getParam('related_product');
$price=$this->getRequest()->getParam('price_custom');
$productId = (int) $this->getRequest()->getParam('product');
if ($productId) {
$product = Mage::getModel('catalog/product')
->setStoreId(Mage::app()->getStore()->getId())
->load($productId);
try {
if (!isset($params['qty'])) {
$params['qty'] = 1;
}
$cart->addProduct($product, $params);
if (!empty($related)) {
$cart->addProductsByIds(explode(',', $related));
}
$cart->save();
Mage::getSingleton('checkout/session')->setCartWasUpdated(true);
Mage::getSingleton('checkout/session')->setCartInsertedItem($product->getId());
$img = '';
Mage::dispatchEvent('checkout_cart_add_product_complete', array('product'=>$product, 'request'=>$this->getRequest()));
$photo_arr = explode("x",Mage::getStoreConfig('mdlajaxcheckout/default/mdl_ajax_cart_image_size', Mage::app()->getStore()->getId()));
$img = '<img src="'.Mage::helper('catalog/image')->init($product, 'image')->resize($photo_arr[0],$photo_arr[1]).'" width="'.$photo_arr[0].'" height="'.$photo_arr[1].'" />';
$message = $this->__('%s was successfully added to your shopping cart.', $product->getName());
Mage::getSingleton('checkout/session')->addSuccess('<div class="mdlajax-checkout-img">'.$img.'</div><div class="mdlajax-checkout-txt">'.$message.'</div>');
}
catch (Mage_Core_Exception $e) {
if (Mage::getSingleton('checkout/session')->getUseNotice(true)) {
Mage::getSingleton('checkout/session')->addNotice($e->getMessage());
} else {
$messages = array_unique(explode("\n", $e->getMessage()));
foreach ($messages as $message) {
Mage::getSingleton('checkout/session')->addError($message);
}
}
}
catch (Exception $e) {
Mage::getSingleton('checkout/session')->addException($e, $this->__('Can not add item to shopping cart'));
}
}
}
$this->loadLayout();
$this->_initLayoutMessages('checkout/session');
$this->renderLayout();
}
观察者.php
class Mdl_Ajaxcheckout_Model_Observer
{
public function modifyPrice(Varien_Event_Observer $obs)
{
// Get the quote item
$item = $obs->getQuoteItem();
// Ensure we have the parent item, if it has one
$item = ( $item->getParentItem() ? $item->getParentItem() : $item );
// Load the custom price
$price =$item->getRequest()->getParam('price_custom');
// Set the custom price
$item->setCustomPrice($price);
$item->setOriginalCustomPrice($price);
// Enable super mode on the product.
$item->getProduct()->setIsSuperMode(true);
}
}
请建议。
您必须在 get_final_price 上创建观察者以获得自定义价格
请检查以下链接
在哪里申请价格折扣。我认为这是帮助。如果您还有问题,请告诉我。
Magento 不提供在将商品添加到购物车时添加自定义价格的功能。这是我偶尔使用过的解决方案。
您可以使用观察者类来监听 checkout_cart_product_add_after ,并使用产品的“超级模式”根据报价项目设置自定义价格。
在您的/app/code/local/{namespace}/{yourmodule}/etc/config.xml中:
<config>
...
<frontend>
...
<events>
<checkout_cart_product_add_after>
<observers>
<unique_event_name>
<class>{{modulename}}/observer</class>
<method>modifyPrice</method>
</unique_event_name>
</observers>
</checkout_cart_product_add_after>
</events>
...
</frontend>
...
</config>
然后在 /app/code/local/{namespace}/{yourmodule}/Model/Observer.php 创建一个 Observer 类
class <namespace>_<modulename>_Model_Observer
{
public function modifyPrice(Varien_Event_Observer $obs)
{
// Get the quote item
$item = $obs->getQuoteItem();
// Ensure we have the parent item, if it has one
$item = ( $item->getParentItem() ? $item->getParentItem() : $item );
// Load the custom price
$price = "your custom price logic";
// Set the custom price
$item->setCustomPrice($price);
$item->setOriginalCustomPrice($price);
// Enable super mode on the product.
$item->getProduct()->setIsSuperMode(true);
}
}