From 43ba68eea8b77c50161fb27910c817c89288255f Mon Sep 17 00:00:00 2001 From: Repellent Date: Mon, 19 Jan 2026 13:43:39 +0500 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D0=B2=D0=B8=D0=B4=D0=B6?= =?UTF-8?q?=D0=B5=D1=82=D0=B0=20=D0=9F=D0=BE=D1=81=D0=BB=D0=B5=D0=B4=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD=D1=82=D0=B0?= =?UTF-8?q?=D1=80=D0=B8=D0=B8=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=B2=20=D1=82=D0=B5=D0=B3=20=D0=B2=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D0=BE=D0=B9=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80?= =?UTF-8?q?=20-=20=D0=BA=D0=BE=D0=BB=D0=B8=D1=87=D0=B5=D1=81=D1=82=D0=B2?= =?UTF-8?q?=D0=BE=20=D1=81=D0=B8=D0=BC=D0=B2=D0=BE=D0=BB=D0=BE=D0=B2=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=80=D0=B8?= =?UTF-8?q?=D1=8F=20[mod=5Fcomment:X:Y]=20,=20=D0=B3=D0=B4=D0=B5=20X=20-?= =?UTF-8?q?=20=D1=87=D0=B8=D1=81=D0=BB=D0=BE=20=D0=BA=D0=BE=D0=BC=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=B0=D1=80=D0=B8=D0=B5=D0=B2=20=D0=B2=D1=8B?= =?UTF-8?q?=D0=B2=D0=BE=D0=B4=D0=B8=D0=BC=D1=8B=D1=85=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D1=83,=20=D0=B0=20Y?= =?UTF-8?q?=20-=20=D1=87=D0=B8=D1=81=D0=BB=D0=BE=20=D1=81=D0=B8=D0=BC?= =?UTF-8?q?=D0=B2=D0=BE=D0=BB=D0=BE=D0=B2=20=D0=B2=20=D1=82=D0=B5=D0=BA?= =?UTF-8?q?=D1=81=D1=82=D0=B5=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=D0=B8=D0=BC?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=B0=D1=80=D0=B8=D1=8F.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 16 ++++++++++++++-- class/comment.php | 4 ++-- info.php | 4 ++-- module.php | 28 ++++++++++++---------------- 4 files changed, 30 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 1cffc38..3c9a6de 100644 --- a/README.md +++ b/README.md @@ -36,8 +36,20 @@ * Если Анонимный пользователь, в течении жизни куки, сменит имя под которым он опубликовал свой первый комментарий, рядом с именем появится плашка с тултипом в котором будут перечислены все его имена. * Пагинация * Пагинация работает только для родительских комментариев, количество ответов (дети и внуки) на родительский комментарий - задается в Админпанели отдельно. Если общее количество ответов превышает лимит ответов установленный из Админки, будет выведена кнопка Показать еще N ответов, при клике по которой AJAX подгрузит и выведет оставшиеся комментарии на страницу. - * Система тегов - * Для создания и вывода комментариев используйте тег [mod_comment], для вывода N-го количества последних комментариев используйте этот же тег но с числом - [mod_comment:X], где X = кол-ву выводимых комментариев на страницу. + * Система тегов: + * Тег [mod_comment] (Без параметров) - Это основной системный тег для вывода полноценного функционала на странице документа, выводит форму создания нового комментария + сами комментарии. + * Тег [mod_comment:X] (Один параметр) - Выводит виджет последних комментариев, где X - количество выводимых комментариев, количество символов текста комментария равно 150 по умолчанию. + * Тег [mod_comment:X:Y] (Два параметра) - Выводит виджет последних комментариев, где X - количество выводимых комментариев, а Y - количество символов в тексте комментария. +#### Сводная таблица параметров по умолчанию +| Тег | Лимит (X) | Обрезка текста (Y) | Режим вывода | +| --- | --- | --- | --- | +| [mod_comment] | — | 1000 | Полный список + Форма | +| [mod_comment:10] | 10 | 150 | Виджет (last_comments.tpl) | +| [mod_comment:5:200] | 5 | 200 | Виджет (last_comments.tpl) | + + + + , для вывода N-го количества последних комментариев используйте этот же тег но с числом - [mod_comment:X], где X = кол-ву выводимых комментариев на страницу. ### Для AJAX работы модуля не забудьте подключить: #### JS: diff --git a/class/comment.php b/class/comment.php index c94e519..de1d71e 100644 --- a/class/comment.php +++ b/class/comment.php @@ -1820,7 +1820,7 @@ function commentAdminSettingsEdit($tpl_dir) /** * Метод для получения последних X комментариев */ -function getLatestComments($limit = 10) +function getLatestComments($limit = 10, $chars = 150) { global $AVE_DB; @@ -1845,7 +1845,7 @@ function getLatestComments($limit = 10) $row = array_change_key_case($res, CASE_LOWER); // Обработка текста комментария - $row['comment_text'] = mb_strimwidth(strip_tags($row['comment_text'] ?? ''), 0, 150, "..."); + $row['comment_text'] = mb_strimwidth(strip_tags($row['comment_text'] ?? ''), 0, (int)$chars, "..."); $row['date'] = ave_date_format(get_settings('date_format'), $row['comment_published']); // Логика аватара (системный или буквенный) diff --git a/info.php b/info.php index 9480dcb..5f25745 100644 --- a/info.php +++ b/info.php @@ -13,7 +13,7 @@ $module = array( 'ModuleFunction' => 'mod_comment', 'ModuleTag' => '[mod_comment]', 'ModuleTagLink' => null, - 'ModuleAveTag' => '#\\\[mod_comment(:[\\\d]+)?]#', - 'ModulePHPTag' => '' + 'ModuleAveTag' => '#\\\[mod_comment(:[\\\d:]+)?]#', + 'ModulePHPTag' => '' ); ?> \ No newline at end of file diff --git a/module.php b/module.php index 349ee53..673f2a8 100644 --- a/module.php +++ b/module.php @@ -10,41 +10,37 @@ if(!defined('BASE_DIR')) exit; -/** - * Функция, предназначенная для вывода списка комментариев к данному документу. - * Она будет выполнена при парсинге шаблона вместо системного тега [mod_comment]. - */ function mod_comment($param = '') { global $AVE_Template; - // 1. Подключаем класс require_once(BASE_DIR . '/modules/comment/class/comment.php'); $comment = new Comment; - // 2. Проверяем: если в теге передана цифра [mod_comment:5] - // $param может прийти в виде ":5" или просто "5" в зависимости от парсера - $limit = (int)str_replace(':', '', $param); + // Разбиваем строку (например, ":1:100") по двоеточию + $p = explode(':', ltrim($param, ':')); + + // X - количество комментариев + $limit = (isset($p[0]) && $p[0] > 0) ? (int)$p[0] : 0; + + // Y - количество символов (по умолчанию 150) + $chars = (isset($p[1]) && $p[1] > 0) ? (int)$p[1] : 150; if ($limit > 0) { - // --- РЕЖИМ "ПОСЛЕДНИЕ ОТЗЫВЫ" --- $tpl_dir = BASE_DIR . '/modules/comment/templates/'; - // Загружаем переводы (даты, заголовки) $lang_file = BASE_DIR . '/modules/comment/lang/' . ($_SESSION['user_language'] ?? 'ru') . '.txt'; if (file_exists($lang_file)) $AVE_Template->config_load($lang_file, 'module'); - // Берем данные из метода - $items = $comment->getLatestComments($limit); + // Передаем в метод ДВА значения: лимит и обрезку + $items = $comment->getLatestComments($limit, $chars); $AVE_Template->assign('last_comments_items', $items); - // Выводим специальный шаблон для виджета echo $AVE_Template->fetch($tpl_dir . 'last_comments.tpl'); - return; // Выходим, чтобы под виджетом не вылез список комментов статьи + return; } - // --- СТАНДАРТНЫЙ РЕЖИМ (список под статьей) --- - // Если параметров нет или это обычный [mod_comment] + // --- СТАНДАРТНЫЙ РЕЖИМ --- $tpl_dir = BASE_DIR . '/modules/comment/templates/'; $lang_file = BASE_DIR . '/modules/comment/lang/' . ($_SESSION['user_language'] ?? 'ru') . '.txt'; if (file_exists($lang_file)) $AVE_Template->config_load($lang_file, 'module');