Эти переменные шаблона называются директивами шаблона.У каждого есть свой метод, который отвечает за его рендеринг.Например, директива виджета
{{widget ...}}
визуализируется методом widgetDirective
в классе Mage_Widget_Model_Template_Filter
.
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
, содержащие эту строку).