Операторы в конструкциях тегов Cotonti в TPL-шаблонах и синтаксис XTemplate

Cotonti использует собственный шаблонизатор под названием CoTemplate, который основан на классическом XTemplate (с существенными улучшениями и адаптациями). Это легковесный движок шаблонов, который разделяет HTML-разметку от PHP-кода

Опубликовано в: Cotonti Siena CMF

Операторы в конструкциях тегов Cotonti в TPL-шаблонах и синтаксис XTemplate (CoTemplate)

Cotonti использует собственный шаблонизатор под названием CoTemplate, который основан на классическом XTemplate (с существенными улучшениями и адаптациями). Это легковесный движок шаблонов, который разделяет HTML-разметку от PHP-кода, делая темы независимыми от логики. В отличие от Smarty (который использует {foreach}, {/foreach}) или Twig ({% for %}), CoTemplate применяет синтаксис на основе комментариев HTML-стиля и тегов в фигурных скобках.

Основная идея: шаблон — это почти чистый HTML с вставками специальных конструкций. Cotonti парсит эти конструкции и заменяет их на реальные данные.

1. Основные типы тегов (TPL Tags)

В Cotonti есть два вида тегов:

  • Простые теги (переменные) — заменяются на значения: {PAGE_TITLE}, {USER_NAME}, {PHP.cfg.mainurl} Они выводятся напрямую. Префиксы вроде PHP. дают доступ к глобальным переменным PHP.
  • Блочные теги — управляют выводом участков HTML: <!-- BEGIN: BLOCK_NAME --> ... <!-- END: BLOCK_NAME -->

Блоки — это основа CoTemplate. Они позволяют повторять фрагменты (циклы), показывать/прятать участки (условия) и вкладывать друг в друга.

2. Синтаксис блоков (BEGIN / END)

Самая частая конструкция — цикл по массиву данных.

Пример: вывод списка новостей (pages)

HTML
<!-- BEGIN: PAGE_ROW -->
<div class="news-item">
 <h3><a href="{PAGE_ROW_URL}">{PAGE_ROW_TITLE}</a></h3>
 <p>{PAGE_ROW_DESC}</p>
 <span>Автор: {PAGE_ROW_AUTHOR}</span>
</div>
<!-- END: PAGE_ROW -->

В PHP-коде модуля (например, page.list.php):

PHP
$t->assign('PAGE_ROW', $row); // или $t->assign(array('PAGE_ROW_TITLE' => $row['page_title'], ...));
$t->parse('MAIN.PAGE_ROW'); // парсим блок внутри MAIN

Результат: блок PAGE_ROW будет повторен столько раз, сколько элементов в массиве.

Вложенные блоки работают аналогично:

HTML
<!-- BEGIN: FORUM_TOPIC -->
 <div class="topic">
 <h4>{FORUM_TOPIC_TITLE}</h4>
 <!-- BEGIN: FORUM_POST -->
 <div class="post">
 {FORUM_POST_TEXT}
 <small>от {FORUM_POST_AUTHOR}</small>
 </div>
 <!-- END: FORUM_POST -->
 </div>
<!-- END: FORUM_TOPIC -->

3. Условные операторы: IF / ELSE / ENDIF

Шаблонизатор CoTemplate в Cotonti использует операторы внутри условных конструкций для проверки условий

<!-- IF {TAG_YOUR_COTONTI} --> 
    {TAG_YOUR_COTONTI} 
<!-- ELSE --> 
    {OTHER_TAG_YOUR_COTONTI} 
<!-- ENDIF -->

Базовый синтаксис:

HTML
<!-- IF {some_tag} == "value" -->
 Показывается, если {some_tag} равно "value"
<!-- ELSE -->
 Иначе
<!-- ENDIF -->

Поддерживаемые операторы сравнения и не только (таблица):

НаименованиеОператорОписание
Равно==значения равны
Не равно!=значения не равны
Тождественно равно===значения равны и имеют тот же тип
Тождественно не равно!==значения не равны или они разных типов
Меньше чем<левое значение меньше правого
Больше чем>левое значение больше правого
Меньше или равно<=левое значение меньше или равно правому
Больше или равно>=левое значение больше или равно правому
СодержитHASлевое выражение (массив) содержит правое значение (строку)
Включает~=левое значение (строка) включает в себя правое значение (строку)
Сложение+складывает 2 значения
Вычитание-вычитает значения
Умножение*умножает значения
Деление/делит значение
Остаток целочисленного деления%возвращает остаток от деления
Логическое `И`ANDобъединяет два значения, оба должны истинны (true)
Логическое `ИЛИ`ORобъединяет два значения, хотя бы одно из них должно быть истинно (true)
Логическое `исключающее ИЛИ`XORобъединяет два значения, только одно может быть истинно (true)
Отрицание!делает булевое значение (boolean) обратным

 

