aveeva Posted June 27, 2019 Share Posted June 27, 2019 Created module like No other products add to cart if restricted product available in cart and vice versa. My Module : app/etc/modules/Brst_Test.xml <?xml version="1.0"?> <config> <modules> <Brst_Test> <active>true</active> <codePool>community</codePool> </Brst_Test> </modules> </config> This is my observer file app/code/community/Brst/Test/Model/Observer.php <?php ini_set('display_errors', '1'); // Mage::log('Hy observer called', null, 'logfile.log'); class Brst_Test_Model_Observer { //Put any event as per your requirement public function logCartAdd() { $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::getSingleton('checkout/session')->getQuote(); // if ($quote->hasProductId(2)) //{ // Mage::getSingleton("core/session")->addError("Cart has Special Product you can not add another"); // return; // } $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>0.1.0</version> </Brst_Test> </modules> <global> <models> <brst_test> <class>Brst_Test_Model</class> </brst_test> </models> </global> <frontend> <events> <controller_action_predispatch_checkout_cart_add> <observers> <brst_test_log_cart_add> <class>brst_test/observer</class> <method>logCartAdd</method> </brst_test_log_cart_add> </observers> </controller_action_predispatch_checkout_cart_add> </events> </frontend> </config> Not working, how to solve the error? Quote Link to comment Share on other sites More sharing options...
NotionCommotion Posted June 27, 2019 Share Posted June 27, 2019 Are you getting any errors? Maybe on this line? if ($product->getId()==31588 && cart_qty > 0) { Quote Link to comment Share on other sites More sharing options...
aveeva Posted June 27, 2019 Author Share Posted June 27, 2019 @NotionCommotion No there is no error, how to find the error? Quote Link to comment Share on other sites More sharing options...
aveeva Posted June 27, 2019 Author Share Posted June 27, 2019 @NotionCommotion If i try with try and cache debug, no error, <?php ini_set('display_errors', '1'); Mage::log('Hy observer called', null, 'add_to_cart_logfile.log'); class Brst_Test_Model_Observer { //Put any event as per your requirement public function logCartAdd() { try{ Mage::log('test', null, 'add_to_cart_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::getSingleton('checkout/session')->getQuote(); // if ($quote->hasProductId(2)) //{ // Mage::getSingleton("core/session")->addError("Cart has Special Product you can not add another"); // return; // } $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"); } } }catch(Exception $e) { Mage::log($e, null, 'add_to_cart_logfile.log'); } } } ?> Quote Link to comment Share on other sites More sharing options...
aveeva Posted June 27, 2019 Author Share Posted June 27, 2019 @NotionCommotion I am new to PHP, i try module like no other products eligible to add add-to-cart if restricted product available in the cart, so i got the script from stackoverflow,the script based on magento observer. I am not able to find the error, can i get help to find the error? Quote Link to comment Share on other sites More sharing options...
NotionCommotion Posted June 27, 2019 Share Posted June 27, 2019 aveeva, cart_qty should be $cart_qty. More importantly, you should have received an undeclared constant warning. First execute the below script. <?php ini_set('display_errors', '1'); $cart_qty = 123; if (cart_qty > 0) { exit("You can not add This special Product, empty cart before add it"); } exit('done'); Did you receive a warning? If not, your error logging is not set up write, and figure this out before doing any more work or you will definitely have a horrible experience. If you did receive a warning, then this erroneous line of code is not being executed. Add some flags to your script (i.e. echo('got here!'); ) to figure out where you are going wrong. Quote Link to comment Share on other sites More sharing options...
aveeva Posted June 28, 2019 Author Share Posted June 28, 2019 If i run below code in observer.php there is no warning: <?php ini_set('display_errors', '1'); $cart_qty = 123; if (cart_qty > 0) { exit("You can not add This special Product, empty cart before add it"); } exit('done'); Quote Link to comment Share on other sites More sharing options...
aveeva Posted June 28, 2019 Author Share Posted June 28, 2019 How to setup error logging with proper permission? Quote Link to comment Share on other sites More sharing options...
aveeva Posted June 28, 2019 Author Share Posted June 28, 2019 (edited) I just try with try cache error handling : <?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() { Mage::log('good dude', null, 'logfile.log'); try{ $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::getSingleton('checkout/session')->getQuote(); // if ($quote->hasProductId(2)) //{ // Mage::getSingleton("core/session")->addError("Cart has Special Product you can not add another"); // return; // } $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"); } } }catch(Exception $e) { // Mage::log($e, null, 'logfile.log'); echo $e->getMessage(); } } } ?> and my logfile.log file 2019-06-28T05:50:11+00:00 DEBUG (7) : fine dude 2019-06-28T05:50:11+00:00 DEBUG (7) : good dude If i am right? Edited June 28, 2019 by aveeva Quote Link to comment Share on other sites More sharing options...
Barand Posted June 28, 2019 Share Posted June 28, 2019 17 hours ago, NotionCommotion said: Are you getting any errors? Maybe on this line? if ($product->getId()==31588 && cart_qty > 0) { It won't throw an error, just a notice, so it will depend on the error reporting level. Notice: Use of undefined constant cart_qty It will assume it is the string value 'cart_qty'. Quote Link to comment Share on other sites More sharing options...
aveeva Posted June 28, 2019 Author Share Posted June 28, 2019 @Barand if ($product->getId()==31588 && $cart_qty > 0) { Mage::throwException("You can not add This special Product, empty cart before add it"); } Is it now okay? Quote Link to comment Share on other sites More sharing options...
Barand Posted June 28, 2019 Share Posted June 28, 2019 You have corrected the syntax error. Does it work? I have no way of knowing what your variables contain or what your custom methods are returning, therefore cannot comment further. Quote Link to comment Share on other sites More sharing options...
aveeva Posted June 28, 2019 Author Share Posted June 28, 2019 (edited) After correcting the syntax error, my logic not working but observer triggered. <?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() { Mage::log('good dude', null, 'logfile.log'); // try{ $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::getSingleton('checkout/session')->getQuote(); // if ($quote->hasProductId(2)) //{ // Mage::getSingleton("core/session")->addError("Cart has Special Product you can not add another"); // return; // } $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"); } } // }catch(Exception $e) // { // // Mage::log($e, null, 'logfile.log'); // echo $e->getMessage(); // } } } ?> finally not working but observer triggered, still other products added to cart if restricted products available in cart. How to do my module a better way? FYI: logfile.log 2019-06-28T06:05:00+00:00 DEBUG (7): fine dude 2019-06-28T06:05:00+00:00 DEBUG (7): good dude Edited June 28, 2019 by aveeva Quote Link to comment Share on other sites More sharing options...
NotionCommotion Posted June 29, 2019 Share Posted June 29, 2019 When your script has an error, do you see those errors or just have to guess whether you have one or not? If the later, please do not do anything until you figure out how to view errors. Try adding the following error_reporting(E_ALL); ini_set('display_startup_errors', '1'); ini_set('display_errors', '1'); 1 Quote Link to comment Share on other sites More sharing options...
aveeva Posted August 5, 2019 Author Share Posted August 5, 2019 @Barand I just try with category instead of products, here i am facing some issue, could you pls help me, public function cartevent(Varien_Event_Observer $observer) { // $category_id = array(680, 894, 895) ; //category ids $category_products = Mage::getModel('catalog/category') ->addAttributeToFilter('category_id', array('in' => array('680','894','895'))) ->setWebsiteId(2); // load website id // check cart qty status $cart_qty = (int) Mage::getModel('checkout/cart')->getQuote()->getItemQty(); //logic if($category_products && $cart_qty > 0 ) { Mage::throwException("If you want Kolu Padi, Purchase alone not mixed with other Products"); } //check if cart have products $quote = Mage::getModel('checkout/cart')->getQuote(); foreach($quote->getAllItems() as $item) { $productId = $item->getCategoryId(); if($productId == $category_products) { Mage::throwException("Cart has Special Product you can not add another"); } } } Observer not trigger. could you pls help me Quote Link to comment Share on other sites More sharing options...
Barand Posted August 5, 2019 Share Posted August 5, 2019 On 6/28/2019 at 7:09 AM, Barand said: I have no way of knowing what your variables contain or what your custom methods are returning, therefore cannot comment further. Quote Link to comment Share on other sites More sharing options...
aveeva Posted August 7, 2019 Author Share Posted August 7, 2019 (edited) @Barand @NotionCommotion On 6/27/2019 at 5:47 PM, NotionCommotion said: Are you getting any errors? Maybe on this line? if ($product->getId()==31588 && cart_qty > 0) { Like same how can i get category_id, my observer : <?php class Gta_KolupadiRestrict_Model_Observer { public function cartevent(Varien_Event_Observer $observer) { // Load product $product = $observer->getProduct(); $prodID = $product->getId(); $_product = Mage::getModel('catalog/product')->load($prodID); // get category id $categoryIds = $_product->getCategoryIds(); // check cart $cart_qty = (int)Mage::getModel('checkout/cart')->getQuote()->getItemQty(); // check conditiion cart has other products if(in_array(681, $categoryIds) && $cart_qty > 0) { Mage::throwException("You can not add This special Product, empty cart before add it"); } // check if other products add to cart $quote = Mage::getModel('checkout/cart')->getQuote(); foreach ($quote->getAllItems() as $item) { $_product1 = $item->getProduct(); $categoryIds1 = $_product1->getCategoryIds(); if(in_array(681, $categoryIds1)) { Mage::throwException("If you want Kolu Padi, Purchase alone not mixed with other Products"); break; } } } } ?> condition : I just want to restrict some of the category of products to purchase with other category products, Workout : If customer click add to cart, using observer compare current add-to-cart product category id & already cart products category id, if the current product category id and cart products category id different display message like, You can not add This special Product, empty cart before add it and also vice versa if cart has restricted category of products, if customer try to add other products throw exception like If you want Kolu Padi, Purchase alone not mixed with other Products My error : a:5:{i:0;s:67:"If you want Kolu Padi, Purchase alone not mixed with other Products";i:1;s:1835:"#0 /home/abc/public_html/app/code/local/Gta/KolupadiRestrict/Model/Observer.php(21): Mage::throwException('If you want Kol...') #1 /home/abc/public_html/app/code/core/Mage/Core/Model/App.php(1358): Gta_KolupadiRestrict_Model_Observer->cartevent(Object(Varien_Event_Observer)) #2 /home/abc/public_html/app/code/core/Mage/Core/Model/App.php(1337): Mage_Core_Model_App->_callObserverMethod(Object(Gta_KolupadiRestrict_Model_Observer), 'cartevent', Object(Varien_Event_Observer)) #3 /home/abc/public_html/app/Mage.php(448): Mage_Core_Model_App->dispatchEvent('checkout_cart_p...', Array) #4 /home/abc/public_html/app/code/core/Mage/Checkout/Model/Cart.php(290): Mage::dispatchEvent('checkout_cart_p...', Array) #5 /home/abc/public_html/app/code/local/Cmsmart/AjaxCart/controllers/IndexController.php(315): Mage_Checkout_Model_Cart->addProduct('5071', Array) #6 /home/abc/public_html/app/code/local/Cmsmart/AjaxCart/controllers/IndexController.php(133): Cmsmart_AjaxCart_IndexController->tryaddAction(Object(Mage_Catalog_Model_Product), Array) #7 /home/abc/public_html/app/code/core/Mage/Core/Controller/Varien/Action.php(418): Cmsmart_AjaxCart_IndexController->indexAction() #8 /home/abc/public_html/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(254): Mage_Core_Controller_Varien_Action->dispatch('index') #9 /home/abc/public_html/app/code/core/Mage/Core/Controller/Varien/Front.php(172): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http)) #10 /home/abc/public_html/app/code/core/Mage/Core/Model/App.php(365): Mage_Core_Controller_Varien_Front->dispatch() #11 /home/abc/public_html/app/Mage.php(683): Mage_Core_Model_App->run(Array) #12 /home/abc/public_html/australia/index.php(93): Mage::run('australia', 'website') #13 {main}";s:3:"url";s:100:"/ajaxcart/index/index/?form_key=MtlJbvKkqPQKCLJR&product=5071&related_product=&qty=1&_=1565155804563";s:11:"script_name";s:10:"/index.php";s:4:"skin";s:9:"australia";} Edited August 7, 2019 by aveeva Quote Link to comment Share on other sites More sharing options...
aveeva Posted August 7, 2019 Author Share Posted August 7, 2019 config.xml <?xml version="1.0"?> <config> <modules> <Gta_KolupadiRestrict> <version>1.0.0</version> </Gta_KolupadiRestrict> </modules> <global> <models> <gta_kolupadirestrict> <class>Gta_KolupadiRestrict_Model</class> </gta_kolupadirestrict> </models> <events> <checkout_cart_product_add_after> <observers> <Gta_KolupadiRestrict_Model_Observer> <type>singleton</type> <class>Gta_KolupadiRestrict_Model_Observer</class> <method>cartevent</method> </Gta_KolupadiRestrict_Model_Observer> </observers> </checkout_cart_product_add_after> </events> </global> </config> Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.