Magento Custom Module für Add-to-Cart funktioniert nicht - Observer Triggered

7

Erstelltes Modul wie Keine anderen Produkte zum Warenkorb hinzufügen, wenn ein eingeschränktes Produkt im Warenkorb verfügbar ist und umgekehrt.

Mein Modul:

app / etc / modules / Brst_Test.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Brst_Test>
            <active>true</active>
            <codePool>community</codePool>
        </Brst_Test>
    </modules>
</config>

Dies ist meine Beobachterakte

app / code / community / Brst / Test / Model / Observer.php

<?php
ini_set('display_errors', '1');

// Mage::log('fine dude', null, 'logfile.log');
class Brst_Test_Model_Observer
{
    //Put any event as per your requirement
    public function logCartAdd($observer) {
        // Mage::log('good dude', null, 'logfile.log');


        $product = Mage::getModel('catalog/product')
                        ->load(Mage::app()->getRequest()->getParam('product', 0));
        $cart_qty = (int) Mage::getModel('checkout/cart')->getQuote()->getItemsQty();

        if ($product->getId()==31588 && $cart_qty > 0) {
            Mage::throwException("You can not add This special Product, empty cart before add it");
        }
        $quote = Mage::getModel('checkout/cart')->getQuote();
        foreach ($quote->getAllItems() as $item) {
            $productId = $item->getProductId();
            if($productId==31588){
                Mage::throwException("Cart has Special Product you can not add another");
            }
        }
    }
}
?>

app / code / community / Brst / Test / etc / config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Brst_Test>
            <version>1.0.0</version>
        </Brst_Test>
    </modules>
    <global>
        <models>
             <brst_test>
                <class>Brst_Test_Model</class>
             </brst_test>
        </models>
    </global>
    <frontend>
            <events>
                <checkout_cart_product_add_after>
                    <observers>
                        <Brst_Test_Model_Observer>
                            <type>singleton</type>
                            <class>Brst_Test_Model_Observer</class>
                            <method>logCartAdd</method>
                        </Brst_Test_Model_Observer>
                    </observers>
                </checkout_cart_product_add_after>
            </events>
    </frontend>
</config>

Funktioniert nicht, wie kann man den Fehler beheben?

zus
quelle
Hast du etwas in der Protokolldatei bekommen?
Nishu
Nein, es gibt keinen Fehler in der Protokolldatei?
Zus

Antworten:

3

Es sollte gemäß Code funktionieren.

Versuchen Sie dies, wenn Ihr nicht funktioniert

  • Ovverride \app\code\core\Mage\Checkout\Model\Cart.phpzu

       \app\code\local\Mage\Checkout\Model\Cart.php
  • Suchen Sie die Funktion addProduct($productInfo, $requestInfo=null)in Ihrer Ovveride-Datei, und fügen Sie dort die Logik zum Hinzufügen von Produkten hinzu

  • Code nach Zeile hinzufügen `$ request = $ this -> _ getProductRequest ($ requestInfo);

`

public function addProduct($productInfo, $requestInfo=null)
    {

        $product = $this->_getProduct($productInfo);
        $request = $this->_getProductRequest($requestInfo);

        /* ===========Restricted Product Coding Start==========        */
        $cart_qty = (int) Mage::getModel('checkout/cart')->getQuote()->getItemsQty();
        $restrictedIds = array(1,2,3); //add restricted product ids here
        if (in_array($product->getId(), $restrictedIds) && $cart_qty > 0) {
            Mage::getSingleton('core/session')->addError('You can not add This special Product, empty cart before add it');
           Mage::getModel('checkout/cart')->getQuote()->setHasError(true);
            return false;
        }

        $quote = Mage::getModel('checkout/cart')->getQuote();
        foreach ($quote->getAllItems() as $item) {
            $productId = $item->getProductId();
            if(in_array($productId, $restrictedIds)){
                Mage::getSingleton('core/session')->addError('Cart has Special Product you can not add another');
           Mage::getModel('checkout/cart')->getQuote()->setHasError(true);
                return false;
            }
        }

        /* ===========Restricted Product Coding End ==========        */

        /** @var Mage_Catalog_Helper_Product $helper */
        $helper  = Mage::helper('catalog/product');
       .
       .
       .
       .
       .
}

Hinweis : Sie können den Beobachter dort aufrufen und Ihrem Beobachter Logik hinzufügen, wenn Sie diese Funktion nicht codieren möchten

