Основные теги в шаблоне 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-файле три уровня вложенности:
$fstlvl– категории верхнего уровня (родительские разделы). Обрабатываются в циклеforeach ($fstlvl as $x)→ блокCAT.$nxtlvl[$x]– подразделы (секции) внутри категории$x. Обрабатываются в циклеforeach ($nxtlvl[$x] as $y)→ блокSECTION.$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 и SECTION | 1, если у текущего раздела есть дочерние разделы (проверяется 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} | все | Порядковый номер в рамках родителя |
Комментарии (0)
Автор контента
Оффлайн
Sodium Carbonate
Последняя авторизация: 18.07.2026 14:46
- Страница размещена: 16.04.2026 13:21
- Последнее обновление: 16.04.2026 22:50