 
Комплекты шаблонов
При назначении очередного шаблона выводится список всех шаблонов, находящихся папке templates.
Однако, было бы удобнее видеть в списке только те шаблоны, которые действительно могут понадобиться.
В системе Blox можно управлять списками шаблонов. Это можно делать, например, в комплектах шаблонов, предназначенных для реализации какой-то определенной задачи.
Кроме того, все файлы шаблонов до сих пор мы просто помещали в папку templates. При большом числе файлов, работать будет неудобно — файлы лучше разложить по папкам.
Вложенные шаблоны во вложенные папки!
Как управлять списками шаблонов, рассмотрим на примере комплекта шаблонов для интернет-магазина.
Допустим, что к комплекте имеется головной компоновочный шаблон shop. В блок с этим шаблоном вкладываются все остальные блоки интернет-магазина.
Поместим файлы shop.tdd и shop.tpl, как обычно, в папку templates.
Остальные файлы комплекта мы положим в папку templates/shop/. Однако, после назначения шаблона shop этих файлов в списке мы не увидим, потому что по умолчанию, в список разрешенных шаблонов блока попадают шаблоны той же папки, что и шаблон родительского блока.
Чтобы назначить шаблон, находящийся в другой папке относительно шаблона текущего блока,
нужно указать путь к нему.
То есть, сначала нужно направить в нужную папку. После этого можно работать с шаблонами внутри папки, как обычно.
Вопрос с папками можно решить, указав в параметре templates относительный путь к шаблону.
shop.tdd
$types[1]="block template('shop/nav')";
$types[2]="block template('shop/goods')";
Если после назначения шаблона shop, мы попытаемся назначить шаблон первому блоку шаблона shop, мы увидим в списке возможных шаблонов все шаблоны из папки templates, плюс строчку shop/nav.
Хотя шаблон shop/nav и находился в другой папке, он попал в список, потому что был указан явно.
Чтобы управлять списками шаблонов более гибко, в block-данных используются два параметра: allow и disallow.
Но сначала сделаем небольшое отступление, и разберемся, как записывать пути к шаблонам.
Абсолютные и относительные пути к шаблонам
При указании в дескрипторе путей к шаблонам или к папкам, в которых лежат шаблоны, применяется стиль Unix.
Применительно к шаблонам, нужно сделать несколько оговорок:
- Корневой папкой считается папка templates (сама она при записи не указывается, так как она может находиться вообще на другом сайте).
- Так как при указании шаблонов, расширение tpl не используется, то может возникнуть путаница между именами папок и файлов. По этой причине, если нужно путь закончить именем папки, пишите в конце символ '/'. Это будет интерпретировано, как все шаблоны, находящиеся в этой папке. Если символа '/' на конце нет, то это будет интерпретировано как путь к конкретному шаблону.
Примеры путей смотрите ниже.
Параметры allow и disallow
Параметр allow применяется для указания разрешенных шаблонов.
Параметр disallow применяется для указания неразрешенных шаблонов среди уже разрешенных.
Познакомимся с этими параметрами поближе на примере комплекта шаблонов для интернет-магазина.
Головной шаблон нашего интернет-магазина — shop. Компоновка этого шаблона следующая — слева находится панель навигации (шаблон nav), справа — товарный блок (шаблон goods). Шаблон goods, в свою очередь, состоит из двух блоков: блок с информацией о выбранных товарах/товаре (шаблон items) и блок со списком товаров, обычно покупаемых с данным товаром (шаблон complements).
Добавим еще один шаблон, не относящийся непосредственно к комплекту интернет-магазина. Это шаблон ads, предназначенный для рекламного блока.
Структура файлов и папок:
• templates/
• shop.tdd контейнер интернет-магазина
• shop.tpl
• shop/
• nav.tdd панель навигации
• nav.tpl
• goods.tdd контейнер для блоков с информацией о товарах
• goods.tpl
• goods/
• items.tdd Информация о товарах
• items.tpl
• complements.tdd Информация о сопутствующих товарах
• complements.tpl
• ads.tdd Шаблон для рекламы
• ads.tpl
Примеры
-
shop.tdd
$types[1]="block allow('shop/')";
$types[2]="block allow('shop/')";
При попытке назначить шаблон первому блоку из дескриптора, в списке мы увидим только шаблоны из папки shop (то есть, nav и goods).
-
Шаблоны на более глубоком уровне можно организовать аналогично.
goods.tdd
$types[1]="block allow('goods/')";
$types[2]="block allow('goods/')";
Путь также указывается относительно текущей папки.
-
Можно указывать не папки, а конкретные шаблоны. Тогда в списке на назначение будет единственный шаблон
goods.tdd
$types[1]="block allow('goods/items')";
$types[2]="block allow('goods/complements')";
-
В последнем примере шаблоны имеет смысл сделать шаблонами по умолчанию.
goods.tdd
$types[1]="block template('goods/items') option('new') allow('goods/items')";
$types[2]="block template('goods/complements') option('new') allow('goods/complements')";
Для этого примера существует короткая форма записи:
goods.tdd
$types[1]="block('goods/items', 'new', 'allow'";
$types[2]="block('goods/complements', 'new', 'allow')";
-
Попробуем добавить блок с рекламой в товарный блок
goods.tdd
$types[3]="block allow('../ads')";
// Перейти к родительской папке текущей папки файла goods.tdd и взять шаблон ads
Путь к этому шаблону можно указать с начала:
goods.tdd
$types[3]="block allow('/ads')"; // Шаблон ads находиться в корневой папке
-
Разрешить шаблоны из двух папок.
$types[2]="block allow('/','goods/complements')";
-
Применение параметра disallow аналогичное, только он, наоборот, отменяет возможность назначить шаблоны из указанного в нем перечня шаблонов или папок.
Параметр disallow можно применять совместно с параметром allow, причем, параметр disallow имеет приоритет над параметром allow.
$types[3]="block allow('/') disallow(/shop)";
// Разрешить все шаблоны из папки templates, кроме шаблона shop из этой же папки
Совет
В самом начале сборки страницы, то есть, при назначении внешнего шаблона, шаблоны для вложенных блоков являются по сути лишними. Их лучше поместить в отдельную папку, например: subtemplates:
• templates/
• main1.tdd одноколоночный внешний шаблон
• main1.tpl
• main2.tdd двухколоночный внешний шаблон
• main2.tpl
• subtemplates/
все остальные шаблоны
Теперь в начале создания страницы мы будем выбирать только между двумя шаблонами main1 и main2.
Пути в файлах css, js
При использовании css и js файлов с именем шаблона, пути из этих файлов указываются как обычно, то есть указывается относительный путь от css-файла к нужном файлу.
Файлы:
templates/shop/goods.tpl шаблон
templates/shop/goods.css его стилевой файл
templates/shop/goods/cart.png изображение корзины
goods.css
.cart {background: url(goods/cart.png) no-repeat}
Если же стиль записывается в файле шаблона, то путь к картинке придется указать от корня сайта:
goods.tpl
<div style="background: url(templates/shop/goods/cart.png) no-repeat"></div>
Это связано с тем, что сам файл шаблона самостоятельно не работает, а используется для генерации контента из главного файла index.php.
Предпочтительно писать так:
<div style="background: url(<?= $GLOBALS['templatesUrl'] ?>/shop/goods/cart.png) no-repeat"></div>
Примечания
- Вложенные папки, могут иметь любое имя, но рекомендуется придерживаться имен головных шаблонов.
- В папке assigned повторяется та же структура папок шаблона, что и в папке templates.
|