3.2. Шаблоны

Файлы шаблонов имеют расширение .php. Шаблон страницы, используемый для всех страниц сайта, называется template (файл template.php).

Для конкретной страницы сайта можно задать отдельный шаблон, указав название шаблона в свойстве страницы @@template. Название шаблона указывается без расширения файла.

Текст шаблона должен быть в той же кодировке, которая указана в настройках движка, опция engine.charset (по умолнчанию это UTF-8).

Для работы с шаблонами в системе создается экземпляр класса ztemplate. В этот же момент происходит подключение файла functions.php используемой темы сайта, где можно создать сайдбары, виджеты, функции и классы, которые в дальнейшем могут быть использованы в шаблоне страницы.

[Замечание]Замечание

На момент подключения файла functions.php ещё не известно, какая страница будет отображена.

Подключение шаблона производится в контексте объекта ztemplate, поэтому к открытым свойствам и методам класса можно обращаться через переменную $this.

Пример 3.1. Использование объекта ztemplate в модуле zmodule_allpages.

К шаблону можно обращаться из модулей. Доступ к объекту шаблона в этом случае можно получить через метод zengine::template(). Например, модуль zmodule_allpages использует объект шаблона для рендеринга списка страниц и замены содержимого конечной страницы полученным результатом.

ob_start();
zengine::template()->setPage($zpage);
foreach ($pages as $pagepath) {
    zengine::template()->addPage(zengine::getPage($pagepath));
}
zengine::template()->locateTemplate(
    array($this->getParam('template', 'listpages'), 'page'),
    true);
$output = ob_get_contents();
ob_end_clean();

zengine::template()->setPageHtml($output);

Для работы этого модуля в шаблоне необходимо вызывать функцию z_html(). Для обычных страниц в месте вызова этой функции будет подключена часть шаблона из файла page.php.



Пример 3.2. Получение свойства страницы в шаблоне

Для получения значения свойства используется метод getProperty() объекта страницы. Допустим, у страницы указаны следующие свойства:

@@_myprop=Какой-то текст
@@_myarr[]=Первый пункт
@@_myarr[]=Второй пункт

Например, в шаблоне для получения значений свойств текущей страницы можно использовать следующий код:

<?php
$myprop = z_page()->getProperty('_myprop');
var_dump($myprop);
// string(26) "Какой-то текст"

$myarr = z_page()->getProperty('_myarr');
var_dump($myarr);
//array(2) {
//  [0]=>
//  string(23) "Первый пункт"
//  [1]=>
//  string(23) "Второй пункт"
//}

$mynonexists = z_page()->getProperty('_mynotexists');
var_dump($mynonexists);
// NULL

$mynonexists = z_page()->getProperty('_mynotexists', "default");
var_dump($mynonexists);
// string (7) "default"
?>