3

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

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

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

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

转化跟踪可能依赖的一些常见数据示例(伪):Order ID、Order Total、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. 开发帮助类或库以将数据传递到转换模板

目标包括

  1. 可扩展性
  2. 最少的模型调用
  3. 最少的方法调用

问题 1. 法师助手是最好的选择吗?2. 对于“帮助”类,您有什么可以推荐的设计模式吗?3. 为什么你选择的设计模式最适合这个实例?

4

2 回答 2

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(){
       ....
    }
}
于 2012-12-06T10:52:42.080 回答
0

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

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

  • 做你的扩展
  • 由服务提供商制作您的模板
  • 通过提供者制作您的布局描述符
  • 将它们与一个块联系在一起或使用多个块(更易于管理)
  • 无论您做什么,在 Magento 的情况下,性能的最大收益来自缓存您的块输出,布局描述符和处理程序默认为您缓存

因此,请考虑您可以缓存的内容 * css、js 可以被缩小和压缩 * 您最需要的模板很可能包含新信息,因为每个订单都不同,因此您无法缓存这些内容,您需要将新数据发送给服务提供商

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

于 2012-12-06T11:01:41.510 回答