Основные теги в шаблоне forums.sections.tpl - Справочник

Примеры практического использования тегов в шаблоне для списка разделов и категорий форумов сайта на CMF Cotonti Siena 0.9.26+. Таблица тегов и их описание.

основные теги с префиксом FORUMS_SECTIONS_ROW_, их источники и практическое применение.

Основные теги от функции cot_generate_sectiontags()

Эта функция вызывается для каждой категории/раздела и возвращает ассоциированный массив данных о разделе. Ключи массива объединяются с переданным префиксом (в нашем случае 'FORUMS_SECTIONS_ROW_'). Полный список формируемых переменных:

Тег в шаблонеНазначение
{FORUMS_SECTIONS_ROW_CAT}Код (alias) категории/раздела, используется в id блока для сворачивания
{FORUMS_SECTIONS_ROW_TITLE}Название раздела
{FORUMS_SECTIONS_ROW_URL}URL раздела (основная ссылка на страницу форума)
{FORUMS_SECTIONS_ROW_SECTIONSURL}URL родительской категории (если есть) или тот же URL
{FORUMS_SECTIONS_ROW_ICON}Путь к иконке раздела (если задана)
{FORUMS_SECTIONS_ROW_DESC}Описание раздела
{FORUMS_SECTIONS_ROW_TOPICCOUNT}Количество тем в разделе (включая подразделы)
{FORUMS_SECTIONS_ROW_POSTCOUNT}Количество сообщений в разделе (включая подразделы)
{FORUMS_SECTIONS_ROW_VIEWCOUNT}Количество просмотров (может использоваться для статистики)
{FORUMS_SECTIONS_ROW_LASTPOST}Название последней темы с новым сообщением
{FORUMS_SECTIONS_ROW_LASTPOSTDATE}Дата последнего сообщения
{FORUMS_SECTIONS_ROW_LASTPOSTER}Имя пользователя, оставившего последнее сообщение
{FORUMS_SECTIONS_ROW_LASTPOSTERID}ID этого пользователя
{FORUMS_SECTIONS_ROW_LASTPOSTURL}Прямая ссылка на последнее сообщение
{FORUMS_SECTIONS_ROW_ACTIVITY}HTML‑код индикатора активности (обычно звёздочки/кружки), генерируется через cot_rc('forums_icon_section_activity')
{FORUMS_SECTIONS_ROW_ACTIVITYVALUE}Числовое значение активности (0–5), используется для кастомизации индикатора

Дополнительные теги, назначаемые вручную

Эти переменные добавляются отдельно в циклах PHP и не входят в результат cot_generate_sectiontags():

  • {FORUMS_SECTIONS_ROW_FOLD}
    0 или 1. Определяет, свёрнут ли блок подфорумов по умолчанию. Зависит от настройки defstate категории и параметра c в URL. Используется в условии <!-- IF {FORUMS_SECTIONS_ROW_FOLD} --> style="display:none;"<!-- ENDIF -->.
  • {FORUMS_SECTIONS_ROW_SUBITEMS}
    0 или 1. Показывает, есть ли у текущей категории подфорумы (вложенные разделы). Именно этот тег мы использовали для решения проблемы с пустыми разделами.
  • {FORUMS_SECTIONS_ROW_ODDEVEN}
    Строка 'odd' или 'even'. Используется для стилизации чётных/нечётных строк.
  • {FORUMS_SECTIONS_ROW_NUM}
    Порядковый номер раздела внутри родительской категории (начинается с 1).
  • {FORUMS_SECTIONS_ROW_ACTIVITY} и {FORUMS_SECTIONS_ROW_ACTIVITYVALUE} (уже упомянуты выше) фактически перезаписываются в цикле, чтобы учесть агрегированную активность родительской категории.

Примеры практического использования

1. Условное отображение кнопки «Свернуть/развернуть»

<!-- IF {FORUMS_SECTIONS_ROW_SUBITEMS} -->
 <button onclick="return toggleblock('blk_{FORUMS_SECTIONS_ROW_CAT}')">
 <i class="fa-solid fa-chevron-down"></i>
 </button>
<!-- ENDIF -->

2. Вывод индикатора активности без встроенного HTML

Вместо готового {FORUMS_SECTIONS_ROW_ACTIVITY} можно построить свой индикатор, используя числовое значение:

<div class="activity-bar">
 <!-- FOR {I} IN {FORUMS_SECTIONS_ROW_ACTIVITYVALUE} -->
 <span class="active-dot"></span>
 <!-- ENDFOR -->
