2012-07-26 86 views

回答

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中检索。

基本上注册表值只能通过一个请求的生命 - 你正在发布到结帐/购物车/添加,然后被重定向到结帐/购物车/索引 - 所以你的注册表值丢失。

如果你想持续在这些值,那么你可以改用会话:

在您的观察:

Mage::getSingleton('core/session')->setData('your_var', 'your_value'); 

检索值

$yourVar = Mage::getSingleton('core/session')->getData('your_var', true); 

真正的旗帜传递到的getData将从SESS删除值离子为你。

+0

我在使用“controller_action_predispatch_checkout_cart_add”获取产品ID之前,它将其添加到购物车..我使用寄存器变量获取产品ID在购物车上的phtml页面......并准备一个函数进行条件检查。但现在我无法在注册表页面上获得productid ..请帮我解决这个问题.. – Tamanna 2012-07-27 12:37:17

+0

已经更新了答案,以便为你解释这个问题 – 2012-07-27 13:17:49

+0

非常感谢你Drew Hunter ..对我来说一个完美的解决方案。谢谢你的帮助...:):) – Tamanna 2012-07-27 13:43:58

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); 

希望这有助于!

+1

感谢您的回复..它是完美的解决方案。我在观察者中使用了这个逻辑,现在我的问题是如何在购物车页面上获得$ isProductInCart值,因为我希望此值显示购物车页面中的弹出窗口。一个phtml文件中的变量值... – Tamanna 2012-07-27 10:27:33

+0

您可以简单地在产品ID作为函数参数的某些函数中包装上述代码,并且可以从任何地方调用它。 – MagePsycho 2012-07-27 10:33:51

+0

我的回答也被低估了 – 2012-07-27 18:39:39

相关问题