我为 magento 编写自定义代码以跟踪 url 中的 utm 标签,如果下订单,我需要将其保存到带有引用 url 的数据库中。那是我的代码:
<controller_action_predispatch>
<observers>
<refersource>
<type>singleton</type>
<class>refersource/observer</class>
<method>controllerActionPredispatch</method>
</refersource>
</observers>
</controller_action_predispatch>
在这个观察者中,我将检查 url 中是否存在 utm 标签,如果存在,我将标签和引用 url 保存到客户会话。
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));
}
}
}
下一个观察者检查是否下订单并将数据保存到订单。
<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();
}
}
已在 sales_flat_order 中创建需要的文件。一切正常,但有一些问题。当我们在谷歌分析中看到时,我们看到了大约 50 个使用这个 utm 标签的订单的例子,并看到了引荐来源网址。但在数据库中,我们只看到 2-4 个带有 utm 标签信息的订单。
谁能解释为什么会这样?谢谢你!