Tenemos un requisito, en el que un cliente podrá agregar solo un producto al carrito a la vez. Sin embargo, él / ella puede agregar cualquier cantidad de ese producto.
¿Cómo puedo evitar que un producto se agregue al carrito si ya hay un producto presente en el carrito?
¿Alguien puede ayudar en esto?
product
cart
magento-1.8
Shathish
fuente
fuente
checkout_cart_product_add_before
allí, por ejemplo markshust.com/2012/Respuestas:
Los eventos
catalog_product_type_prepare_full_options
ycatalog_product_type_prepare_lite_options
son tus amigosLuego en tu clase de observador
fuente
catalog_product_type_prepare_lite_options
es el primero para mi! bien hecho.En lugar de reescribir un controlador (por favor, oh, no hagas eso), más bien, reescribe el
addProduct
método para tener en cuenta el límite:Si quieres ponerte elegante, reemplaza lo
1
anterior conMage::getStoreConfig('checkout/options/max_cart_qty)
y configura lo siguiente config.xml de tu módulo:Ese valor ahora se controla a través del valor XML. Si quieres ponerte realmente sofisticado , agrega esto al system.xml de tu nuevo módulo:
Recuerde que debe configurar
<depends>Mage_Checkout</depends>
a su módulo para aprovechar su configuración de sistema predefinida.fuente
Una forma posible es reescribir el addAction de Mage_Checkout_CartController.
Por lo tanto, compruebe si ya hay un producto en el carrito y, en caso afirmativo, muestre un mensaje de error apropiado. Si no, puede llamar al método principal que está haciendo el proceso de adición completo:
fuente
$this->_goBack();
no funciona! Entro en la condición if pero el producto todavía se está agregando.Creo que puede usar un observador y los siguientes eventos serán útiles para verificar las condiciones que desee. (Quizás algunos de los eventos no estén en la versión de Magento que está utilizando).
fuente
checkout_cart_product_add_after
evento, la pregunta es ¿cómo puedo evitar que el producto se agregue al carrito?Tal vez sea un poco una idea de campo izquierdo, pero ¿qué hay de usar el
catalog_product_is_salable_after
evento?Lo que puede hacer aquí es verificar si el producto está en el carrito o si hay otro producto en el carrito. Cuando haya otro producto en el carrito, actualice el atributo 'is_salable' del objeto 'vendible' pasado al observador como falso.
TEN EN CUENTA que esto no ha sido probado y es solo una idea. Fallará si su plantilla no se verifica
$product->isSaleable()
antes de mostrar el botón. También solo eliminaría el botón y no detendría el proceso de agregar si el usuario pudiera adivinar la URL.fuente
Sé que este tema es algo antiguo, pero tuve un problema similar. Solo quiero un artículo en el carrito y si el cliente agrega uno nuevo, quiero reemplazar el anterior por el nuevo. Así que anulo la addAction (descrita aquí así:
}
fuente