Magento - 从购物车中删除产品
Magento - removing products from the cart
我需要在页面加载时从某个类别(id = 13 的类别)中删除购物车产品,如果该类别的产品已添加到购物车。我已经为此工作了很长一段时间并进行了研究,但我没有找到任何可以帮助我完成该功能以获得我想要的结果的东西。预先感谢您的帮助。
您可以通过使用 magento 观察者事件来实现您的要求,即 checkout_cart_save_before。我通过创建以下不允许用户将产品添加到特定类别的购物车的模块来实现这一点。
您需要为此创建一个模块:
在app/etc/modules/Tanymart_Removecart.xml下创建模块注册文件,代码如下:
<?xml version="1.0"?>
<config>
<modules>
<Tanymart_Removecart>
<active>true</active>
<codePool>community</codePool>
</Tanymart_Removecart>
</modules>
</config>
现在在 community codepool 下,创建 config.xml 文件。文件路径为 app/code/community/Tanymart/Removecart/etc/config.xml
<?xml version="1.0"?>
<config>
<modules>
<Tanymart_Removecart>
<version>0.1.0</version>
</Tanymart_Removecart>
</modules>
<global>
<models>
<tanyremovecart>
<class>Tanymart_Removecart_Model</class>
</tanyremovecart>
</models>
<events>
<checkout_cart_save_before>
<observers>
<remove_category_item>
<class>Tanymart_Removecart_Model_Observer</class>
<method>removeCategoryCart</method>
</remove_category_item>
</observers>
</checkout_cart_save_before>
</events>
</global>
<frontend>
<routers>
<tanyremovecart>
<use>standard</use>
<args>
<module>Tanymart_Removecart</module>
<frontName>tanyremovecart</frontName>
</args>
</tanyremovecart>
</routers>
</frontend>
</config>
现在在 Model 目录中创建 Observer.php。文件路径 app/code/community/Tanymart/Removecart/Model/Observer.php 代码如下:
<?php
/**
* @category Tanymart
* @package Tanymart_Removecart
* @author Bachcha Singh
* @copyright Copyright (c) 2017
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
*/
class Tanymart_Removecart_Model_Observer {
public function removeCategoryCart($observer){
$items = $observer->getEvent()->getCart()->getItems();
$oCheckout = Mage::getSingleton( 'checkout/session' );
$oQuote = $oCheckout->getQuote();
foreach($items as $item) {
$_product = $item->getProduct();
if(in_array(13, $_product->getCategoryIds())) {
$itemId = $item->getItemId();
$oQuote->removeItem($itemId)->save();
}
}
}
}
将上面的 13 替换为您的特定类别。
就是这样。
希望对你有所帮助。
我需要在页面加载时从某个类别(id = 13 的类别)中删除购物车产品,如果该类别的产品已添加到购物车。我已经为此工作了很长一段时间并进行了研究,但我没有找到任何可以帮助我完成该功能以获得我想要的结果的东西。预先感谢您的帮助。
您可以通过使用 magento 观察者事件来实现您的要求,即 checkout_cart_save_before。我通过创建以下不允许用户将产品添加到特定类别的购物车的模块来实现这一点。
您需要为此创建一个模块:
在app/etc/modules/Tanymart_Removecart.xml下创建模块注册文件,代码如下:
<?xml version="1.0"?> <config> <modules> <Tanymart_Removecart> <active>true</active> <codePool>community</codePool> </Tanymart_Removecart> </modules> </config>
现在在 community codepool 下,创建 config.xml 文件。文件路径为 app/code/community/Tanymart/Removecart/etc/config.xml
<?xml version="1.0"?> <config> <modules> <Tanymart_Removecart> <version>0.1.0</version> </Tanymart_Removecart> </modules> <global> <models> <tanyremovecart> <class>Tanymart_Removecart_Model</class> </tanyremovecart> </models> <events> <checkout_cart_save_before> <observers> <remove_category_item> <class>Tanymart_Removecart_Model_Observer</class> <method>removeCategoryCart</method> </remove_category_item> </observers> </checkout_cart_save_before> </events> </global> <frontend> <routers> <tanyremovecart> <use>standard</use> <args> <module>Tanymart_Removecart</module> <frontName>tanyremovecart</frontName> </args> </tanyremovecart> </routers> </frontend> </config>
现在在 Model 目录中创建 Observer.php。文件路径 app/code/community/Tanymart/Removecart/Model/Observer.php 代码如下:
<?php /** * @category Tanymart * @package Tanymart_Removecart * @author Bachcha Singh * @copyright Copyright (c) 2017 * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) */ class Tanymart_Removecart_Model_Observer { public function removeCategoryCart($observer){ $items = $observer->getEvent()->getCart()->getItems(); $oCheckout = Mage::getSingleton( 'checkout/session' ); $oQuote = $oCheckout->getQuote(); foreach($items as $item) { $_product = $item->getProduct(); if(in_array(13, $_product->getCategoryIds())) { $itemId = $item->getItemId(); $oQuote->removeItem($itemId)->save(); } } } }
将上面的 13 替换为您的特定类别。
就是这样。 希望对你有所帮助。