Плагин forums_singlepost — шаблон одиночного поста форума Cotonti
Автор: webitproff
Дата: 2026-07-03
Copyright: © webitproff, 2026
Репозиторий: https://github.com/webitproff/forums-singlepost-tpl-cotonti
Лицензия: BSD 3-Clause License
Содержание
- Назначение плагина
- Структура файлов плагина
- Почему файлы называются именно так
- Зачем нужен блок
[BEGIN_COT_EXT] - Механизм работы плагина
- Как использовать плагин
- Что не будет работать, если скопировать всё из
forums.posts.tpl - Итог
1. Назначение плагина
Плагин позволяет для каждого раздела форума задать индивидуальный шаблон страницы одиночного поста (когда открывается конкретное сообщение по прямой ссылке, а не вся тема целиком).
Если специальный шаблон для категории не задан, автоматически используется общий упрощённый шаблон forums.posts.single.tpl.
Пример:
Обычная тема открывается с шаблоном forums.posts.tpl (список всех постов).
Когда пользователь кликает по номеру поста #1, он попадает на страницу одного поста. Плагин может показать эту страницу с другим дизайном, например, без лишних элементов, с формой быстрого ответа или с особым оформлением, зависящим от категории.
2. Структура файлов плагина
plugins/forums_singlepost/
├── forums_singlepost.setup.php ← регистрация плагина
├── forums_singlepost.forums.posts.main.php ← исполняемый хук
└── tpl/
├── forums.posts.single.tpl ← заготовка дефолтного шаблона (скопируйте в тему)
└── forums.posts.single.cat_code.tpl ← пример для конкретной категории (скопируйте в тему)
Важно: Файлы из папки tpl/ плагина не загружаются напрямую. Это лишь заготовки, которые вы должны скопировать в папку вашей темы.
3. Почему файлы называются именно так
forums_singlepost.setup.php
Имя состоит из кода плагина (forums_singlepost) и суффикса .setup.php.
Система Cotonti при установке/обновлении расширений ищет файлы с таким именем, чтобы получить метаданные и зарегистрировать плагин в базе данных.
forums_singlepost.forums.posts.main.php
Здесь используется правило: {Code}.{имя_хука}.php.
- Code = forums_singlepost (должен совпадать с кодом в setup.php и названием папки).
- Имя хука = forums.posts.main — точка в коде модуля forums (файл posts.php), сразу перед строкой загрузки шаблона.
Именно поэтому файл называется так. Если имя не совпадёт, плагин не выполнится.
4. Зачем нужен блок [BEGIN_COT_EXT]
В начале каждого PHP‑файла плагина находится специальный заголовок:
/* ====================
[BEGIN_COT_EXT]
Code=forums_singlepost
...
[END_COT_EXT]
==================== */
В setup.php
Он содержит метаданные:
- Code — уникальный код плагина.
- Name, Description, Version, Author и т.д. — информация для администратора.
- Auth_guests, Auth_members — права доступа к плагину (кто может включать/выключать).
- Lock_guests, Lock_members — защищённые права.
- Requires_modules — перечень обязательных модулей, без которых плагин не заработает (здесь forums).
Эта информация записывается в БД при установке и используется админ‑панелью.
В файлах хуков
Блок указывает системе, к какому хуку привязан данный файл:
Hooks=forums.posts.main
Order=10
- Hooks — имя хука.
- Order — приоритет выполнения (чем меньше число, тем раньше сработает). Значение 10 используется по умолчанию.
Без этого блока файл будет проигнорирован.
5. Механизм работы плагина
Как обычно выбирается шаблон для страницы с постами
В файле modules/forums/posts.php есть строка:
$mskin = cot_tplfile(array('forums', 'posts', Cot::$structure['forums'][$s]['tpl']));
Функция cot_tplfile() собирает имя файла так: forums.posts.{tpl}.tpl.
Если $tpl пустая строка (как обычно), загружается forums.posts.tpl.
Если $tpl = 'single', будет загружен forums.posts.single.tpl.
Что делает плагин
Хук forums.posts.main выполняется до загрузки шаблона. Плагин проверяет, является ли текущая страница одиночным постом (по наличию параметров id или p в URL), и если да — подменяет значение Cot::$structure['forums'][$s]['tpl'] на нужное.
global $id, $p, $s;
if ((!empty($id) || !empty($p)) && !empty($s) && isset(Cot::$structure['forums'][$s])) {
$tplName = 'single.' . $s; // например, 'single.e-moped-brands'
$themePath = Cot::$cfg['themes_dir'] . '/' . Cot::$cfg['defaulttheme'];
$catTplFile = $themePath . '/modules/forums/forums.posts.' . $tplName . '.tpl';
if (file_exists($catTplFile)) {
Cot::$structure['forums'][$s]['tpl'] = $tplName;
} else {
Cot::$structure['forums'][$s]['tpl'] = 'single';
}
}
После этого cot_tplfile() срабатывает уже с новым значением tpl и загружает соответствующий файл из папки текущей темы.
Почему шаблоны должны лежать в теме, а не в папке плагина
Функция cot_tplfile() для модуля forums ищет шаблоны только в папках темы и в стандартной директории модуля (modules/forums/tpl/). Папка plugins/forums_singlepost/tpl/ не входит в пути поиска для модуля forums. Поэтому готовые шаблоны необходимо скопировать в:
themes/ваша_тема/modules/forums/
Именно там движок сможет их найти.
Почему в имени файла должен быть код категории
Плагин формирует tplName = 'single.КОД_КАТЕГОРИИ'.
Для категории с кодом e-moped-brands будет запрошен файл forums.posts.single.e-moped-brands.tpl.
Если такого файла нет, откат идёт к forums.posts.single.tpl.
Таким образом вы можете для каждого раздела форума создать свой уникальный дизайн страницы одиночного поста. Без кода категории в имени файла разделить шаблоны было бы невозможно.
6. Как использовать плагин
Шаг 1. Установка
- Скопируйте папку
forums_singlepost в plugins/ вашего сайта. - Зайдите в админку → Расширения, найдите
forums_singlepost и нажмите Установить. - Убедитесь, что плагин включён (зелёный индикатор).
Шаг 2. Подготовка шаблонов
Скопируйте дефолтный single-шаблон из plugins/forums_singlepost/tpl/forums.posts.single.tpl в папку вашей темы:
themes/ваша_тема/modules/forums/forums.posts.single.tpl
Теперь при клике на номер поста в любой теме будет открываться этот упрощённый шаблон, а не стандартный список постов.
Шаг 3. Создание категорийного шаблона (по желанию)
Если вы хотите для конкретной категории (например, e-moped-brands) использовать особый шаблон:
Создайте в той же папке файл:
themes/ваша_тема/modules/forums/forums.posts.single.e-moped-brands.tpl
- Наполните его нужной вёрсткой.
Теперь при открытии одиночного поста из этой категории будет загружен именно он. Если файла нет, будет использован forums.posts.single.tpl.
Примеры сценариев
- Чистая страница для чтения: только текст поста, без аватаров, кнопок управления, пагинации. Подходит для публикаций, где важнее контент.
- Страница с формой быстрого ответа: как во втором примере (
e-moped-brands) — одиночный пост сразу с полем для ответа. Удобно для разделов техподдержки или обсуждений товаров. - Лендинг поста: можно добавить баннеры, кнопки призыва к действию, видеоплеер – всё, что нужно для конкретного раздела.
7. Что не будет работать, если скопировать всё из forums.posts.tpl
Вы можете полностью скопировать содержимое штатного forums.posts.tpl в forums.posts.single.xxx.tpl, но при этом:
- Пагинация не отобразится (поскольку на странице только один пост, блок
{PAGINATION} будет пуст). - Кнопка «Удалить» для конкретного поста не появится — в коде
posts.php стоит условие, что удалять первый (и единственный) пост темы нельзя. Вместо этого админ должен использовать кнопки управления темой. - Ссылка на якорь поста (
{FORUMS_POSTS_ROW_IDURL}) будет вести на ту же самую страницу, что может вызвать лишнюю перезагрузку.
В остальном все элементы главного шаблона (заголовок темы, хлебные крошки, админские кнопки, форма ответа, вложения, плагины и т.д.) будут работать точно так же, как и при просмотре всей темы.
8. Итог
Плагин forums_singlepost — это лёгкий и гибкий способ изменить отображение страницы одного поста форума без правки ядра.
Вся работа сводится к размещению шаблонов в папке темы. Плагин не требует настройки, не создаёт таблиц в БД и не влияет на другие страницы.
Репозиторий плагина на GitHub