我想在Magento中首次将产品添加到购物车时显示弹出窗口,如果再次添加或更新产品,则不想显示弹出窗口。简而言之,我想知道将要添加的产品在购物车中是否是首次出现?
答案 0 :(得分:15)
答案很大程度上取决于您希望如何处理父/子类型产品(如果需要)。
如果您只处理简单的产品或者您有父/子类型的产品,并且您需要测试子ID,那么:
$productId = 1;
$quote = Mage::getSingleton('checkout/session')->getQuote();
if (! $quote->hasProductId($productId)) {
// Product is not in the shopping cart so
// go head and show the popup.
}
或者,如果您正在处理父/子类型产品,而您只想测试父ID,那么:
$productId = 1;
$quote = Mage::getSingleton('checkout/session')->getQuote();
$foundInCart = false;
foreach($quote->getAllVisibleItems() as $item) {
if ($item->getData('product_id') == $productId) {
$foundInCart = true;
break;
}
}
修改强>
在评论中询问了为什么在controller_action_predispatch_checkout_cart_add
中设置注册表值无法在cart.phtml中检索的问题。
基本上注册表值仅在单个请求的生命周期内可用 - 您将发布到checkout / cart / add,然后被重定向到checkout / cart / index - 因此您的注册表值将丢失。
如果您希望在这些内容中保留一个值,则可以改为使用会话:
在你的观察者中:
Mage::getSingleton('core/session')->setData('your_var', 'your_value');
检索值
$yourVar = Mage::getSingleton('core/session')->getData('your_var', true);
传递给getData的真正标志将从会话中删除该值。
答案 1 :(得分:0)
为了检查产品是否已装入购物车,您只需使用以下代码:
$productId = $_product->getId(); //or however you want to get product id
$quote = Mage::getSingleton('checkout/session')->getQuote();
$items = $quote->getAllVisibleItems();
$isProductInCart = false;
foreach($items as $_item) {
if($_item->getProductId() == $productId){
$isProductInCart = true;
break;
}
}
var_dump($isProductInCart);
希望这有帮助!