</div>

3. Стилизация чётных/нечётных строк

<div class="forum-row {FORUMS_SECTIONS_ROW_ODDEVEN}">
 ...
</div>

4. Проверка наличия иконки

<!-- IF {FORUMS_SECTIONS_ROW_ICON} -->
 <img src="{FORUMS_SECTIONS_ROW_ICON}" alt="{FORUMS_SECTIONS_ROW_TITLE}">
<!-- ELSE -->
 <img src="{PHP.R.app-logo}" alt="{FORUMS_SECTIONS_ROW_TITLE}">
<!-- ENDIF -->

Связь с решённой проблемой

В изначальном шаблоне ссылка на раздел всегда содержала onclick="return toggleblock(...)", что блокировало переход для пустых категорий. Добавив условие <!-- IF {FORUMS_SECTIONS_ROW_SUBITEMS} -->, мы смогли отображать простую ссылку для разделов без подфорумов и интерактивную — для категорий с вложенными форумами.

Эти теги дают полный контроль над отображением списка разделов и позволяют гибко настраивать внешний вид форумов в теме Index36.

Общая структура циклов

В PHP-файле три уровня вложенности:

  1. $fstlvl – категории верхнего уровня (родительские разделы). Обрабатываются в цикле foreach ($fstlvl as $x) → блок CAT.
  2. $nxtlvl[$x] – подразделы (секции) внутри категории $x. Обрабатываются в цикле foreach ($nxtlvl[$x] as $y) → блок SECTION.
  3. $nxtlvl[$y] – подподразделы (подсекции) внутри секции $y (если включено отображение). Обрабатываются в цикле foreach ($nxtlvl[$y] as $z) → блок SUBSECTION.

На каждом уровне шаблон получает набор переменных с префиксом FORUMS_SECTIONS_ROW_.

1. Переменные, формируемые функцией cot_generate_sectiontags($code, $prefix, $stat)

Эта функция возвращает массив, ключи которого объединяются с переданным префиксом. В нашем случае префикс – 'FORUMS_SECTIONS_ROW_'. Функция берёт данные из структуры разделов Cotonti и из таблицы cot_forum_stats (переменная $stat).

Переменная в шаблонеИсточник в PHPОписание
{FORUMS_SECTIONS_ROW_CAT}$code (код раздела)Уникальный идентификатор раздела (например, nq-product). Используется в id блока для сворачивания: blk_{FORUMS_SECTIONS_ROW_CAT}.
{FORUMS_SECTIONS_ROW_TITLE}$structure['forums'][$code]['title']Название раздела.
{FORUMS_SECTIONS_ROW_URL}cot_url('forums', 'm=topics&s='.$code)URL страницы со списком тем этого раздела.
{FORUMS_SECTIONS_ROW_SECTIONSURL}Для подразделов – URL родительской категории; для верхнего уровня – тот же URL. В коде это cot_url('forums', 'c='.$code).Ссылка на страницу категории (используется в заголовке CAT).
{FORUMS_SECTIONS_ROW_ICON}$structure['forums'][$code]['icon']Путь к иконке раздела (если загружена).
{FORUMS_SECTIONS_ROW_DESC}$structure['forums'][$code]['desc']Описание раздела.
{FORUMS_SECTIONS_ROW_TOPICCOUNT}$stat['topiccount'] (из cat_top)Общее количество тем в разделе (включая все подразделы).
{FORUMS_SECTIONS_ROW_POSTCOUNT}$stat['postcount'] (из cat_top)Общее количество сообщений в разделе (включая все подразделы).
{FORUMS_SECTIONS_ROW_VIEWCOUNT}$stat['viewcount'] (из cat_top)Количество просмотров (если ведётся учёт).
{FORUMS_SECTIONS_ROW_LASTPOST}$stat['fs_lt_title']Название темы, в которой было последнее сообщение.
{FORUMS_SECTIONS_ROW_LASTPOSTDATE}$stat['fs_lt_date']Дата последнего сообщения (в формате, заданном в настройках).
{FORUMS_SECTIONS_ROW_LASTPOSTER}$stat['fs_lt_postername']Имя пользователя, оставившего последнее сообщение.
{FORUMS_SECTIONS_ROW_LASTPOSTERID}$stat['fs_lt_posterid']ID этого пользователя.
{FORUMS_SECTIONS_ROW_LASTPOSTURL}Формируется как cot_url('forums', 'm=posts&p='.$stat['fs_lt_id']).'#'.$stat['fs_lt_id']Прямая ссылка на последнее сообщение.
{FORUMS_SECTIONS_ROW_ACTIVITY}Генерируется в коде шаблона через cot_rc('forums_icon_section_activity', array('secact_num'=>$secact_num)) (переопределяется ниже).HTML-код индикатора активности (обычно набор иконок).
{FORUMS_SECTIONS_ROW_ACTIVITYVALUE}Рассчитывается как число от 0 до 5 (см. ниже).Числовое значение активности для кастомных индикаторов.

