Шаблонизатор CoTemplate в Cotonti Siena CMF

Это мощный, быстрый и гибкий шаблонизатор, разработанный специально для Cotonti . Сильные стороны — скорость и легкость освоения даже для новичков

Шаблонизатор CoTemplate является ключевой частью Cotonti Siena CMF (Content Management Framework) — свободно распространяемой системы управления контентом на PHP. Это быстрый и легковесный движок шаблонов, который используется для разделения логики приложения от представления (HTML-кода) в Cotonti. Ниже я подробно расскажу всё, что достоверно известно о CoTemplate, основываясь на официальной документации и исходном коде Cotonti, избегая предположений.


Общая информация

CoTemplate — это эволюция шаблонизатора XTemplate, изначально разработанного для других PHP-проектов (например, phpXTemplate), но адаптированного и значительно расширенного для нужд Cotonti. Он был переименован в CoTemplate в процессе развития Cotonti Siena, начиная с версии 0.9.0 (примерно с 2011 года). Основные характеристики:

  • Скорость: CoTemplate компилирует шаблоны в PHP-объекты, что делает его быстрее многих других шаблонизаторов, таких как Smarty, за счет минимизации накладных расходов на парсинг.
  • Легковесность: Код CoTemplate компактный и оптимизированный, что снижает требования к ресурсам сервера.
  • Совместимость: Он сохраняет обратную совместимость с синтаксисом XTemplate, но добавляет множество дополнительных функций, специфичных для Cotonti.

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


Основные элементы CoTemplate

1. Блоки (Blocks)

Блоки — это фундаментальная единица структуры шаблонов в CoTemplate. Они определяют участки кода, которые выводятся или пропускаются в зависимости от условий или данных, переданных из PHP-кода. Синтаксис блоков:

<!-- BEGIN: BLOCK_NAME -->
    Ваш HTML-код здесь
<!-- END: BLOCK_NAME -->

 

  • Назначение: Блоки используются для вывода повторяющихся данных (например, списка записей) или условного контента.
  • Имена блоков: По традиции пишутся в верхнем регистре (например, MAIN, HEADER, FOOTER).
  • Иерархия: Блоки могут быть вложенными, что позволяет создавать сложные структуры. Например:
 
<!-- BEGIN: PARENT -->
    <!-- BEGIN: CHILD -->
        Контент
    <!-- END: CHILD -->
<!-- END: PARENT -->
Управление: Вывод блоков активируется из PHP-кода контроллера через методы вроде $t->parse('BLOCK_NAME'), где $t — объект класса XTemplate.
 

2. Теги (Tags)

Теги — это переменные, которые подставляются в шаблон вместо плейсхолдеров. Они заключаются в фигурные скобки {}. Примеры:

  • {PAGE_TITLE} — выводит заголовок страницы.
  • {PHP.cfg.mainurl} — доступ к конфигурационной переменной mainurl из глобального массива $cfg.
  • Типы тегов:
    • Простые теги: {VARIABLE} — заменяются значением переменной.
    • Глобальные теги: {PHP.var} — доступ к глобальным переменным PHP (например, $usr, $cfg).
    • Ключ-значение: Теги не имеют стека или области видимости, все переменные находятся в общих рамках возможностей фреймворка.

3. Условные операторы (IF-ELSE)

CoTemplate поддерживает логические блоки для условного вывода контента.

Синтаксис:

<!-- IF {CONDITION} -->
    Контент, если условие истинно
<!-- ELSE -->
    Контент, если условие ложно
<!-- ENDIF -->
  • Поддерживаемые операторы (начиная с версии 2.5 и выше):
    • Логические: AND, OR, XOR, ! (NOT).
    • Сравнение: ==, !=, <, >, <=, >=.
    • Строгое сравнение (с версии 2.7): ===, !==.
    • Специальные: HAS (проверка наличия элемента в массиве), ~= (проверка подстроки).
    • Арифметические: +, -, *, /, %.
  • Пример:
<!-- IF {PHP.i} % 2 == 0 AND {PHP.usr.isadmin} -->
    Четная строка и пользователь — админ
<!-- ENDIF -->
  • Вложенность: С версии 0.9.0 (CoTemplate 2.5) поддерживаются вложенные условия.

4. Callback-функции

С версии 2.5 добавлена мощная функция — вызов PHP-функций прямо из шаблона через "трубу" (|). Это позволяет обрабатывать значение тега перед выводом.

Синтаксис:

{VARIABLE|function_name($param1, $param2)}
  • Особенности:
    • $this — специальная переменная, содержащая значение тега перед вызовом функции.
    • Поддерживаются как встроенные PHP-функции, так и пользовательские функции Cotonti.
  • Примеры:
    • {PAGE_ROW_DATE_STAMP|cot_date('date_full', $this)} — форматирует дату.
    • {PHP.myvar|strtoupper} — преобразует строку в верхний регистр.
  • Множественные аргументы (с версии 0.9.24): Можно передавать другие теги как параметры:
{PHP|cot_url('page', 'c=news')|var_dump({PHP.L.Home}, $this)}

5. Включение файлов (FILE)

CoTemplate позволяет включать другие .tpl-файлы с помощью оператора FILE:

