【问题标题】:Magento cms page rendering {{ }} variablesMagento cms 页面渲染 {{ }} 变量
【发布时间】:2011-06-28 10:02:00
【问题描述】:

magento 中的 {{ }} 变量在哪里被精确替换了?文件?

【问题讨论】:

    标签: templates variables magento content-management-system render


    【解决方案1】:

    看起来Mage_Cms_Block_Page::_toHtml() 和Mage_Cms_Block_Block::_toHtml() 调用Mage_Cms_Model_Template_Filter::filter(string)。这个类和多层次的父类通过几个函数来解析字符串。

    【讨论】:

      【解决方案2】:

      这些模板变量称为模板指令。每个都有不同的方法负责渲染它。例如,小部件指令

      {{widget ...}}
      

      在Mage_Widget_Model_Template_Filter 类上呈现widgetDirective 方法。

      class Mage_Widget_Model_Template_Filter extends Mage_Cms_Model_Template_Filter
      {
          ...
          public function widgetDirective($construction)
          {
          }
          ...
      }
      

      而 var 指令

      {{var ...}}
      

      由varDirective 方法处理

      class Mage_Core_Model_Email_Template_Filter extends Varien_Filter_Template
      {
          public function varDirective($construction)
          {
              ...
          }
      }   
      

      每个都在不同的类中。每当 Magento 想要添加指令时,它就会出现,它们扩展旧的过滤器类,并添加新的指令方法。然后,用于创建过滤器对象的类是可配置的。据我所知,Magento 需要在四种不同的上下文中进行模板指令变量替换。

      1. 目录内容

      2. CMS 页面内容

      3. CMS 静态块内容

      4. 通讯内容

      Magento 将用于此的过滤器类别名配置在

      global/catalog/content/template_filter
      global/cms/page/template_filter
      global/cms/block/template_filter
      global/newsletter/template_filter
      

      在您的所有 config.xml 文件中搜索<template_filter/>,您可以看到正在使用哪个类别名来实例化过滤器对象。 (您可以使用ack-grep -i 'template_filter' --xml $MAGENTO 或find $MAGENTO -type f -name '*.xml' -exec grep -Hn 'template_filter' {} \; 查找$MAGENTO 中包含该字符串的所有文件。

      【讨论】:

      • 不错的艾伦,听起来您一定对小部件进行了大量研究:D
      • 只是一个小修正,是(缺少tempLate的L),这是magento团队的一个错字。
      猜你喜欢
      • 2016-02-14
      • 1970-01-01
      • 1970-01-01
      • 2011-04-10
      • 2017-08-23
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      • 2012-04-22
      相关资源
      最近更新 更多