9

Magentoで最初に商品をカートに追加したときにポップアップを表示したいのですが、商品が再度追加または更新されたときにポップアップを表示したくありません.要するに、カートに追加される商品を知りたいです初出か否か?

4

2 に答える 2

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 に true フラグが渡されると、セッションから値が削除されます。

于 2012-07-26T15:13:06.873 に答える
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);

お役に立てれば!

于 2012-07-26T13:36:08.873 に答える