<!-- FILE "{PHP.cfg.themes_dir}/mytheme/subtemplate.tpl" -->
  • Особенность: Содержимое файла вставляется буквально на этапе парсинга, до дальнейшей обработки.

Технические детали

  • Класс: CoTemplate реализован в классе XTemplate, который находится в файле system/cotemplate.php.
  • Компиляция: Шаблоны компилируются в PHP-объекты, что ускоряет их выполнение. Код разбивается на блоки и кэшируется на диске.
  • Кэширование: CoTemplate использует дисковый кэш для хранения скомпилированных шаблонов. Если файл .tpl изменяется, необходимо очистить кэш через админ-панель (Administration → Disk Cache → Purge All).
  • Отладка (с версии 2.6, Cotonti 0.9.1):
    • Режим отладки активируется в config.php через $cfg['debug'] = true;.
    • Добавление &debug=1 к URL выводит дамп тегов и блоков текущей страницы.
    • Callback dump (например, {PAGE_TITLE|dump}) позволяет вывести содержимое переменной для анализа.

Поддерживаемые возможности

  1. Операторы в выражениях:
    • Логические: AND, OR, XOR, NOT.
    • Сравнение: ==, !=, <, >, <=, >=, ===, !==.
    • Специальные: HAS, ~=.
    • Арифметические: +, -, *, /, %.
  2. Вложенные блоки: Поддержка с версии 2.5.
  3. Множественные корневые блоки: Один .tpl-файл может содержать несколько блоков на верхнем уровне (например, MAIN, EXTRA), но HTML вне блоков игнорируется.
  4. Гибкость: Возможность использовать классы и их свойства в callback-функциях (с версии 0.9.19).

Ограничения

  • Нет стека переменных: Все теги находятся шаблонах, что упрощает код, но ограничивает сложные сценарии с областями видимости.
  • Производительность логики: Использование сложных условий и callback’ов в шаблонах может замедлить обработку. Для сложной логики рекомендуется выносить её в PHP-код (например, в плагины).

 


История версий

  • CoTemplate 2.5 (Cotonti Siena 0.9.0): Добавлены вложенные условия и callback-функции.
  • CoTemplate 2.6 (Cotonti Siena 0.9.1): Улучшена отладка (дампы тегов и переменных).
  • CoTemplate 2.7 (Cotonti Siena 0.9.13 и выше): Добавлены строгие операторы сравнения (===, !==).
  • 0.9.24 и выше: Поддержка множественных аргументов в callback-функциях.

Пример использования

Пример шаблона example.tpl:

<!-- BEGIN: MAIN -->
    <h1>{PAGE_TITLE}</h1>
    <!-- IF {PHP.usr.isadmin} -->
        <p>Добро пожаловать, админ!</p>
    <!-- ELSE -->
        <p>Вы не админ.</p>
    <!-- ENDIF -->
    <ul>
        <!-- BEGIN: ITEMS -->
            <li>{ITEM_NAME}: {ITEM_VALUE|number_format}</li>
        <!-- END: ITEMS -->
    </ul>
<!-- END: MAIN -->
 
PHP-код для обработки:
 
$t = new XTemplate('example.tpl');
$t->assign('PAGE_TITLE', 'Моя страница');
foreach ($items as $item) {
    $t->assign('ITEM_NAME', $item['name']);
    $t->assign('ITEM_VALUE', $item['value']);
    $t->parse('MAIN.ITEMS');
}
$t->parse('MAIN');
$t->out('MAIN');

Итог

CoTemplate — это мощный, быстрый и гибкий шаблонизатор, разработанный специально для Cotonti Siena CMF. Он сочетает простоту синтаксиса XTemplate с расширенными возможностями, такими как вложенные условия, callback-функции и поддержка сложных выражений. Его сильные стороны — скорость и легкость освоения даже для новичков, а слабые — ограничения в сложной логике и отсутствие стека переменных. Это делает его идеальным для типичных задач CMS/CMF, но для сложных приложений может потребоваться вынесение логики в PHP.

 

5 минут чтения Sodium Carbonate

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

webitproff

Онлайн

Sodium Carbonate

Последняя авторизация: 19.07.2026 01:57

  • Страница размещена: 12.03.2025 05:26
  • Последнее обновление: 12.03.2025 14:25

Похожие страницы

Файл cotemplate.php в Cotonti
1 Основное назначение файла cotemplate.php в системной папке Cotonti CMF — это реализация системы шаблонов (или движка
Циклы в шаблонизаторе CoTemplate в Cotonti
2 Оператор FOR (циклы) Оператор FOR позволяет обрабатывать массивы или диапазоны. Простой пример с
Обновление CMF Cotonti Siena
3 Обновление Эта инструкция поможет вам выполнить необходимые действия, чтобы обновить ваш сайт на Cotonti. Есть
CoTemplate: Документация по шаблонизатору Cotonti
4 CoTemplate: Документация по шаблонизатору CotontiCoTemplate — это быстрый и легковесный шаблонизатор, входящий в состав
Cotonti Siena CMF • 01.03.2026 11:13 webitproff
Загрузчик плагина (Plugin loader) в Cotonti Siena CMF
5 Обзор загрузчика и Введение в систему плагинов CotontiПодробный разбор самой концепции инициализации плагинов и анализ
Cotonti Siena CMF • 10.03.2026 11:22 webitproff