【发布时间】:2011-06-28 10:02:00
【问题描述】:
magento 中的 {{ }} 变量在哪里被精确替换了?文件?
【问题讨论】:
标签: templates variables magento content-management-system render
magento 中的 {{ }} 变量在哪里被精确替换了?文件?
【问题讨论】:
标签: templates variables magento content-management-system render
看起来Mage_Cms_Block_Page::_toHtml() 和Mage_Cms_Block_Block::_toHtml() 调用Mage_Cms_Model_Template_Filter::filter(string)。这个类和多层次的父类通过几个函数来解析字符串。
【讨论】:
这些模板变量称为模板指令。每个都有不同的方法负责渲染它。例如,小部件指令
{{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 需要在四种不同的上下文中进行模板指令变量替换。
目录内容
CMS 页面内容
CMS 静态块内容
通讯内容
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 中包含该字符串的所有文件。
【讨论】: