Основные теги в шаблоне 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 minutes read Sodium Carbonate

Comments (0)

No comments yet
Only registered users can post new comments

Content author

webitproff

Offline

Sodium Carbonate

Last logged: 2026-09-03 16:57

About me briefly
Support and development of web projects on the CMF Cotonti: private messengers via the website, open and closed small social networks, trading platforms and marketplaces, freelance and services exchange portal, catalogs of goods from wholesale suppliers, dropshipping platforms, online stores, and much more.
View developments and download
Public portfolio of my works and developments
Telegram for messages
@webitproff
Telegram channel
@s/aBuyFILE
  • Page published: 2026-04-16 13:21
  • Last update: 2026-08-22 12:27

Similar pages

Локализация значений экстраполей в 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-документа. Однако в