当前位置: 首页 > 工具软件 > Mage+ > 使用案例 >

magento|Mage_GoogleAnalytics模块获取订单信息原理剖析

荣俊杰
2023-12-01

如上篇文章所述,magento|GTM代码及谷歌电子商务代码安装说明,安装电子商务代码的时候,需要在head里面获取到订单信息。那么如何在head中获取订单id并进一步获取订单的所有信息就成为一个难题。还好系统默认集成了一个叫做Mage_GoogleAnalytics的模块,该模块默认引入位置在head里面,也原生支持analytics的输出,所以只需要在此模块上另外增加需要的方法即可。

牵扯到的文件有以下几个:

模板输出文件:app\design\frontend\base\default\template\googleanalytics\ga.phtml

默认的成功页支付方法:app\code\core\Mage\Checkout\controllers\OnepageController.php

Block传值文件:app\code\core\Mage\GoogleAnalytics\Block\Ga.php

监听方法:app\code\core\Mage\GoogleAnalytics\Model\Observer.php

监听配置:app\code\core\Mage\GoogleAnalytics\etc\config.xml

流程如下:

1、OnepageController.php的275行中的success方法,启用监听事件,传递从session里面获取的最后一个订单id,监听事件名字为checkout_onepage_controller_success_action。

Mage::dispatchEvent('checkout_onepage_controller_success_action', array('order_ids' => array($lastOrderId)));

2、app\code\core\Mage\GoogleAnalytics\etc\config.xml配置文件中定义监听侦测事件,并定义处理监听事件的observer方法

<events>
            <checkout_onepage_controller_success_action>
                <observers>
                    <googleanalytics_order_success>
                        <class>googleanalytics/observer</class>
                        <method>setGoogleAnalyticsOnOrderSuccessPageView</method>
                    </googleanalytics_order_success>
                </observers>
            </checkout_onepage_controller_success_action>
          
            <checkout_multishipping_controller_success_action>
                <observers>
                    <googleanalytics_order_success>
                        <class>googleanalytics/observer</class>
                        <method>setGoogleAnalyticsOnOrderSuccessPageView</method>
                    </googleanalytics_order_success>
                </observers>
            </checkout_multishipping_controller_success_action>
        </events>

3、app\code\core\Mage\GoogleAnalytics\Model\Observer.php中setGoogleAnalyticsOnOrderSuccessPageView获取传递过来的订单id,并使用block的方法传递orderIds到block。

        $orderIds = $observer->getEvent()->getOrderIds();

        if (empty($orderIds) || !is_array($orderIds)) {
            return;
        }
        $block = Mage::app()->getFrontController()->getAction()->getLayout()->getBlock('google_analytics');
        if ($block) {
            $block->setOrderIds($orderIds);
        }

4、在block中获取orderIds,并根据orderId获取到订单的金额,订单号及订单中的产品每一项数据:

$orderIds = $this->getOrderIds();

5、在app\design\frontend\base\default\template\googleanalytics\ga.phtml中调用block的方法,输出电子商务统计的代码即可:

<script type="text/javascript">
    dataLayer = [{
        <?php echo $this->_getOrdersTrackingCodeUniversalGtm();?>
    }];
</script>

 

 类似资料: