чиним работу пагинации

This commit is contained in:
2025-12-15 21:05:27 +05:00
parent 845481dc69
commit 4a44e350ba
2 changed files with 161 additions and 79 deletions

View File

@@ -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 = '<a class="page_nav" href="index.php?id=' . $AVE_Core->curentdoc->Id
. '&amp;doc=' . (empty($AVE_Core->curentdoc->document_alias) ? prepare_url($AVE_Core->curentdoc->document_title) : $AVE_Core->curentdoc->document_alias)
. ((isset($artpage) && is_numeric($artpage)) ? '&amp;artpage=' . $artpage : '')
. ((isset($apage) && is_numeric($apage)) ? '&amp;apage=' . $apage : '')
. '&amp;page={s}">{t}</a> ';
$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 = '<a class="page_nav" href="index.php?id=' . $AVE_Core->curentdoc->Id
. '&amp;doc=' . (empty($AVE_Core->curentdoc->document_alias) ? prepare_url($AVE_Core->curentdoc->document_title) : $AVE_Core->curentdoc->document_alias)
. ((isset($artpage) && is_numeric($artpage)) ? '&amp;artpage=' . $artpage : '')
. ((isset($apage) && is_numeric($apage)) ? '&amp;apage=' . $apage : '')
. '&amp;page={s}">{t}</a> ';
$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('/(?<!:)\/\//', '/', $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
");
$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 = '';
}
// Формируем ряд переменных для использования в шаблоне

View File

@@ -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. Общий контейнер, который окружает <nav> */
.page_navigation_box {
padding: 15px 0;
text-align: center;
}
/* 2. Навигационный элемент <nav> */
.page_navigation_box nav {
display: inline-block;
}
/* 3. Стиль для списка <ul>. НОВОЕ: используем класс .page_nav, который есть в HTML */
.page_navigation_box ul.page_nav {
list-style: none;
padding: 0;
margin: 0;
display: flex;
flex-wrap: wrap;
justify-content: center;
align-items: center; /* НОВОЕ: для выравнивания текста "Страница 1 из 2" */
}
/* 4. Стиль для текста "Страница 1 из 2" */
.page_navigation_box span.pages { /* НОВОЕ ПРАВИЛО */
margin-right: 15px; /* Отступ от цифр */
color: #6c757d;
}
/* 5. Элемент списка (<li>) */
.page_navigation_box li {
margin: 0 4px;
}
/* 6. Ссылки на страницы (<a>) */
/* ВАЖНО: Мы удаляем старый .page_nav_active и добавляем СТИЛИ для ССЫЛОК и АКТИВНОГО SPAN */
.page_navigation_box a.page_nav,
.page_navigation_box span.active { /* ИЗМЕНЕНИЕ: стилизуем span.active */
display: block;
min-width: 36px;
padding: 6px 10px;
line-height: 1.5;
text-decoration: none;
color: #0d6efd; /* Цвет Bootstrap Primary */
background-color: #fff;
border: 1px solid #dee2e6; /* Легкая граница */
border-radius: 4px;
transition: all 0.2s;
text-align: center;
}
/* 7. Стили для текущей (активной) страницы */
.page_navigation_box span.active { /* ТОЧНОЕ ПРАВИЛО ДЛЯ АКТИВНОГО ЭЛЕМЕНТА */
background-color: #0d6efd;
border-color: #0d6efd;
color: #fff; /* Белый текст на синем фоне */
font-weight: bold;
cursor: default;
}
/* 8. Ховер-эффект для ссылок */
.page_navigation_box a.page_nav:hover {
color: #fff;
background-color: #0b5ed7;
border-color: #0b5ed7;
}