gratis - Cambiar el precio en presupuesto al agregar producto al carrito: magento
magento envio gratis (7)
La forma de hacerlo es agregar un observador que busque este evento ''sales_quote_add_item''
:
<events>
<sales_quote_add_item>
<observers>
<priceupdate_observer>
<type>singleton</type>
<class>mymodule/observer</class>
<method>updatePrice</method>
</priceupdate_observer>
</observers>
</sales_quote_add_item>
</events>
El observador debe tener un método que haga algo como esto:
public function updatePrice($observer) {
$event = $observer->getEvent();
$quote_item = $event->getQuoteItem();
$new_price = <insert logic>
$quote_item->setOriginalCustomPrice($new_price);
$quote_item->save();
}
Quiero cambiar el precio del producto mientras agrego ese producto al carrito.
Cómo es posible, hágamelo saber ...
Puede usar una clase de observador para escuchar checkout_cart_product_add_after, y usar el "Modo Súper" de un producto para establecer precios personalizados con respecto al elemento de cita.
En su /app/code/local/{namespace}/{yourmodule}/etc/config.xml:
<config>
...
<frontend>
...
<events>
<checkout_cart_product_add_after>
<observers>
<unique_event_name>
<class>{{modulename}}/observer</class>
<method>modifyPrice</method>
</unique_event_name>
</observers>
</checkout_cart_product_add_after>
</events>
...
</frontend>
...
</config>
Y luego crea una clase Observer en /app/code/local/{namespace}/{yourmodule}/Model/Observer.php
<?php
class <namespace>_<modulename>_Model_Observer
{
public function modifyPrice(Varien_Event_Observer $obs)
{
$customPrice = Mage::getSingleton(’core/session’)->getCustomPriceCalcuation(); // Provide you price i have set with session
$p = $obs->getQuoteItem();
$p->setCustomPrice($customPrice)->setOriginalCustomPrice($customPrice);
}
}
Como correctamente respondió Gershon Herczeg, Jürgen Thelen y Xman Classical. Deberá escribir un observador del evento sales_quote_add_item. Cuando se agrega un producto al carro, se activará su observador. Si el producto es Configurable, este evento se disparará dos veces. Tendrá que hacer algo así para obtener solo productos simples.
$item = $observer->getEvent()->getQuoteItem();
$quote = $item->getQuote();
$product = $item->getProduct();
if ($product->getTypeId() != "configurable") {
//Do your thing here
}
El problema con respecto al producto configurable ha sido resuelto. Simplemente eliminas el
$ quote_item-> save ();
y luego para el producto no se agregará al carrito dos veces. Pero otro tema muy serio es permanecer en esta función. Es decir, con esta función podemos actualizar el precio del artículo en el carrito, pero luego de agregarlo al carrito, el precio del producto no cambia según la moneda diferente. Por lo tanto, esta función no se puede usar para una tienda que tenga varias monedas.
Si alguien encuentra alguna solución al respecto, por favor, comparta con nosotros ...
Sopa de nueces
Archivo: /app/etc/modules/config.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Ajax_ProductAdjust>
<codePool>local</codePool>
<active>true</active>
</Ajax_ProductAdjust>
</modules>
</config>
Archivo: /app/code/local/Ajax/ProductAdjust/etc/config.xml
<?xml version="1.0"?>
<config>
<modules>
<Ajax_ProductAdjust>
<version>1.0.1</version>
</Ajax_ProductAdjust>
</modules>
<global>
<models>
<Ajax_ProductAdjust>
<class>Ajax_ProductAdjust_Model</class>
</Ajax_ProductAdjust>
</models>
<events>
<sales_quote_add_item>
<observers>
<ajax_productadjust_model_observer>
<type>singleton</type>
<class>Ajax_ProductAdjust_Model_Observer</class>
<method>updatePrice</method>
</ajax_productadjust_model_observer>
</observers>
</sales_quote_add_item>
</events>
</global>
</config>
Archivo: /app/code/local/Ajax/ProductAdjust/Model/Observer.php
<?php
//Notes
class Ajax_ProductAdjust_Model_Observer
{
public function _construct()
{
}
public function getNewPrice()
{
//Your new functionality here
//
$newprice = "";
return $newprice;
}
public function updatePrice( Varien_Event_Observer $observer )
{
$event = $observer->getEvent();
$quote_item = $event->getQuoteItem();
$new_price = $this->getNewPrice();
$quote_item->setOriginalCustomPrice($new_price);
$quote_item->save();
}
}
Aclamaciones,
La pregunta no indica si esto debe hacerse agregando algo de lógica al código o no. Entonces, como tiene respuestas para el desarrollador, también hay algo que se llama reglas de precios del carrito (en el panel de administración vaya a Promociones> Reglas de precios del carrito de compras) donde puede crear diferentes reglas para realizar ventas y descuentos (con o sin cupones).
To change product price while adding product to cart, use an observer event.
Follow the steps given below
1. Add an observer in your module config.xml file.
2. Create an observer file in your model
3. add checkout_cart_product_add_after event
Archivo: app / code / local / Namespace / Module / etc / config.xml
Por ejemplo: app / code / local / MGS / Rileytheme / etc / config.xml
<frontend>
<routers>
<routeurfrontend>
<use>standard</use>
<args>
<module>MGS_Rileytheme</module>
<frontName>rileytheme</frontName>
</args>
</routeurfrontend>
</routers>
<layout>
<updates>
<rileytheme>
<file>rileytheme.xml</file>
</rileytheme>
</updates>
</layout>
<events>
<checkout_cart_product_add_after>
<observers>
<rileytheme>
<class>rileytheme/observer</class>
<method>modifyPrice</method>
</rileytheme>
</observers>
</checkout_cart_product_add_after>
</events></b>
<frontend>
Archivo: app / code / local / MGS / Rileytheme / Model / Observer.php
class MGS_Rileytheme_Model_Observer {
public function modifyPrice(Varien_Event_Observer $observer) {
//$order = Mage::registry(''current_order''); For getting current order
//$orderid = $order->getRealOrderId(); For getting orderid
$quote_item = $observer->getQuoteItem();
$payment = 30; //add your custom product price here and do your logic here
$quote_item->setOriginalCustomPrice($payment);
$quote_item->save();
return $this;
}
}