2. Переменные, назначаемые вручную в PHP-циклах

Эти переменные не берутся из cot_generate_sectiontags(), а добавляются отдельными $t->assign().

ПеременнаяГде назначаетсяЗначениеПрименение
{FORUMS_SECTIONS_ROW_FOLD}В цикле CAT ($x)0 или 1. 1 – блок blk_... скрыт (стиль display:none).Управляет начальным состоянием сворачивания категории.
{FORUMS_SECTIONS_ROW_SUBITEMS}В циклах CAT и SECTION1, если у текущего раздела есть дочерние разделы (проверяется isset($nxtlvl[$code])).Используется для отображения кнопок сворачивания или условного вывода ссылок.
{FORUMS_SECTIONS_ROW_ODDEVEN}Во всех трёх циклах'odd' или 'even' (результат cot_build_oddeven($num)).Для стилизации чётных/нечётных строк (например, фон строки).
{FORUMS_SECTIONS_ROW_NUM}Во всех трёх циклахПорядковый номер элемента в своём родительском цикле (начинается с 1).Важно: Нумерация отдельная для каждого уровня.
{FORUMS_SECTIONS_ROW_ACTIVITY} и {FORUMS_SECTIONS_ROW_ACTIVITYVALUE}Переопределяются в циклах SECTION и CAT для корректного агрегирования активности родительских разделов.См. ниже.Позволяет выводить индикатор активности даже у категорий, в которых нет своих тем, но есть активность в подразделах.

3. Подробно о FORUMS_SECTIONS_ROW_NUM и FORUMS_SECTIONS_ROW_ODDEVEN

Как формируется NUM

В коде три счётчика:

  • $xx – для категорий верхнего уровня (CAT).
  • $yy – для секций (SECTION) внутри каждой категории.
  • $zz – для подсекций (SUBSECTION) внутри каждой секции.

Пример:

$xx = 0;
foreach ($fstlvl as $x) {
    $xx++;
    // ...
    if (isset($nxtlvl[$x]) && is_array($nxtlvl[$x])) {
        $yy = 0;
        foreach ($nxtlvl[$x] as $y) {
            $yy++;
            // ...
            $t->assign('FORUMS_SECTIONS_ROW_NUM', $yy);
        }
    }
    $t->assign('FORUMS_SECTIONS_ROW_NUM', $xx);
}

Таким образом, {FORUMS_SECTIONS_ROW_NUM}:

  • В блоке CAT – это номер категории среди всех категорий верхнего уровня.
  • В блоке SECTION – номер секции внутри её родительской категории.
  • В блоке SUBSECTION – номер подсекции внутри её родительской секции.

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

1. Создание якоря с уникальным идентификатором

<div id="cat-{FORUMS_SECTIONS_ROW_NUM}" class="forum-category">
 ...
</div>

2. Вывод порядкового номера для нумерованного списка

<span class="forum-index">{FORUMS_SECTIONS_ROW_NUM}.</span> {FORUMS_SECTIONS_ROW_TITLE}

3. Условная стилизация первого элемента

<!-- IF {FORUMS_SECTIONS_ROW_NUM} == 1 -->
 <div class="first-item">Первый раздел</div>
<!-- ELSE -->
 <div class="other-item">Остальные</div>
<!-- ENDIF -->

4. Группировка элементов по три в ряд (с использованием математики в Cotonti невозможно, но можно через CSS-классы)
Можно назначить класс в зависимости от номера:

<!-- IF {FORUMS_SECTIONS_ROW_NUM} % 3 == 0 --> class="last-in-row"<!-- ENDIF -->

(В Cotonti нет оператора %, поэтому для сложной логики лучше использовать ODDEVEN или внешний JavaScript.)

ODDEVEN и его связь с NUM

Функция cot_build_oddeven($num) возвращает 'odd', если число нечётное, и 'even', если чётное. Это удобно для зебры:

