From 4a44e350bac1a6be360b7665c7b24cdf34d4a2dc Mon Sep 17 00:00:00 2001 From: Repellent Date: Mon, 15 Dec 2025 21:05:27 +0500 Subject: [PATCH] =?UTF-8?q?=D1=87=D0=B8=D0=BD=D0=B8=D0=BC=20=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=D1=83=20=D0=BF=D0=B0=D0=B3=D0=B8=D0=BD=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- class/comment.php | 162 ++++++++++++++++++++----------------- css/mod_comment_styles.css | 78 +++++++++++++++++- 2 files changed, 161 insertions(+), 79 deletions(-) diff --git a/class/comment.php b/class/comment.php index a42cb6f..ad05ec9 100644 --- a/class/comment.php +++ b/class/comment.php @@ -173,7 +173,7 @@ class Comment * Следующие методы описывают работу модуля в Публичной части сайта. */ - /** +/** * Метод, предназначенный для получения из БД всех комментариев, относящихся к указанному * документу с последующим выводом в Публичной части. * @@ -206,9 +206,9 @@ class Comment if (!in_array($user_group, $read_groups)) { // Устанавливаем флаг, что прав на чтение нет - $assign['no_read_permission'] = 1; + $assign['no_read_permission'] = 1; } - // ================================================================================= + // ================================================================================= $assign['display_comments'] = 1; @@ -219,78 +219,91 @@ class Comment { $assign['cancomment'] = 1; } - - // ЕСЛИ ЕСТЬ ПРАВА НА ЧТЕНИЕ, ПРОДОЛЖАЕМ ВЫБОРКУ И ВЫВОД - if ($assign['no_read_permission'] == 0) - { - $assign['comment_max_chars'] = $this->_commentSettingsGet('comment_max_chars'); - $assign['im'] = $this->_commentSettingsGet('comment_use_antispam'); + + // ЕСЛИ ЕСТЬ ПРАВА НА ЧТЕНИЕ, ПРОДОЛЖАЕМ ВЫБОРКУ И ВЫВОД + if ($assign['no_read_permission'] == 0) + { + $assign['comment_max_chars'] = $this->_commentSettingsGet('comment_max_chars'); + $assign['im'] = $this->_commentSettingsGet('comment_use_antispam'); - // Выполняем запрос к БД на получение количества комментариев для текущего документа - $comments = array(); + // Выполняем запрос к БД на получение количества комментариев для текущего документа + $comments = array(); - if ($this->_commentSettingsGet('comment_use_page_nav') == 1) - { - $limit = $this->_commentSettingsGet('comment_page_nav_count'); - $start = get_current_page() * $limit - $limit; + if ($this->_commentSettingsGet('comment_use_page_nav') == 1) + { + $limit = $this->_commentSettingsGet('comment_page_nav_count'); + $start = get_current_page() * $limit - $limit; - $num = $AVE_DB->Query(" - SELECT COUNT(*) - FROM " . PREFIX . "_module_comment_info - WHERE document_id = '" . $document_id . "' - ")->GetCell(); + $num = $AVE_DB->Query(" + SELECT COUNT(*) + FROM " . PREFIX . "_module_comment_info + WHERE document_id = '" . $document_id . "' + ")->GetCell(); - $sql = $AVE_DB->Query(" - SELECT * - FROM " . PREFIX . "_module_comment_info - WHERE document_id = '" . $document_id . "' - " . ($user_group == 1 ? '' : "AND comment_status = '1'") . " - ORDER BY comment_published ASC - LIMIT " . $start . "," . $limit . " - "); + $sql = $AVE_DB->Query(" + SELECT * + FROM " . PREFIX . "_module_comment_info + WHERE document_id = '" . $document_id . "' + " . ($user_group == 1 ? '' : "AND comment_status = '1'") . " + ORDER BY comment_published ASC + LIMIT " . $start . "," . $limit . " + "); - $pages = @ceil($num / $limit); + $pages = @ceil($num / $limit); - if ($num > $limit) - { - $page_nav = '{t} '; - $page_nav = get_pagination(ceil($num / $limit), 'page', $page_nav, get_settings('navi_box')); - $page_nav = rewrite_link($page_nav); - $GLOBALS['page_id'][$document_id]['page']=($GLOBALS['page_id'][$document_id]['page']>ceil($num / $limit) ? $GLOBALS['page_id'][$document_id]['page'] : ceil($num / $limit)); - } - else - { - $page_nav = ''; - } + if ($num > $limit) + { + $page_nav = '{t} '; + $page_nav = get_pagination(ceil($num / $limit), 'page', $page_nav, get_settings('navi_box')); + + // *** ПРИМЕНЯЕМ КОСТЫЛИ ИЗ РЕАЛИЗАЦИИ ЗАПРОСОВ ДЛЯ ЧПУ *** + // 1. Применяем rewrite_link и очищаем от тройных/двойных слешей + $page_nav = str_ireplace('"//"', '"/"', str_ireplace('///', '/', rewrite_link($page_nav))); + + // 2. Очищаем от URL_SUFF, если он есть (хотя это, возможно, не нужно для комментариев) + // (Я опущу эту строку, так как она специфична для главной страницы.) + // $page_nav = str_ireplace('"//' . URL_SUFF . '"', '"/"', $page_nav); + + // 3. Запускаем более общую очистку, если там есть Query (GET-параметры), + // что гарантирует удаление двойных слешей, которые могут появиться в пути + $page_nav = preg_replace('/(?Query(" - SELECT * - FROM " . PREFIX . "_module_comment_info - WHERE document_id = '" . $document_id . "' - " . ($user_group == 1 ? '' : "AND comment_status = '1'") . " - ORDER BY comment_published ASC - "); + $GLOBALS['page_id'][$document_id]['page']=($GLOBALS['page_id'][$document_id]['page']>ceil($num / $limit) ? $GLOBALS['page_id'][$document_id]['page'] : ceil($num / $limit)); + } + else + { + $page_nav = ''; + } - $page_nav = ''; - } + } + else + { + $sql = $AVE_DB->Query(" + SELECT * + FROM " . PREFIX . "_module_comment_info + WHERE document_id = '" . $document_id . "' + " . ($user_group == 1 ? '' : "AND comment_status = '1'") . " + ORDER BY comment_published ASC + "); - // Получаем формат даты, который указан в общих настройках системы и - // приводим дату создания комментария и дату редактирования к этому формату - $date_time_format = $AVE_Template->get_config_vars('COMMENT_DATE_TIME_FORMAT'); - while ($row = $sql->FetchAssocArray()) - { + $page_nav = ''; + } - // ----------------------------------------------------- + // Получаем формат даты, который указан в общих настройках системы и + // приводим дату создания комментария и дату редактирования к этому формату + $date_time_format = $AVE_Template->get_config_vars('COMMENT_DATE_TIME_FORMAT'); + while ($row = $sql->FetchAssocArray()) + { + + // ----------------------------------------------------- // !!! НАЧАЛО: ВНЕДРЕНИЕ АВАТАРА !!! // ----------------------------------------------------- - if (isset($row['comment_author_id']) && $row['comment_author_id'] > 0) + if (isset($row['comment_author_id']) && $row['comment_author_id'] > 0) { // Вызываем глобальную функцию getAvatar с нужным размером (48px) // и сохраняем результат в поле 'avatar' для Smarty: @@ -305,19 +318,18 @@ class Comment // ----------------------------------------------------- // !!! КОНЕЦ: ВНЕДРЕНИЕ АВАТАРА !!! // ----------------------------------------------------- - $row['comment_published'] = ave_date_format($date_time_format, $row['comment_published']); - $row['comment_changed'] = ave_date_format($date_time_format, $row['comment_changed']); + $row['comment_published'] = ave_date_format($date_time_format, $row['comment_published']); + $row['comment_changed'] = ave_date_format($date_time_format, $row['comment_changed']); - $comments[$row['parent_id']][] = $row; - } - - } - else - { - // Если нет прав, то эти переменные остаются пустыми/неопределенными - $comments = array(); - $page_nav = ''; - } + $comments[$row['parent_id']][] = $row; + } + } + else + { + // Если нет прав, то эти переменные остаются пустыми/неопределенными + $comments = array(); + $page_nav = ''; + } // Формируем ряд переменных для использования в шаблоне diff --git a/css/mod_comment_styles.css b/css/mod_comment_styles.css index 840e7ed..0446f6f 100644 --- a/css/mod_comment_styles.css +++ b/css/mod_comment_styles.css @@ -14,7 +14,6 @@ width: 48px; height: 48px; margin-right: 20px !important; - /* Убедимся, что аватар имеет правильный отступ от метаданных/текста */ /* margin-right: 15px; */ /* Если вы используете me-3 в HTML, этот CSS не нужен */ } @@ -31,14 +30,14 @@ /* 4. Стиль метаданных (Автор, Дата, IP) */ .mod_comment_meta { /* Делаем блок метаданных компактнее и выравниваем по верхнему краю */ - line-height: 1.2; + line-height: 1.2; margin-bottom: 5px !important; /* Чуть меньше отступ от текста */ } /* 5. Стили текста комментария */ .mod_comment_text { /* Увеличиваем межстрочный интервал для лучшей читабельности */ - line-height: 1.5; + line-height: 1.5; } /* 6. Стили панели действий (Редактировать, Удалить, Ответить) */ @@ -66,7 +65,7 @@ padding-left: 15px; /* Отступ между линией и контентом ответа */ /* Опционально: немного отличающийся фон */ - background-color: #f8f9fa; + background-color: #f8f9fa; } /* 2. Отдельно стилизуем рамку для вложенных карточек, чтобы они не выглядели @@ -85,4 +84,75 @@ .mod_comment_comment .mod_comment_comment.ms-4 .mod_comment_comment.ms-4 { border-color: #adb5bd; /* Чуть темнее линия для следующего уровня */ background-color: #fff; /* Возвращаем белый фон для контраста */ +} + + +/* ==================================================================== + !!! ФИНАЛЬНЫЕ СТИЛИ ДЛЯ ПАГИНАЦИИ !!! + ==================================================================== */ + +/* 1. Общий контейнер, который окружает