web-dev-qa-db-fra.com

Modification du prix indiqué en ajoutant un produit au panier: magento

Je souhaite modifier le prix du produit tout en l'ajoutant au panier.

Comment c'est possible laissez-moi savoir ...

19
Sankar Subburaj

Pour ce faire, ajoutez un observateur qui recherche cet événement '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>

L'observateur devrait avoir une méthode qui fait quelque chose comme ceci:

public function updatePrice($observer) {
    $event = $observer->getEvent();
    $quote_item = $event->getQuoteItem();
    $new_price = <insert logic>
    $quote_item->setOriginalCustomPrice($new_price);
    $quote_item->save();
}
40
Gershon Herczeg

Vous pouvez utiliser une classe observateur pour écouter checkout_cart_product_add_after et utiliser le «Super Mode» d’un produit pour définir des prix personnalisés par rapport à l’article de devis.

Dans votre /app/code/local/{namespace}/{votremodule}/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>

Et puis créez une classe Observer à /app/code/local/{namespace}/{votremoduleBuch/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); 
            }

        }
4
Xman Classical

Soupe aux noix.

Fichier: /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>

Fichier: /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>

Fichier: /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();
      }
 }

À votre santé,

3
JoshBelke

Le problème concernant le produit configurable a été résolu. Vous supprimez simplement le 

$ quote_item-> save ();

et puis pour le produit ne sera pas ajouté au panier deux fois. Mais une autre question très grave reste dans cette fonction. C'est-à-dire qu'avec cette fonction, nous pouvons mettre à jour le prix de l'article dans le panier, mais après l'ajout au panier, le prix du produit n'est pas modifié en fonction de la devise différente. Donc, cette fonction ne peut pas être utilisée pour un magasin ayant plusieurs devises.

Si quelqu'un trouve une solution à ce problème, veuillez partager avec nous ...

3
user2749561

Gershon Herczeg, Jürgen Thelen et Xman Classical ont répondu correctement. Vous devrez écrire un observateur de l'événement sales_quote_add_item . Lorsqu'un produit est ajouté au panier, votre observateur sera déclenché. Si le produit est configurable, cet événement sera déclenché deux fois. Vous devrez procéder de la sorte pour obtenir un produit simple.

    $item = $observer->getEvent()->getQuoteItem();
    $quote = $item->getQuote();
    $product = $item->getProduct();
    if ($product->getTypeId() != "configurable") {
       //Do your thing here
    }
2
Farooq Ahmed

La question ne précise pas si cela doit être fait en ajoutant une logique au code ou non. Ainsi, puisque vous avez des réponses pour le développeur, il existe également un élément appelé règles de prix du panier (dans le panneau d’administration, allez à Promotions> Règles des prix du panier) où vous pouvez créer différentes règles pour réaliser des ventes et des remises (avec ou sans coupons).

1
Zefiryn
    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

Fichier: app/code/local/Espace de noms/Module/etc/config.xml

par exemple: 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>

Fichier: 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;
    }
 }
0
suruthi