У нас есть требование, согласно которому клиенту будет разрешено добавлять только один продукт в корзину за раз. Однако он / она может добавить любое количество этого продукта.
Как я могу предотвратить добавление товара в корзину, если в корзине уже есть товар?
Может ли кто-нибудь помочь в этом?
product
cart
magento-1.8
Shathish
источник
источник
checkout_cart_product_add_before
, например markshust.com/2012/.Ответы:
События
catalog_product_type_prepare_full_options
иcatalog_product_type_prepare_lite_options
ваши друзьяТогда в вашем классе Observer
источник
catalog_product_type_prepare_lite_options
это первый для меня! красиво сделаноВместо того, чтобы переписывать контроллер (пожалуйста, не делайте этого), скорее, перепишите
addProduct
метод, чтобы учесть ограничение:Если вы хотите получить фантазию, замените
1
вышеприведенное наMage::getStoreConfig('checkout/options/max_cart_qty)
и установите следующий файл config.xml вашего модуля:Это значение теперь контролируется через значение XML. Если вы хотите по- настоящему, очень модно, добавьте это в system.xml вашего нового модуля:
Помните, что вам нужно установить a
<depends>Mage_Checkout</depends>
для вашего модуля, чтобы использовать его предопределенную конфигурацию системы.источник
Возможный способ - переписать addAction в Mage_Checkout_CartController.
Поэтому проверьте, есть ли уже продукт в корзине, и если да, покажите соответствующее сообщение об ошибке. Если нет, вы можете вызвать родительский метод, который выполняет полный процесс добавления:
источник
$this->_goBack();
не работает! Я попал в условие if, но продукт все еще добавляется.Я думаю, что вы можете использовать наблюдателя, и следующие события будут полезны для проверки условий, которые вы хотите. (Возможно, некоторые из событий могут отсутствовать в той версии Magento, которую вы используете).
источник
checkout_cart_product_add_after
событием, вопрос в том, как я могу предотвратить добавление товара в корзину?Может быть, немного левая идея, но как насчет использования
catalog_product_is_salable_after
события?Здесь вы можете проверить, есть ли товар в корзине или в нем есть другой товар. Когда в корзине есть другой товар, обновите атрибут is_salable объекта salable, переданный наблюдателю, в значение false.
Обратите внимание, что это не было проверено, и это только идея. Это не удастся, если ваш шаблон не проверяет
$product->isSaleable()
перед отображением кнопки. Она также удалит кнопку и не остановит процесс добавления, если пользователь сможет угадать URL.источник
Я знаю, что эта тема старая, но у меня была похожая проблема. Я хочу, чтобы в корзине был только один товар, и если покупатель добавляет новый, я хочу заменить старый на новый. Так что я переопределить addAction (описано здесь, как это:
}
источник