Автоматическое назначение шаблонов из шаблона, стоящего на два уровня выше
(из родителя родительского шаблона)

Описанный в этой статье способ автоматического назначения шаблонов осуществляется с помощью параметра field.

Применение параметра field в block-данных

Ниже показан пример дескрипторов шаблонов для сборки страниц фотоальбома (сами шаблоны не приведены). Перечеркнутыми изображены строки, в которых параметр field не используется. Сразу скажем, что вариант с перечеркнутыми строками будут работать точно так же, как и вариант с дополнительными строками. Для чего же тогда нужен параметр field? Рассмотрим шаблоны подробнее:

photoAlbum.tdd
<?php
    $types[1]="block template('menu') option('delegate')";
    $types[2]="block template('box') option('new')";
    $types[2]="block template('box') option('new') field2('photos','new')";
?>

box.tdd
<?php
    $types[1]="varchar(255)";// Заголовок
    $types[2]="block template('photos') option('new')";
    $types[2]="block";
?>

photos.tdd
<?php
    $types[1]="file maxWidth(800) maxHeight(800)"; //Фото
    $types[2]="varchar(255)"; // Подпись
    $params['multi-record'] = true;
?>

Шаблон photoAlbum служит корневым шаблоном. Он состоит из блока, в который автоматически будет назначен, а на каждой следующей странице автоматически делегироваться, навигационный блок с шаблоном menu (не показан).

Во второй блок этого корневого шаблона будет автоматически назначаться блок-контейнер с шаблоном box (см. снимок). У этого шаблона есть заголовок, и в него будет автоматически назначаться многозаписный шаблон photos (галерея фотографий). Собственно из-за шаблона box и весь сыр-бор.

Проблема в том, что шаблон box в первом варианте (перечеркнутый код в файле box.tdd) хорошо использовать только в фотоальбоме. При использовании этого шаблона на страницах, не связанных с фотографиями, будет всегда назначаться шаблон фотогалереи (photos), и его придется каждый раз заменять.

Во втором варианте (неперечеркнутые коды) такой проблемы нет, так как параметры данных шаблона box управляются через корневой блок. Во корневом шаблоне задается шаблон, который будет вложен в блок шаблоном box. В зависимости от назначения корневого шаблона можно автоматически назначать в блоки с шаблоном box различные шаблоны, например, шаблон для статей.

Когда шаблон используется, как универсальный, то
в самом шаблоне делать настройки для вложенных блоков нежелательно.
Такие настройки лучше делать в родительском шаблоне.

 

Применение параметра field в page-данных

Параметр field особенно полезен с данными типа page, так как обычно на всех страницах сайта используется один и тот же корневой шаблон.

В представленном ниже комплекте шаблонов корневой шаблон uni-page мы будем использовать для всех страниц сайта. В его первое поле будет всегда делегироваться навигационный блок с шаблоном menu.

uni-page.tdd
<?php
    $types[1] = "block template('menu') option('delegate')";
    $types[2] = "block template('home') option('new')";
?>

uni-page.tpl
<?php echo "
    <div>$dat[1]</div>
    <div>$dat[2]</div>
"; ?>

menu.tdd
<?php
    $types[1]="page template('uni-page') option('new') field2('about', 'new')";
    $types[2]="page template('uni-page') option('new') field2('products', 'new')";
?>

menu.tpl
<?php echo "
    <a href='?page=$dat[1]'>О компании</a>
    <a href='?page=$dat[2]'>Продукция</a>
"; ?>

В самом начале сборки сайта (на странице 1) назначаем шаблон uni-page в качестве корневого шаблона. В первом блоке окажется меню с двумя ссылками: "О компании" и "Продукция". Во второй блок будет назначен шаблон для главной страницы home.

Затем щелкаем по ссылке "О компании", откроется готовая страница с тем же главным меню. Но во второй блок, на этот раз, будет назначен шаблон about. Это произошло потому, что второму блоку шаблон по умолчанию был задан в шаблоне более высокого уровня, а именно, в меню (с помощью параметра field).

Шаблон по умолчанию, заданный в родительском шаблоне,
имеет меньший приоритет, чем шаблон,
заданный в родителе родительского шаблона.

Аналогично, щелкаем по ссылке "Продукция", откроется готовая страница с менюшкой и блоком, в который автоматически будет назначен шаблон products.

См. также