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

Magento Onepage成功转换跟踪设计模式,magento,Magento,我的目的是通过将第三方javascript(例如google analytics、optimizely、pricegrabber等)插入onepage success的页脚,通过多个渠道跟踪转换 我通过在local.xml中的checkout success节点内的footer引用中添加一个块来实现这一点,并且一切都正常工作 我的问题更多的是关于效率和可扩展性 我突然想到,最好将所有的块组合成一个块引用,然后在对各种相关模型的一次调用上使用各种方法,为每个转换跟踪脚本提供插入javascript

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

我通过在local.xml中的checkout success节点内的footer引用中添加一个块来实现这一点,并且一切都正常工作

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

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

转换跟踪可能依赖的一些常见数据示例(伪): 订单ID、订单总数、订单.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 -->
$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等

我想让这一切更易于管理,因此我的想法是:

  • 将所有模板文件合并到一个文件中
  • 开发帮助器类或库以将数据传递到转换模板
  • 目标包括

  • 扩展性
  • 最小模型调用
  • 最小方法调用
  • 问题 1.法师助手是最好的选择吗? 2.您是否可以为“helper”类推荐任何设计模式?
    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的情况下,性能的最大提高来自缓存块输出,默认情况下,布局描述符和处理程序会为您缓存
    所以仔细想想你能缓存什么 *css、js可以缩小和压缩 *您最需要的模板可能包含新信息,因为每个订单都不同,所以您无法缓存这些模板,您需要将新数据发送给服务提供商


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

    ,这是一个好的开始,但是有多个用例。其思想是提供一个接口,用于扩展和动态加载各种子类,以便在构建单个对象时提供可扩展性,该对象表示块将在编译时作用的数据。Anton,您对缓存有很好的理解和一些非常好的观点,尤其是关于缓存。其思想是为扩展和动态加载各种子类提供一个接口,以便在构建单个对象时提供可扩展性,该对象表示块将在编译时作用的数据。用于什么?所有已经存在于magento中的东西,创建您的抽象类,并让其他人扩展fo通用接口
    class MageIgniter_SiteTracker_Block_CustomTracking extends Mage_GoogleAnalytics_Block_Ga
    {
        protected function _getOrdersTrackingCode(){
           ....
        }
    }