How to Fetch OrderId After checkout in Magento - magento

Hello I am creating a Observer in Magento to fetch OrderId
i have created an event name as in my config.xml
logically this event has to run after checkout
but in my case this event is running once i clicked on ADD TO CART
here is my config.xml file
<events>
<sales_quote_save_after>
<observers>
<salesorder>
<class>IlexSquare_SalesOrder_Model_Observer</class>
<method>salesOrder</method>
</salesorder>
</observers>
</sales_quote_save_after>
</events>
here is My Observer
class IlexSquare_SalesOrder_Model_Observer
{
public function salesOrder($observer)
{
die('7878');
}
}
But this die is running whenever i click on Add to Cart .. m missing something.
Please Help

After trying certain solution i got my answer
<events>
<checkout_type_onepage_save_order_after>
<observers>
<salesorder>
<class>IlexSquare_SalesOrder_Model_Observer</class>
<method>salesOrder</method>
</salesorder>
</observers>
</checkout_type_onepage_save_order_after>
</events>
just add this section in <frontend>tag instead of writing in <global> tag.

Related

Magento Clear Cart Observer

Namespace_Modulename_Model_ObserverI need to create an event/observer to clear cart before a product is being added. The checkout process will include only one product. Could anybody give me a hand?
I have the following code so far, but I'm doing something wrong:
In config.xml I have:
<frontend>
<events>
<checkout_cart_product_add_after>
<observers>
<clear_cart_observer>
<type>singleton</type>
<class>Namespace_Modulename_Model_Observer</class>
<method>clearCart</method>
</clear_cart_observer>
</observers>
</checkout_cart_product_add_after>
</events>
</frontend>
Also, I have created an observer file which contains:
public function clearCart($observer)
{
foreach( Mage::getSingleton('checkout/session')->getQuote()->getItemsCollection() as $item ) {
Mage::getSingleton('checkout/cart')->removeItem( $item->getId() )->save();
}
}
I don't get any error in my system.log, but it doesn't trigger. Any ideas?
You likely need to fix this:
<class>Namespace_Modulename_Model_Observer</class>
And ensure that you have the module loaded in:
app/etc/modules/Namespace_Modulename.xml
Don't forget to flush cache.

Magento : controller_action_predispatch is not working

I am trying to create controller_action_predispatch event:
This is my Mbyte/Pushnotification/etc/config.xml file code
<events>
<controller_action_predispatch_mbyte_pushnotification_index_index>
<observers>
<Mbyte_Pushnotification>
<class>Mbyte_Pushnotification/Observer</class>
<method>indexPreDispatch</method>
</Mbyte_Pushnotification>
</observers>
</controller_action_predispatch_mbyte_pushnotification_index_index>
</events>
My controller code : Mbyte/Pushnotification/controllers/IndexController.php file code
class Mbyte_Pushnotification_IndexController extends Mage_Core_Controller_Front_Action
{
public function indexAction()
{
Mage::log('Run',null,'log.log');
}
}
Observer file code:
class Mbyte_Pushnotification_Model_Observer {
public function indexPreDispatch($observer)
{
Mage::log('Check',null,'observer.log');
}}
controller_action_predispatch is not working.
Is there something i am doing wrong?
The event triggered should be
controller_action_predispatch_pushnotification_index_index
instead of
controller_action_predispatch_mbyte_pushnotification_index_index
in case you did not modify the frontend name ("pushnotification") of your controller.
Therefore you have to update your config.xml to
<events>
<controller_action_predispatch_pushnotification_index_index>
<observers>
<Mbyte_Pushnotification>
<class>Mbyte_Pushnotification_Model_Observer</class>
<method>indexPreDispatch</method>
</Mbyte_Pushnotification>
</observers>
</controller_action_predispatch_pushnotification_index_index>
</events>
you could also write
<events>
<controller_action_predispatch_pushnotification_index_index>
<observers>
<Mbyte_Pushnotification>
<class>pushnotification/observer</class>
<method>indexPreDispatch</method>
</Mbyte_Pushnotification>
</observers>
</controller_action_predispatch_pushnotification_index_index>
</events>
if you named your module "pushnotification", which i assume.
According to magento define event depends should be
controller_action_predispatch_frontName_Controller_Youaction
it is define like:
Mage::dispatchEvent('controller_action_predispatch_' . $this->getFullActionName(),
array('controller_action' => $this));

Magento: Creating an event to extend customer creation in magento

So I am simply trying to create a hook into registrations predispatch event. This is what I have so far:
config.xml:
<events>
<controller_action_predispatch_customer_account_createpost>
<observers>
<mymodulename>
<class>mymodulename/observer</class>
<method>hookToAccountCreationBefore</method>
</mymodulename>
</observers>
</controller_action_predispatch_customer_account_createpost>
</events>
and the observer:
Model/Observer.php :
public function hookToAccountCreationBefore($observer) {
die('getting here');
}
So I go and do a registration and I see the controller_action_predispatch_customer_account_createpost event getting called in my event logs but its not calling my function.
Please help!
UPDATE:
The answer below worked perfectly for me. However, $observer->getEvent()->getCustomer() is getting NULL for me even though another observer is overriding the same exact event and this works fine. I've tried temporarily commenting out the observer config for the other extension and its still empty. Any ideas?
In your config.xml you could also do
config.xml:
<global>
<models>
<mymodulename>
<class>MyNamespace_MyModuleName_Model</class>
</mymodulename>
</models>
<events>
<controller_action_predispatch_customer_account_createpost>
<observers>
<mymodulename>
<type>singleton</type>
<class>mymodulename/observer</class>
<method>hookToAccountCreationBefore</method>
</mymodulename>
</observers>
</controller_action_predispatch_customer_account_createpost>
</events>
</global>
or
<global>
<events>
<controller_action_predispatch_customer_account_createpost>
<observers>
<mymodulename>
<type>singleton</type>
<class>MyNamespace_MyModuleName_Model_Observer</class>
<method>hookToAccountCreationBefore</method>
</mymodulename>
</observers>
</controller_action_predispatch_customer_account_createpost>
</events>
</global>
Maybe try with following Event
customer_register_success

