XTemplate для программистов
Использование системы XTemplate, определение тегов и использование строк
Те, кто знаком с созданием или модификацией шаблонов Cotonti, наверняка видели и использовали теги шаблонов. Теги - это короткие фрагменты кода, которые при анализе XTemplate заменяются блоком HTML-кода. Это гарантирует, что ваш файл шаблона содержит только HTML-код. Любой сгенерированный PHP код обрабатывается плагином и анализируется с использованием тега.
При разработке плагина важно знать, как определять теги и условные блоки с помощью системы XTemplate.
Раньше большинство плагинов использовали устаревший способ получения HTML для анализа и отображения.
Хотя использование XTemplate и вашего собственного файла шаблона - гораздо более приятный способ создания вашего плагина, вы все равно можете использовать классический способ для автономных плагинов.
Вы делаете это, используя переменные
$plugin_title, $plugin_subtitle, $plugin_body.
Они автоматически присваиваются тегам {PLUGIN_TITLE}, {PLUGIN_SUBTITLE} и {PLUGIN_BODY}.
В этом случае вам не нужно создавать свой собственный файл шаблона (и вы можете опустить каталог tpl).
Cotonti вместо этого будет использовать plugin.tpl для скина(темы основного шаблона).
Итак, вы хотите использовать свой собственный файл шаблона. Вы начинаете с определения файла шаблона как нового объекта XTemplate. Правильно, система XTemplate - это объектно-ориентированный фрагмент кода. После того, как вы создали новый объект XTemplate, вы можете использовать набор методов (функций), предоставляемых классом XTemplate. Мы будем использовать только два из них: assign() и parse(). Сначала мы создаем новый объект XTemplate:
$t = new XTemplate(‘путь/к/файлу.tpl’);
Мы используем '$t' в качестве имени переменной объекта XTemplate, но вы можете использовать любое имя переменной, которое вам нравится.
Путь/к/файлу.tpl - это путь к файлу шаблона из корневой папки Cotonti.
Хотя это работало бы совершенно нормально, это не очень гибкий способ определения файла шаблона. Поэтому вместо этого мы будем использовать функцию cot_tplfile(), вот так:
$t = new XTemplate(cot_tplfile('pluginname', 'plug'));
Первый параметр - это имя файла без расширения. Второму параметру должно быть присвоено значение 'plug', поскольку мы имеем дело с плагином.
Другими возможными значениями являются 'module' и 'core'.
Функция cot_tplfile() найдет правильный путь к файлу шаблона.
Имя файла всегда должно начинаться с pluginname.
Если вы хотите использовать несколько файлов шаблонов, вам следует использовать такие имена файлов: pluginname.secondary.tpl.
Не забудьте опустить расширение при использовании cot_tplfile().
Следующим шагом будет присвоение некоторых тегов вашему файлу шаблона.
Мы делаем это с помощью метода assign() для нашего объекта XTemplate:
$t->assign();
Метод assign() может принимать отдельные теги или массив тегов:
$t->assign('SINGLE_TAG', '<p>Piece of HTML</p>');
$t->assign(array(
'TAG_ONE' => '<p>Piece of HTML</p>',
'TAG_TWO' => $somevariable
));
Как вы можете видеть, очень просто назначить кучу тегов контенту, сгенерированному на PHP.
Хотя это хороший способ реализовать шаблон проектирования MVC, он все же не очень гибкий.
Что делать, если вы хотите отобразить несколько строк контента из вашей базы данных?
XTemplate использует HTML-комментарии и метод parse(), чтобы разрешить это.
Допустим, вы только что выполнили sql-запрос, чтобы получить все страницы.
Вероятно, вы будете использовать цикл while для просмотра строк.
Рассмотрим этот код:
while($row = $sql->fetch())
{
$t->assign(array(
'PAGE_ROW_ID' => $row['page_id'],
'PAGE_ROW_TITLE' => $row['page_title']
));
}
Это приведет к переопределению тегов каждый раз, когда мы проходим цикл while, и приведет к тому, что тегу будет присвоено значение последней строки. Чтобы предотвратить это, нам нужно принудительно проанализировать теги непосредственно после их определения. Это достигается с помощью метода parse().
$t->parse();
Метод parse() принимает один параметр: код блока. Код блока - это уникальный код, который помещается внутри файла шаблона в виде HTML-комментария. У него всегда есть BEGIN | НАЧАЛО и END | КОНЕЦ, вот так:
<!-- BEGIN: BLOCK_CODE --> ...your HTML-code .... <!-- END: BLOCK_CODE -->
Возможно, вы заметили, что каждый файл шаблона Cotonti начинается и заканчивается таким тегом, эффективно определяющим весь документ как блок. Обычно это основной блок, но вы можете использовать другой, если действительно хотите.
В PHP-коде плагина мы теперь добавим метод parse() в цикл while:
while($row = $sql->fetch())
{
$t->assign(array(
'PAGE_ROW_ID' => $row['page_id'],
'PAGE_ROW_TITLE' => $row['page_title']
));
$t->parse('MAIN.PAGE_ROW');
}
Блок, который мы только что определили, называется ‘PAGE_ROW’, но поскольку он должен использоваться внутри основного блока, мы добавляем к имени блока имя родительского блока и точку, чтобы разделить их. Теперь наш файл шаблона может выглядеть следующим образом:
<!-- BEGIN: MAIN -->
<h1>{SINGLE_TAG}</h1>
<!-- BEGIN: PAGE_ROW -->
<p>{PAGE_ROW_TITLE}</p>
<!-- END: PAGE_ROW -->
<!-- END: MAIN -->
Если вы не хотите или не можете использовать основной блок, вы можете заменить его другим кодом. Однако для этого потребуется выполнить еще один синтаксический анализ в конце кода плагина. ОСНОВНОЙ блок автоматически анализируется Cotonti, но любые другие блоки должны быть проанализированы вручную вашим плагином. Просто снова вызовите метод parse и, наконец, выведите блок (для standalone автономного использования):
$t->parse('ALTERNATIVE');
$t->out('ALTERNATIVE'); // Only for standalone
Лучше всего сделать это прямо перед конечным тегом PHP.
Author: GHengeveld
translate: webitproff