Magento Onepage成功转换跟踪设计模式
我的目的是通过将第三方javascript(例如google analytics、optimizely、pricegrabber等)插入onepage success的页脚,通过多个渠道跟踪转换 我通过在local.xml中的checkout success节点内的footer引用中添加一个块来实现这一点,并且一切都正常工作 我的问题更多的是关于效率和可扩展性 我突然想到,最好将所有的块组合成一个块引用,然后在对各种相关模型的一次调用上使用各种方法,为每个转换跟踪脚本提供插入javascript所需的数据 转换跟踪可能依赖的一些常见数据示例(伪): 订单ID、订单总数、订单.LineItem.Name(foreach)等 目前,对于每个脚本,我都调用了相应的模型,将客户的上一个订单id作为加载值传递,并调用get()将返回值分配给一个变量,然后遍历数据以使这些值与给定第三方服务的期望值相匹配 签出完成后,所有数据都应提取一次 每个第三方服务可能需要不同格式的不同数据 以下是一个转换跟踪模板文件的示例,该模板文件在签出成功的页脚处加载。Magento Onepage成功转换跟踪设计模式,magento,Magento,我的目的是通过将第三方javascript(例如google analytics、optimizely、pricegrabber等)插入onepage success的页脚,通过多个渠道跟踪转换 我通过在local.xml中的checkout success节点内的footer引用中添加一个块来实现这一点,并且一切都正常工作 我的问题更多的是关于效率和可扩展性 我突然想到,最好将所有的块组合成一个块引用,然后在对各种相关模型的一次调用上使用各种方法,为每个转换跟踪脚本提供插入javascript
$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 -->
$order=Mage::getModel('sales/order')->loadByIncrementId(Mage::getSingleton('checkout/session')->getLastRealOrderId());
$amount=number\u格式($order->getGrandTotal(),2);
$customer=Mage::helper('customer')->getCustomer()->getData();
?>
弹出电子邮件=“”;
弹出菜单\订单\编号=“”;
只有一段这样的代码并没有什么大不了的,但我们正在用许多不同的第三方服务做类似的事情
Pricegrabber就是一个简单的例子。
更复杂的跟踪服务需要一个逗号分隔的列表,其中包含所有产品名称、id、价格、类别、订单id等
我想让这一切更易于管理,因此我的想法是:
3.为什么您选择的设计模式最适合这个实例?您可以创建一个自定义模块来扩展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>
了解Magento听起来很有趣我建议你从Alan Storm的博客和Magento知识库开始 事实上,您不需要在已经设计好的框架之上再添加一个模式,最简单的方法和可维护的方法是遵循现有的模式,在您的情况下,它将是:
- 请接分机
- 由服务提供商制作模板
- 按提供程序生成布局描述符
- 用一个块将它们绑在一起或使用多个块(以便更易于管理)
- 无论您做什么,在Magento的情况下,性能的最大提高来自缓存块输出,默认情况下,布局描述符和处理程序会为您缓存
如果您不添加新的业务逻辑,那么我建议您以块的形式编写输出方法,因为大多数时候您只是在这里用数据填充javascript变量,不需要计算任何新的,这是一个好的开始,但是有多个用例。其思想是提供一个接口,用于扩展和动态加载各种子类,以便在构建单个对象时提供可扩展性,该对象表示块将在编译时作用的数据。Anton,您对缓存有很好的理解和一些非常好的观点,尤其是关于缓存。其思想是为扩展和动态加载各种子类提供一个接口,以便在构建单个对象时提供可扩展性,该对象表示块将在编译时作用的数据。用于什么?所有已经存在于magento中的东西,创建您的抽象类,并让其他人扩展fo通用接口
class MageIgniter_SiteTracker_Block_CustomTracking extends Mage_GoogleAnalytics_Block_Ga
{
protected function _getOrdersTrackingCode(){
....
}
}