Mamy wymaganie, aby klient mógł dodawać tylko jeden produkt do koszyka na raz. Może jednak dodać dowolną ilość tego produktu.
Jak mogę zapobiec dodaniu produktu do koszyka, jeśli w koszyku jest już produkt?
Czy ktoś może w tym pomóc?
product
cart
magento-1.8
Shathish
źródło
źródło
checkout_cart_product_add_before
, np. Markshust.com/2012/Odpowiedzi:
Wydarzenia
catalog_product_type_prepare_full_options
icatalog_product_type_prepare_lite_options
są twoimi przyjaciółmiNastępnie w klasie Observer
źródło
catalog_product_type_prepare_lite_options
jest dla mnie pierwszy! ładnie wykonane.Zamiast przepisać kontroler (proszę, nie rób tego), zamiast tego przepisz
addProduct
metodę, aby uwzględnić limit:Jeśli chcesz się podobać, zamień
1
powyższe naMage::getStoreConfig('checkout/options/max_cart_qty)
i ustaw następujące config.xml modułu:Ta wartość jest teraz kontrolowana za pomocą wartości XML. Jeśli chcesz się naprawdę bardzo spodobać , dodaj to do pliku system.xml nowego modułu:
Pamiętaj, że musisz ustawić a
<depends>Mage_Checkout</depends>
dla swojego modułu, aby móc korzystać z jego predefiniowanej konfiguracji systemu.źródło
Możliwym sposobem jest przepisanie addAction Mage_Checkout_CartController.
Sprawdź, czy w koszyku jest już produkt, a jeśli tak, pokaż odpowiedni komunikat o błędzie. Jeśli nie, możesz wywołać metodę nadrzędną, która wykonuje cały proces dodawania:
źródło
$this->_goBack();
nie działa! Wchodzę w warunek if, ale produkt wciąż się dodaje.Myślę, że możesz użyć obserwatora, a następujące wydarzenia przydadzą się do sprawdzenia warunków, które chcesz. (Być może niektóre z wydarzeń mogą nie występować w używanej wersji Magento).
źródło
checkout_cart_product_add_after
zdarzeniem, pytanie brzmi: jak mogę zapobiec dodaniu produktu do koszyka?Może trochę pomysł na lewe pole, ale co powiesz na wykorzystanie
catalog_product_is_salable_after
wydarzenia?Tutaj możesz sprawdzić, czy produkt znajduje się w koszyku lub czy w koszyku jest inny produkt. Gdy w aktualizacji koszyka znajduje się inny produkt, atrybut „is_salable” obiektu „nadającego się do sprzedaży” jest przekazywany obserwatorowi na false.
UWAGA: nie zostało to przetestowane i jest jedynie pomysłem. Nie powiedzie się, jeśli Twój szablon nie sprawdzi się
$product->isSaleable()
przed wyświetleniem przycisku. Spowoduje to również usunięcie przycisku i nie zatrzyma procesu dodawania, jeśli użytkownik będzie w stanie odgadnąć adres URL.źródło
Wiem, że ten temat jest czymś starym, ale miałem podobny problem. Chcę tylko jeden produkt w koszyku, a jeśli klient doda nowy, chcę wymienić stary na nowy. Zastępuję więc addAction (opisane tutaj tak:
}
źródło