Шаблоны в подпапках

Все файлы шаблонов до сих пор мы просто помещали в папку templates. Однако, файлы шаблонов могут находиться и в отдельных папках. При назначении шаблонов, вы увидите их в списке наряду с шаблонами.

Рекомендуем файлы шаблонов, составляющие изолированные комплекты, помещать в отдельные подпапки.
При этом, в папку можно поместить как все шаблоны комплекта, так и только дочерние, оставив головные шаблоны в корневой папке шаблонов. Пример с первым вариантом будет приведен в конце статьи, а здесь приведем пример для второго варианта.

Допустим, мы имеем головной шаблон rows для добавления рядов секций страницы. В каждый блок с этим шаблоном можно вложить колонки на шаблоне cols. Поместим файлы rows.tdd и rows.tpl, как обычно, в папку templates. Файлы шаблона cols положим в папку templates/rows/.

Тогда для автоматического назначения шаблона cols, нужно записать

rows.tdd
$types[1]='block template(rows/cols, new)';

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

Рекомендуем в подпапках создавать
файл description.md с описанием

Абсолютные и относительные пути к шаблонам

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

Путь к файлу в Unix
  • Путь строится перечислением всех названий папок, встретившихся при движении к искомой папке или файлу. Разделителем служит слеш (/).
  • Если строка начинается со слеша, она означает полный (абсолютный) путь от корневой папки. Во всех остальных случаях мы имеем относительный путь от текущей папки.
  • Специальное обозначение папок:
    /   Корневая папка
    ..  Родительская папка
    .   Текущая папка
    

Применительно к шаблонам, нужно сделать несколько уточнений:

  • Корневой папкой считается папка templates (сама она при записи не указывается, она может находиться вообще на другом сайте).
  • Так как при указании шаблонов, расширение tpl не используется, то может возникнуть путаница между именами папок и файлов. По этой причине, если нужно путь закончить именем папки, пишите в конце символ '/'. Это будет интерпретировано, как все шаблоны, находящиеся в этой папке. Если символа '/' на конце нет, то это будет интерпретировано как путь к конкретному шаблону.

Примеры путей к шаблонам

Рассмотрим комплект шаблонов для интернет-магазина. На этот раз в папку (shop/) положим все файлы комплекта.

Компоновка этого шаблона следующая — слева находится меню навигации (шаблон nav), справа — товарный блок (шаблон goods). Шаблон goods, в свою очередь, состоит из блока о выбранных товарах/товаре (шаблон items) и других блоков на выбор.

Структура файлов и папок:
• templates/
	• ads.tdd Шаблон для рекламы
	• ads.tpl
	• shop/
		• catalog.tdd Каталог интернет-магазина
		• catalog.tpl
		• catalog/
			• nav.tdd Меню навигации
			• nav.tpl
			• goods.tdd Контейнер для блоков с информацией о товарах
			• goods.tpl
			• goods/
				• items.tdd Шаблон с товарами
				• items.tpl
				• analogs.tdd Шаблон о похожих товарах
				• analogs.tpl
				• complements.tdd Шаблон о сопутствующих товарах
				• complements.tpl
		• order.tdd Раздел оформления заказа
		• order.tpl
		• order/
			...
		• client.tdd Клиентский раздел (личный кабинет покупателя)
		• client.tpl
		• client/
			...
		• admin.tdd Административный раздел (аналитика, импорт, экспорт и т.д.)
		• admin.tpl
		• admin/
			...
  1. catalog.tdd

    $types[1]="block(catalog/nav, new)";
    $types[2]="block(catalog/goods, new)";
    
    Шаблоны nav и goods будут назначены автоматически.
  2. goods.tdd
    $types[1]="block(goods/items, new)";
    $types[2]="block(goods/)"; //Сюда можно назначить шаблоны на выбор.
    //В списке мы сначала увидим шаблоны из папки goods/
    $types[3]="block(/ads)"; //блок с рекламой (абсолютный путь)
    //$types[3]="block(../../ads)"; //Вариант через относительный путь
    

Пути в файлах 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(<?= Blox::info('templates','url') ?>/shop/goods/cart.png) no-repeat"></div>

Примечания

  • Подпапка для шаблонов может иметь любое имя, но рекомендуется придерживаться имени головных шаблонов (если таковые имеются, то есть, весь комплект шаблонов не помещен в подпапку).
  • В папке assigned повторяется та же структура подпапок шаблона, что и в папке templates.

См. также