Виды tpl-шаблонов и включение php-кода в шаблон

Шаблоны в UMI.CMS есть двух видов (рассматриваем только tpl): шаблоны страниц и шаблоны модулей.

Первые - это все, что лежит  в  корне папки /tpls/content/ Они отвечают за вывод блоков информации на странице и с ними все понятно с первого взгляда.

А  вот за сами блоки отвечают шаблоны модулей и там есть несколько интересных моментов. Выглядят они так:

$FORMS = array();

$FORMS = <<ENd

некий код

END;

?>

Строка, ограниченная маркером END - это т.н. here-документ, появившийся в php4 способ записи многострочных констант.

Ограничитель END может быть любым алфавитно-цифровым идентификатором, не встречающимся в тексте here-документа в виде отдельной строки. Синтаксис накладывает два ограничения на here-документы:

  • после <<
  • завершающая строка END; должна оканчиваться точкой с запятой, после которой до конца строки не должно быть никаких инструкций, а начинаться она должна с первого символа строки.

А теперь обещанное включение php.

Если в тексте here-документа встречается некая переменная, то она будет интерполирована

$lang = cmsController::getInstance()->getCurrentLang()->getPrefix();

$FORMS = array();

$FORMS = <<
Текущий язык {$lang}
Выведет: Текщий язык ru

END;

Эту особенность можно использовать для включения в шаблон результатов простейших операций.
Например, определять с какой страницы пришел пользователь и выводить "Вы ввели неправильное имя или пароль..." только в случае соответствующего http_refferer
В общем и целом - это средство следует применять весьма ограниченно, т.к. это затрудняет читабельность кода, и засоряет глобальную область. Рекомендуется всегда использовать кастомные макросы