2012-07-26 2 views
9

Bir ürün Magento'ya ilk ürün eklendiğinde açılır pencereyi göstermek istiyorum ve ürün tekrar eklendiyse veya güncellendiğinde açılır pencereyi göstermek istemiyorum. Kısacası, hangisine eklenecek olan ürünü öğrenmek istiyorum Sepet ilk oluşumu değil mi? Bu yardımcı olurBir Magento ürününün zaten sepete eklenmiş olup olmadığını nasıl kontrol edebilirim?

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

Hope: Sipariş kontroller sırasında

cevap

15

Yanıt büyük ölçüde ana/alt ürünle nasıl ilgileneceğinize bağlıdır (eğer gerekiyorsa). Eğer üst/alt tipi ürünleri ile ilgileniyor eğer,

$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. 
} 

Alternatif: Yalnızca basit ürünlerle yalnızca ilgileniyor veya üst/alt tipi ürünler varsa ve daha sonra çocuk kimliği yıllardan test etmek gerekirse

ve ancak o zaman üst kimliği için test etmek istiyorum:

$productId = 1; 
$quote = Mage::getSingleton('checkout/session')->getQuote(); 

$foundInCart = false; 
foreach($quote->getAllVisibleItems() as $item) { 
    if ($item->getData('product_id') == $productId) { 
     $foundInCart = true; 
     break; 
    } 
} 

DÜZENLEME

soruydu controller_action_predispatch_checkout_cart_add'da bir kayıt defteri değerinin ayarlanmasının neden cart.phtml dosyasında alınamayacağıyla ilgili bir yorumda bulunuldu.

Esasen kayıt defteri değeri yalnızca tek bir isteğin ömrü boyunca kullanılabilir - checkout/cart/add'e gönderiyorsunuz ve daha sonra checkout/cart/index'e yönlendiriliyorsunuz, böylece kayıt değerleriniz kayboluyor.

o zaman bunun yerine oturumu kullanabilirsiniz bu genelinde bir değer inat isterseniz: En gözlemci olarak

:

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

değerini almak için

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

GetData'ya iletilen gerçek bayrak, oturumdaki değeri kaldıracak Senin için iyon.

+0

Ürün sepetine eklenmeden önce ürün kimliğini aldığım için "controller_action_predispatch_checkout_cart_add" kullanmıştım. Sepette phtml sayfasında ürün kimliği almak için register değişkenini kullanmıştım ... ve bahsettiğiniz durum kontrolü için bir işlev hazırladım. .but şimdi kayıt defteri ile sepeti sayfasında productid almak mümkün değilim .. lütfen bunun için bana yardım edin .. – Tamanna

+0

sizin için bunu açıklamak için cevabı güncelledim –

+0

Teşekkür ederim o kadar çok Drew Hunter..A Benim için mükemmel çözüm ... yardım ettiğin için teşekkür ederim...:):) – Tamanna

0

ürün sepetinde zaten eğer ya da değil, sadece aşağıdaki kodu kullanabilirsiniz!

+1

Cevabınız için teşekkürler ... mükemmel bir çözümdü. Bu mantığı gözlemci olarak kullandım, şimdi benim sorunum, cart page.i isteyip istemediğimi göstermek için bu değerin, alışveriş sepetindeki $ inProductInCart değerinin nasıl elde edileceğidir. Bir phtml dosyasında değişken değer ... – Tamanna

+0

Yukarıdaki kodu fonksiyon argümanı olarak ürün kimliğiyle bazı işlevler içinde tamamlayabilir ve her yerden arayabilirsiniz. – MagePsycho

+0

Cevabım da reddedildi –