Magento Onepage成功转换跟踪设计模式

时间:2012-12-06 04:15:16

标签: magento

我的目的是通过将第三方javascript(例如google analytics,optimizely,pricegrabber等)插入到单页成功的页脚中来跟踪多个渠道的转化。

我通过在local.xml中的checkout成功节点内的页脚引用中添加一个块来完成此操作,并且一切正常。

我的问题更多是关于效率和可扩展性。

我想到最好将所有块组合成单个块引用,然后使用各种方法对单个调用各种相关模型进行操作,以提供插入到javascript中所需的数据每个转化跟踪脚本。

转化跟踪可能依赖的常见数据的一些示例(伪): 订单ID,订单总计,Order.LineItem.Name(foreach)等​​

目前,对于每个脚本,我调用了相应的模型,将客户的最后订单ID作为加载值传递,并调用get()将返回值分配给变量,然后迭代数据到将这些值与给定第三方服务的期望相匹配。

结账时,所有数据都应拉一次 每个第三方服务可能会有不同格式的不同数据

以下是其中一个转化跟踪模板文件的示例,该文件在结帐成功的页脚加载。

$order = Mage::getModel('sales/order')->loadByIncrementId(Mage::getSingleton('checkout/session')->getLastRealOrderId());
$amount = number_format($order->getGrandTotal(),2);
$customer = Mage::helper('customer')->getCustomer()->getData();
?>

<script type="text/javascript">
    popup_email = '<?php echo($customer['email']);?>';
    popup_order_number = '<?php echo $this->getOrderId() ?>';
    </script>
<!-- PriceGrabber Merchant Evaluation Code -->
<script type="text/javascript" charset="UTF-8" src="https://www.pricegrabber.com/rating_merchrevpopjs.php?retid=<something>"></script>
<noscript><a href="http://www.pricegrabber.com/rating_merchrev.php?retid=<something>" target=_blank>
    <img src="https://images.pricegrabber.com/images/mr_noprize.jpg" border="0" width="272" height="238" alt="Merchant Evaluation"></a></noscript>
<!-- End PriceGrabber Code -->

只有一段这样的代码并不是什么大不了的事,但我们正在用许多不同的第三方服务做类似的事情。

Pricegrabber是一个更简单的例子。 更复杂的跟踪服务需要以逗号分隔的列表中包含所有产品名称,ID,价格,类别,订单ID等。

我想让它更易于管理,所以我的想法是:

  1. 将所有模板文件合并为一个文件
  2. 开发帮助程序类或库以将数据传递到转换模板
  3. 目标包括

    1. 扩展
    2. 最小型号召唤
    3. 最小方法调用
    4. 问题  1.法师助手是最佳选择吗?  2.您可以为“助手”课程推荐任何设计模式吗?  3.为什么你选择的设计模式最适合这个实例?

2 个答案:

答案 0 :(得分:0)

您可以创建一个扩展Google Analytics的自定义模块

在/app/code/local/MageIgniter/SiteTracker/etc/config.xml

<config>
    <modules>
        <MageIgniter_SiteTracker>
            <version>0.1.0</version>
        </MageIgniter_SiteTracker>
    </modules>
    <global>
        <blocks>
            <googleanalytics>
                <rewrite>
                    <ga>MageIgniter_SiteTracker_Block_CustomTracking</ga>
                </rewrite>
            </googleanalytics>
        </blocks>
    </global>
</config>

然后根据需要修改此方法,请参阅app / code / core / Mage / GoogleAnalytics / Block / Ga.php

在/app/code/local/MageIgniter/SiteTracker/Block/CustomTracking.php

class MageIgniter_SiteTracker_Block_CustomTracking extends Mage_GoogleAnalytics_Block_Ga
{
    protected function _getOrdersTrackingCode(){
       ....
    }
}

答案 1 :(得分:0)

通过了解Magento听起来很有趣我建议你从Alan Storm的博客和magento知识库开始

现实情况是,您不需要在已经设计的框架之上采用其他模式,最简单的方法和可维护的方法是遵循现有模式,在您的情况下,它将是:

  • 制作您的扩展程序
  • 按服务提供商制作模板
  • 按提供商制作您的布局描述符
  • 用一个块将它们绑在一起或使用多个块(以便更易于管理)
  • 无论你做什么,Magento来自缓存你的块输出和布局描述符以及处理程序默认为你缓存的性能最大提升

所以想一想你可以缓存什么  * css,js可以缩小和压缩  *您最需要的模板可能包含新信息,因为每个订单都不同,因此您无法缓存这些模板,并且您需要将新数据发送给服务提供商

如果你没有添加新的业务逻辑,那么我建议你用块来编写你的输出方法,因为大多数时候你只是在这里用数据填充javascript变量而且不需要计算任何新的