Ketan Borada
quelle
Funktioniert gut, aber die Fehlermeldung wird nicht angezeigt, z. B.: Wenn ich versuche, ein eingeschränktes Produkt hinzuzufügen, berücksichtigen Sie, dass der Warenkorb bereits über ein Produkt verfügt. Wenn Sie auf die Schaltfläche zum Hinzufügen eines Warenkorbs zum eingeschränkten Produkt klicken, wie z. Zu Ihrer Information -> Produkt nicht in den Warenkorb gelegt, sieht gut aus, meine einzige Fehlermeldung wird nicht richtig angezeigt. @ Ketan Borada
zus
Ich habe meine Antwort aktualisiert, Zeile hinzugefügtMage::getModel('checkout/cart')->getQuote()->setHasError(true);
Ketan Borada
immer noch der gleiche Fehler. Produkt nicht hinzugefügt, aber Fehlermeldung nicht angezeigt.
Zus
Ich arbeite gut für mich und versuche, loom.com/share/d7501c1428a14e96ae887ff514db6a76
Ketan Borada
2

app \ etc \ modules \ Brst_Test.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <config>
        <modules>
            <Brst_Test>
                <active>true</active>
                <codePool>community</codePool>
            </Brst_Test>
        </modules>
    </config>

app \ code \ community \ Brst \ Test \ etc \ config.xml

        <?xml version="1.0"?>
        <config>
            <modules>
                <Brst_Test>
                    <version>1.0.0</version>
                </Brst_Test>
            </modules>
            <global>
                <models>
                     <brsttest>
                        <class>Brst_Test_Model</class>
                     </brsttest>
                </models>
            </global>
            <frontend>
                    <events>
                            <controller_action_predispatch_checkout_cart_add>
                                <observers>
                                    <brsttest>
                                        <type>singleton</type>
                                        <class>brsttest/observer</class>
                                        <method>logCartAdd</method>
                                    </brsttest>
                                </observers>
                            </controller_action_predispatch_checkout_cart_add>
                        </events>
            </frontend>
        </config>

app \ code \ community \ Brst \ Test \ Model \ Observer.php

    <?php
    class Brst_Test_Model_Observer extends Mage_Core_Model_Abstract
    {

        public function logCartAdd($observer){

            //I am change this
            $id = Mage::app()->getFrontController()->getRequest()->getParam('product');

            $product = Mage::getModel('catalog/product')->load($id);

            $cart_qty = (int) Mage::getModel('checkout/cart')->getQuote()->getItemsQty();

            // I am change this
            if ($product->getId() == '31588' && $cart_qty > 0) {
                Mage::getSingleton('core/session')->addError('You can not add This special Product, empty cart before add it');
                $url = Mage::getModel('core/url')->getUrl("checkout/cart");
                Mage::app()->getResponse()->setRedirect($url);
                Mage::app()->getResponse()->sendResponse();
                exit;
            }

           $quote = Mage::getModel('checkout/cart')->getQuote();

            foreach ($quote->getAllItems() as $item) {
                $productId = $item->getProductId();
                if($productId ==  '31588'){
                    Mage::getSingleton('core/session')->addError('Cart has Special Product you can not add another');
                    $url = Mage::getModel('core/url')->getUrl("checkout/cart");
                    Mage::app()->getResponse()->setRedirect($url);
                    Mage::app()->getResponse()->sendResponse();
                    exit;

                }
            }


        }
    }

Versuchen Sie diesen Code

Vijay Khirade
quelle
Vielen Dank für Ihre Antwort. Es funktionieren nicht mehr andere Produkte, die dem Warenkorb hinzugefügt wurden, wenn eingeschränkte Produkte im Warenkorb verfügbar sind. Code -> pastiebin.com/5d1597f887f17 @ Vijay-CyberLocker
zus
In Ihrem Code auch gleich, Beobachter ausgelöst, aber Bedingung funktioniert nicht @ Vijay-CyberLocker
zus
Ok Bruder, gib mir ein paar Minuten, ich werde meine Antwort aktualisieren.
Vijay Khirade
Ich möchte nur wissen, ob meine Klasse direkt in der Beobachterklasse ist: <Klasse> brst_test / Beobachter </ Klasse> in config.xml
zus
Fügen Sie noch andere Produkte hinzu.
Zus