我的目的是通过将第三方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.为什么你选择的设计模式最适合这个实例?
答案 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)
现实情况是,您不需要在已经设计的框架之上采用其他模式,最简单的方法和可维护的方法是遵循现有模式,在您的情况下,它将是:
所以想一想你可以缓存什么 * css,js可以缩小和压缩 *您最需要的模板可能包含新信息,因为每个订单都不同,因此您无法缓存这些模板,并且您需要将新数据发送给服务提供商
如果你没有添加新的业务逻辑,那么我建议你用块来编写你的输出方法,因为大多数时候你只是在这里用数据填充javascript变量而且不需要计算任何新的