<div class="forum-section {FORUMS_SECTIONS_ROW_ODDEVEN}">
 ...
</div>

В CSS можно задать:

css

.forum-section.odd { background-color: #f9f9f9; }
.forum-section.even { background-color: #ffffff; }

4. Особенности переменных активности

Как считается ACTIVITYVALUE

В PHP-коде для каждого раздела (секции) вычисляется $secact_num:

  • Берётся количество постов за последние 7 дней ($cot_sections_act[$y]).
  • Нормируется относительно максимального значения ($secact_max) и масштабируется в диапазон 0–5.
  • Если постов мало, но они есть, $secact_num может быть 1.

Затем в шаблон передаются:

  • {FORUMS_SECTIONS_ROW_ACTIVITY} – готовая HTML‑строка (например, <span class="activity activity-3"></span>), сгенерированная функцией cot_rc('forums_icon_section_activity', ...).
  • {FORUMS_SECTIONS_ROW_ACTIVITYVALUE} – число от 0 до 5.

Применение ACTIVITYVALUE:
Можно создать свой индикатор, не полагаясь на стандартный HTML:

<div class="custom-activity">
 <!-- FOR {I} IN {FORUMS_SECTIONS_ROW_ACTIVITYVALUE} -->
 <i class="fa-solid fa-fire"></i>
 <!-- ENDFOR -->
</div>

(В Cotonti цикл FOR работает с числовым значением.)

5. Резюме по всем доступным тегам

ТегУровеньОписание
{FORUMS_SECTIONS_ROW_CAT}всеКод раздела (для id блока)
{FORUMS_SECTIONS_ROW_TITLE}всеНазвание
{FORUMS_SECTIONS_ROW_URL}SECTION, SUBSECTIONСсылка на страницу тем
{FORUMS_SECTIONS_ROW_SECTIONSURL}CATСсылка на страницу категории
{FORUMS_SECTIONS_ROW_ICON}всеПуть к иконке
{FORUMS_SECTIONS_ROW_DESC}всеОписание
{FORUMS_SECTIONS_ROW_TOPICCOUNT}всеКол-во тем
{FORUMS_SECTIONS_ROW_POSTCOUNT}всеКол-во сообщений
{FORUMS_SECTIONS_ROW_VIEWCOUNT}всеКол-во просмотров
{FORUMS_SECTIONS_ROW_LASTPOST}всеЗаголовок последней темы
{FORUMS_SECTIONS_ROW_LASTPOSTDATE}всеДата последнего сообщения
{FORUMS_SECTIONS_ROW_LASTPOSTER}всеИмя автора последнего сообщения
{FORUMS_SECTIONS_ROW_LASTPOSTERID}всеID автора
{FORUMS_SECTIONS_ROW_LASTPOSTURL}всеСсылка на последнее сообщение
{FORUMS_SECTIONS_ROW_ACTIVITY}всеHTML индикатора активности
{FORUMS_SECTIONS_ROW_ACTIVITYVALUE}всеЧисловое значение активности (0–5)
{FORUMS_SECTIONS_ROW_FOLD}CATСвёрнута ли категория (0/1)
{FORUMS_SECTIONS_ROW_SUBITEMS}CAT, SECTIONЕсть ли подразделы (0/1)
{FORUMS_SECTIONS_ROW_ODDEVEN}все'odd' / 'even'
{FORUMS_SECTIONS_ROW_NUM}всеПорядковый номер в рамках родителя

пример готового шаблона

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

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

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

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

webitproff

Оффлайн

Sodium Carbonate

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

  • Страница размещена: 16.04.2026 13:21
  • Последнее обновление: 16.04.2026 22:50

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

Локализация значений экстраполей в TPL-шаблоне
1 Если вы уже начали знакомиться с API Cotonti Siena, то наверняка успели заметить,что вывод значений экстраполей с типом
Основные модули и плагины биржи, перечень расширений сборки без движка Cotonti
2 Данный перечень расширений актуален для версии биржи начальных версий. Модули     Projects - проекты, значительно
Справочник по глобальным переменным в Cotonti
3 Справочник по глобальным переменным Большинство скриптов в Cotonti работают в глобальной области, так как система была
Справочник по глобальным переменным Cotonti 0.9.26 (PHP 8.4)
4 Данный документ представляет собой полный справочник по глобальным переменным Cotonti, доступным разработчикам модулей,
Мета теги title и description для сайта
5 Мета теги Title и Description являются далеко не единственными meta-данными в разделе head HTML-документа. Однако в