i write custom code for magento to treck utm tags in url, and if order was placed i need to save it to database with referrer url. That is my code:
<controller_action_predispatch>
<observers>
<refersource>
<type>singleton</type>
<class>refersource/observer</class>
<method>controllerActionPredispatch</method>
</refersource>
</observers>
</controller_action_predispatch>
In this observer i'll check if utm tag is present in url , if so i save tags and referr url to customer session.
protected $_allowed_tags = array('utm_source','utm_medium','utm_term','utm_content','utm_campaign','refer_url');
public function controllerActionPredispatch($observer)
{
$params = Mage::app()->getRequest()->getParams();
$reffer_url = Mage::helper('core/http')->getHttpReferer();
if($reffer_url && strstr($reffer_url,'mysite') === false){
$utm_exist = false;
if ((isset($params['utm_source']) && $params['utm_source']) ||
(isset($params['utm_medium']) && $params['utm_medium']) ||
(isset($params['utm_content']) && $params['utm_content']) ||
(isset($params['utm_campaign']) && $params['utm_campaign'])
) {
$utm_exist = true;
}
if($utm_exist){
$params['refer_url'] = $reffer_url;
Mage::getSingleton('customer/session')->setReferrerData(serialize($params));
}
}
}
The next observer check if order was placed and save data to order.
<sales_order_place_after>
<observers>
<refersource>
<type>singleton</type>
<class>refersource/observer</class>
<method>salesOrderPlaceAfter</method>
</refersource>
</observers>
</sales_order_place_after>
public function salesOrderPlaceAfter($observer)
{
$referrer_data = unserialize(Mage::getSingleton('customer/session')->getReferrerData());
if($referrer_data){
$order = $observer->getEvent()->getOrder();
if($referrer_data && is_array($referrer_data)){
foreach($referrer_data as $tag=>$value){
if(in_array($tag,$this->_allowed_tags)){
$order->setData($tag,$value);
}
}
$order->save();
}
Mage::getSingleton('customer/session')->unsReferrerData();
}
}
Needed filed already created in sales_flat_order. All works fine ,but have some problems. When we see in google analytics we see example about 50 orders which did with this utm tags and see referrer urls. But in database we see only 2-4 orders with utm tags information.
can anybody explain why this is happening? thank you!