magento customer_save_after model / observer not called, catch customer -> edit -> save function

I'm new on magento and trying to write little extension for it (magento 1.7).
I have created tab in customer->edit, it prints multiselect, thats ok, the problem is that i cant get in observer file to catch multiselect options before saving and save them to my custom table in database.
there is some code snippets:
app/code/local/Gone/Brands/etc/config.xml
<adminhtml>
<layout>
<updates>
<customertab>
<file>customertab.xml</file>
</customertab>
</updates>
</layout>
<events>
<customer_save_after>
<observers>
<brands_hide_manufacturers>
<type>model</type>
<class>Gone_Brands_Model_Observer</class>
<method>saveHideManufacturers</method>
</brands_hide_manufacturers>
</observers>
</customer_save_after>
</events>
</adminhtml>
app/code/local/Gone/Brands/Model/Observer.php
<?php
class Gone_Brands_Model_Observer
{
public function _construct()
{
echo "ssssssssssssssssssssssssssss";
echo "<script>alert('aaa');</script>";
}
public function saveHideManufacturers() {
echo "ssssssssssssssssssssssssssss";
echo "<script>alert('bbbb');</script>";
}
}
Maye there are other solutions how to catch form from customer->edit -> my created tab with custom field?
Thank you.
==================================================================================
Finally, four hours spent for this. Maybe this helps for someone else.
config.xml
customer_save_after -> change to -> adminhtml_customer_save_after
Now works.
Finally, four hours spent for this. Maybe this helps for someone else.
config.xml
customer_save_after -> change to -> adminhtml_customer_save_after
Now works.
In magento you doesn't link to a class with its full class name.. you must use the framework :
replace :
<class>Gone_Brands_Model_Observer</class>
by :
<class>gonebrands/observer</class>
"gonebrands" (or whatever) refers to your XML node defining your MODEL layer in your config.xml
Event definition must be inside "global" tag. Also
you don't need a _construct method in your observer class
<global>
<events>
<customer_save_after>
<observers>
<brands_hide_manufacturers>
<type>singleton</type>
<class>Gone_Brands_Model_Observer</class>
<method>saveHideManufacturers</method>
</brands_hide_manufacturers>
</observers>
</customer_save_after>
</events>
</global>

Why does my Magento observer get stuck in and endless loop?

My observer gets stuck in and endless loop. Why does it happen and how can I fix it?
config.xml:
<?xml version="1.0"?>
<config>
<global>
<models>
<shipmentsave>
<class>Company_Shipmentsave_Model</class>
</shipmentsave>
</models>
</global>
<adminhtml>
<events>
<sales_order_shipment_track_save_after>
<observers>
<shipmentsave>
<type>model</type>
<class>shipmentsave/observer</class>
<method>salesOrderShipmentTrackSaveAfter</method>
</shipmentsave>
</observers>
</sales_order_shipment_track_save_after>
<sales_order_shipment_save_after>
<observers>
<shipmentsave>
<type>model</type>
<class>shipmentsave/observer</class>
<method>salesOrderShipmentSaveAfter</method>
</shipmentsave>
</observers>
</sales_order_shipment_save_after>
</events>
</adminhtml>
<frontend>
<events>
<sales_order_shipment_save_after>
<observers>
<shipmentsave>
<type>singleton</type>
<class>shipmentsave/observer</class>
<method>salesOrderShipmentSaveAfter</method>
</shipmentsave>
</observers>
</sales_order_shipment_save_after>
</events>
</frontend>
</config>
Observer.php:
class Company_Shipmentsave_Model_Observer
{
public function salesOrderShipmentSaveAfter(Varien_Event_Observer $observer)
{
error_log("My observer called ....",0);
$shipment = $observer->getEvent()->getShipment();
$order = $shipment->getOrder();
$track = Mage::getModel('sales/order_shipment_track')
->setNumber('1231354564')
->setCarrierCode('localdelivery')
->setTitle('Aramex');
$shipment->addTrack($track);
$shipment->save();
return;
}
}
Your observer waits for a shipment to get saved, then saves a shipment, which causes it to receive another event (yadda yadda ad nauseum). You will need a way to either escape the loop or not have to save a shipment.
Can you move your event onto sales_order_shipment_save_before and then allow the normal shipment saving to take effect, or do you need the shipment to already have been saved to do your part of the logic?
If so, change the following line on your observer so that Magento uses it as a singleton:
<type>singleton</type> // changed from model
Then, create a variable in your class to track whether you've recursed yet. If so, then just return.
Alternatively, you could check to see if there are any tracking numbers already on the shipment and only save if there are not (and you add one). That will kill the recursion as well.
Let me know if one of those works for you.
Thanks,
Joe
I used
sales_order_shipment_save_after
and its working for me
Thanks :)

Resources