Примеры:

HTML
<!-- IF {PHP.usr.id} > 0 -->
 Привет, {PHP.usr.name}! <a href="{PHP|cot_url('users', 'm=profile')}">Профиль</a>
<!-- ELSE -->
 <a href="{PHP|cot_url('login')}">Войти</a> / <a href="{PHP|cot_url('register')}">Регистрация</a>
<!-- ENDIF -->

С ELSEIF использовать нельзя:

вот так НЕ ПРАВИЛЬНО
<!-- IF {USER_AGE} < 18 -->
 <p>Доступ ограничен</p>
<!-- ELSEIF {USER_AGE} < 21 -->  ELSEIF нет в cotonti
 <p>Алкоголь запрещен</p>
<!-- ELSE -->
 <p>Добро пожаловать!</p>
<!-- ENDIF -->

а вот так ПРАВИЛЬНО:

<!-- IF {USER_AGE} < 18 -->
 <p>Доступ ограничен</p>
<!-- ELSE -->
 <!-- IF {USER_AGE} < 21 -->
   <p>Алкоголь запрещен</p>
 <!-- ELSE -->
   <p>Добро пожаловать!</p>
 <!-- ENDIF -->
<!-- ENDIF -->

подробнее смотрите в файле 

Логические операторы внутри IF:

HTML
<!-- IF {PHP.usr.id} == {PAGE_OWNER_ID} OR {PHP.usr.maingrp} == 5 -->
 владелец страницы или администратор может видеть то, что внутри этого условия, например ссылку на редактирование статьи
<!-- ENDIF -->

4. Выражения и операторы внутри тегов

CoTemplate позволяет простые вычисления и конкатенацию прямо в тегах.

Поддерживаемые операторы (арифметические и строковые):

  • + — сложение / конкатенация
  • - — вычитание
  • * — умножение
  • / — деление
  • % — остаток от деления

     

Примеры:

HTML
<span>Цена со скидкой: {ITEM_PRICE - (ITEM_PRICE * {DISCOUNT}/100)}</span>
<p>Полное имя: {USER_FIRSTNAME} {USER_LASTNAME}</p>
<div class="count">Товаров в корзине: {CART_COUNT}</div>
<!-- IF {CART_COUNT} > 0 -->
 <a href="{PHP|cot_url('shop', 'm=cart')}">Перейти в корзину</a>
<!-- ENDIF -->

Функции в тегах:

Реальные примеры использования $this в шаблонах Cotonti (в тегах вида {TAG|функция($this, ...)})

// 1. Обрезка текста страницы/статьи до 160 символов (очень частый случай в списках)
{PAGE_ROW_TEXT|strip_tags($this)|cot_cutstring($this,160)}

// 2. Обрезка описания страницы до 90–120 символов без HTML
{PAGE_ROW_DESC|strip_tags($this)|mb_substr($this,0,90,'UTF-8')}

// 3. Классическая обрезка заголовка (часто в блоках последних/популярных материалов)
{PAGE_ROW_TITLE|cot_cutstring($this,70,'…')}

// 4. Получение ссылки на недавние материалы за N дней (recentitems)
{PHP.daysUrl|cot_url('recentitems','$this&mode=pages')}

// 5. То же самое, но с категорией (пример из плагинов/тем)
{PHP.daysUrl|cot_url('recentitems','c=$this&mode=pages')}

// 6. Формирование ссылки на пользователя по его id (в списках авторов, комментариях и т.п.)
{PAGE_OWNER_ID|cot_url('users','m=details&id=$this')}

// 7. Формирование ссылки на вкладку поиска
{PHP|cot_url('search','tab=pag&sq=$this')}

// 8. Построение ссылки на профиль по имени пользователя
{PAGE_OWNER_NICKNAME|cot_url('users','m=details&u=$this')}

// 9. Обрезка подписи пользователя 
{PAGE_OWNER_TEXT|strip_tags($this)|cot_cutstring($this,120,'…')}

// 10. Формирование ссылки на страницу создания статьи с кодом текущей категории
{PAGE_CAT|cot_url('page','m=add&c=$this')}

Синтаксис: {TAG|function_name(param1, param2)} Часто используется cot_date(), cot_cutstring(), strip_tags() и пользовательские функции.

