Чтобы в шаблоне recentitems.forums.index.tpl выводить не превью первого сообщения ({FORUM_ROW_PREVIEW}), а текст последнего поста в теме, нужно немного доработать функцию cot_build_recentforums() в файле плагина.
Сейчас переменная FORUM_ROW_PREVIEW берётся из ft_preview (первый пост). Мы добавим отдельную переменную FORUM_ROW_LAST_POST_TEXT, которая будет содержать текст последнего сообщения
Нужно добавить новую переменную в массив assign, которая будет содержать текст последнего сообщения темы (чистый текст, без HTML), и не трогать существующую FORUM_ROW_PREVIEW.
Вот что нужно сделать строго добавить в текущую функцию, ни строчки не меняя из того, что уже есть.
1. Перед циклом foreach ($recentTopics as $row) добавьте получение текста последних постов
Сразу после блока, где загружаются $users (после if (!empty($usersIds)) { ... }), вставьте:
// === Получаем текст последнего сообщения для каждой темы ===
$lastPostTexts = [];
$topicIdsForLastPost = [];
foreach ($recentTopics as $item) {
if (empty($item['ft_movedto'])) {
$topicIdsForLastPost[] = (int) $item['ft_id'];
}
}
if (!empty($topicIdsForLastPost)) {
$sqlLastPosts = "SELECT p.fp_topicid, p.fp_text
FROM " . Cot::$db->forum_posts . " AS p
INNER JOIN (
SELECT fp_topicid, MAX(fp_id) AS max_id
FROM " . Cot::$db->forum_posts . "
WHERE fp_topicid IN (" . implode(',', $topicIdsForLastPost) . ")
GROUP BY fp_topicid
) AS last ON p.fp_topicid = last.fp_topicid AND p.fp_id = last.max_id";
$res = Cot::$db->query($sqlLastPosts)->fetchAll();
foreach ($res as $prow) {
$lastPostTexts[$prow['fp_topicid']] = $prow['fp_text'];
}
}
// ====================================================
2. Внутри цикла foreach ($recentTopics as $row) после блока $topicPreview = ...
Найдите этот блок (строки 151-158 в вашем листинге):
$topicPreview = '';
if (!empty($row['ft_preview'])) {
$allowBBCodes = isset(Cot::$cfg['forums']['cat_' . $row['ft_cat']])
? Cot::$cfg['forums']['cat_' . $row['ft_cat']]['allowbbcodes']
: Cot::$cfg['forums']['cat___default']['allowbbcodes'];
$topicPreview = trim(cot_parse($row['ft_preview'], $allowBBCodes));
if (!empty($topicPreview)) {
$topicPreview .= '...';
}
}
Сразу после него добавьте расчёт текста последнего сообщения:
// === Текст последнего сообщения (чистый) ===
$lastPostText = '';
if (empty($row['ft_movedto']) && !empty($lastPostTexts[$row['ft_id']])) {
$allowBBCodes = isset(Cot::$cfg['forums']['cat_' . $row['ft_cat']])
? Cot::$cfg['forums']['cat_' . $row['ft_cat']]['allowbbcodes']
: Cot::$cfg['forums']['cat___default']['allowbbcodes'];
$parsed = trim(cot_parse($lastPostTexts[$row['ft_id']], $allowBBCodes));
$lastPostText = strip_tags($parsed);
}
// ==============================================
3. В массив $recentitems->assign([...]) добавьте новую переменную
В самом массиве после строки
'FORUM_ROW_PREVIEW' => $topicPreview, добавьте:
'FORUM_ROW_LAST_POST_TEXT' => $lastPostText,Теперь в шаблоне станет доступна новая переменная {FORUM_ROW_LAST_POST_TEXT} с чистым текстом последнего сообщения, а {FORUM_ROW_PREVIEW} останется как было. Функция полностью сохраняет обратную совместимость.
И сам шаблон
<!--
/********************************************************************************
* File: recentitems.forums.index.tpl
* Extension: plugin 'recentitems'
* Description: HTML template for recentitems plugin.
* Compatibility: CMF/CMS Cotonti Siena v0.9.26[](https://github.com/Cotonti/Cotonti)
* Dependencies:
* Bootstrap 5.3.+[](https://getbootstrap.com/);
* Font Awesome Free 7.1[](https://fontawesome.com/)
* Theme: Index36
* Version: 1.0.2
* Created: 01 Feb 2026
* Updated: 29 Apr 2026
* Copyright (c) 2026 webitproff | https://github.com/webitproff
* Source: https://github.com/webitproff/index36-cotonti-theme
* Demo : https://freelance-script.abuyfile.com/
* Help and support: https://abuyfile.com/ru/forums/cotonti/original/skins/index36
* License: BSD (Free distribution with saving Copyright (c) 2026 webitproff)
********************************************************************************/
-->
<!-- BEGIN: MAIN -->
<div class="list-group list-group-striped list-group-flush">
<!-- BEGIN: TOPICS_ROW -->
<li class="list-group-item list-group-item-action {FORUM_ROW_ODDEVEN}">
<div class="row g-3">
<div class="col-12 col-md-8">
<h5 class="mb-0 fs-6 fw-semibold"><a href="{FORUM_ROW_LAST_POST_URL}">{FORUM_ROW_TITLE}</a></h5>
<!-- IF {FORUM_ROW_LAST_POST_TEXT} -->
<p class="mb-1 small">{FORUM_ROW_LAST_POST_TEXT|strip_tags($this)|mb_substr($this, 0, 150, 'UTF-8')}...</p>
<!-- ELSE -->
<p class="mb-1 small">{FORUM_ROW_PREVIEW|strip_tags($this)|mb_substr($this, 0, 120, 'UTF-8')} ...</p>
<!-- ENDIF -->
</div>
<div class="col-12 col-md-4 text-center d-none d-lg-block">
<div> <small class="text-body-secondary">{PHP.L.Lastpost} {FORUM_ROW_LAST_POSTER_NAME}</small></div>
<small class="text-body-secondary">{FORUM_ROW_UPDATED_STAMP|cot_date('datetime_medium', $this)}</small>
<small class="text-body-secondary">{FORUM_ROW_PATH_SHORT}</small>
</div>
</div>
</li>
<!-- END: TOPICS_ROW -->
<!-- BEGIN: NO_TOPICS_FOUND -->
<div class="list-group-item text-center text-muted py-3">{PHP.L.recentitems_nonewposts}</div>
<!-- END: NO_TOPICS_FOUND -->
</div>
<!-- END: MAIN -->
имейте ввиду, после обновления плагина при обновлении движка - всё слетит!