如何检查Magento产品是否已添加到购物车中?

Tam*_*nna 9 magento

我想在Magento中首次将产品添加到购物车时显示弹出窗口,如果再次添加或更新产品,则不想显示弹出窗口.简而言之,我想知道将要添加到购物车中的产品是第一次出现?

Dre*_*ter 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.
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您正在处理父/子类型产品,并且您只想测试父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;
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑

在评论中询问了为什么设置注册表值controller_action_predispatch_checkout_cart_add无法在cart.phtml中检索的问题.

基本上注册表值仅在单个请求的生命周期内可用 - 您将发布到checkout/cart/add,然后重定向到checkout/cart/index - 因此您的注册表值将丢失.

如果您想在这些值之间保留一个值,那么您可以使用该会话:

在你的观察者中:

Mage::getSingleton('core/session')->setData('your_var', 'your_value');
Run Code Online (Sandbox Code Playgroud)

要检索值

$yourVar = Mage::getSingleton('core/session')->getData('your_var', true);
Run Code Online (Sandbox Code Playgroud)

传递给getData的true标志将从会话中删除该值.