5. Специальные конструкции и полезные трюки

  • <!-- IF {TAG} --> — сокращенная форма ISSET + !EMPTY
  • <!-- BEGIN: EXTRA_BLOCK --> — часто используется для плагинов (они добавляют свои блоки динамически)
  • Вывод тега без парсинга (экранирование):
HTML
{{LITERAL_TAG}} <!-- выводит {LITERAL_TAG} как есть -->
  • Доступ к глобальным переменным:
HTML
{PHP.env.index} 
{PHP.usr.id} 
{PHP.sys.now} 
  • Условный класс CSS:
HTML
<div class="item <!-- IF {ITEM_ACTIVE} -->active<!-- ENDIF -->">

6. Отличия от других шаблонизаторов

КонструкцияCotonti (CoTemplate)SmartyTwigBlade (Laravel)
ЦиклFOR; EXTRA_BLOCK_ROW{foreach}{% for %}@foreach
Условие<!-- FOR {KEY}, {VALUE} IN {MY_ARRAY} -->
Используем {KEY} и {VALUE}
<!-- ENDFOR -->
{if}{% if %}@if
Переменная{VAR}{$var}{{ var }}{{ $var }}
Фильтры/модификаторы{VARfunc}{$varmodifier}
Вложенность условийДаДаДаДа
СкоростьОчень высокаяСредняяВысокая (компилируется)Высокая

CoTemplate специально сделан легким и быстрым — без компиляции в PHP-классы, парсинг происходит на лету, но кэшируется.

7. Полезные советы по использованию

  • Всегда используйте префиксы блоков (например, MAIN., PAGE., USERS.) — это предотвращает конфликты имен.
  • Для отладки включите $cfg['debugmode'] = true; — Cotonti покажет неиспользованные теги.
  • Плагины часто добавляют блоки вида <!-- BEGIN: PLUGIN_NAME --> — проверяйте их в документации плагина.
  • Для сложной логики лучше вынести её в PHP (в модуль или плагин), а в шаблоне оставить только простые условия.

CoTemplate — это баланс между мощностью и простотой. Он не такой выразительный, как Twig, но значительно быстрее и проще для тем, которые создают верстальщики без глубоких знаний PHP.

Если вы разрабатываете тему для Cotonti Siena — начните с копирования стандартной темы (NEMESIS) и экспериментируйте с блоками и условиями. Сообщество Cotonti до активно помогает в форуме и на GitHub.

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

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

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

Рекомендуемые товары и услуги

Установка, интеграция и адаптация плагинов под Cotonti CMF

Установка, интеграция и адаптация плагинов под Cotonti CMF

профессиональные услуги по установке, глубокой интеграции и адаптации плагинов под Cotonti CMF, с

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

webitproff

Оффлайн

Sodium Carbonate

Последняя авторизация: 18.07.2026 14:46

  • Страница размещена: 19.02.2026 22:48
  • Последнее обновление: 26.02.2026 23:06

Связанные статьи

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

XTemplate. Функции (методы) parse(), text() и out() в Cotonti Siena
1 Техническое руководство по функциям парсера шаблонов, в частности функциям parse() и out(), а также основам работы с
Cotonti Siena CMF • 22.02.2026 20:11 webitproff
Руководство по методам parse(), text() и out() в XTemplate Cotonti Siena
2 Руководство для новичков: методы assign(), parse(), text() и out() в XTemplate (CoTemplate) Cotonti Siena
Cotonti Siena CMF • 22.02.2026 20:28 webitproff
TPL - список доступных тегов в шаблонах
3 Шаблоны Cotonti и фриланс-биржи. Список доступных тегов и блоков в шаблоне на странице модуля или плагина.
Список тегов и блоков в шаблонах Cotonti
4 Список доступных тегов и блоков в шаблоне на странице модуля или плагина. Документация, что происходит и как это
Примеры использования тегов для вывода дат разных форматов в шаблонах
5 Примеры использования стандартных форматов в шаблонахНиже приведены примеры шаблонных тегов для каждого

Рекомендуемые темы форума для этой статьи

Как получить доступные теги и их список в CMS Cotonti?

Как получить доступные теги и их список в CMS Cotonti?

Инструкция новичкам, как в котонти, в любой локации сайта и на любой странице вывести и получить
#29 | Постов: 1 | Просмотров: 826
Дополнительные возможности шаблонизатора CoTemplate

Дополнительные возможности шаблонизатора CoTemplate

Справочник операторов. Условные блоки использующие оператор `IF`. Расширенные возможности движка
#35 | Постов: 1 | Просмотров: 1562