diff --git a/README.md b/README.md index 2af7b79..a3d3ad1 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,12 @@ * Пагинация работает только для родительских комментариев, количество ответов (дети и внуки) на родительский комментарий - задается в Админ панели отдельно. Если общее количество ответов превышает лимит ответов, установленный в Админке, будет выведена кнопка Показать еще N ответов, при клике по которой AJAX подгрузит и выведет оставшиеся комментарии на страницу. * Сортировка * В админ панели доступен поиск комментария по следующим параметрам: по Имени, IP адресу, по тексту комментария. Сортировка: сначала новые, сначала старые, популярные (согласно Рейтингу пользователей), обсуждаемые - по количеству ответов на комментарий-родитель, оценки Автора (у кого больше всех звезд). Фильтрация: выводить все сообщения, только с файлами, только скрытые. Вывод комментариев по умолчанию - плоский список, но для удобства есть и древовидный список, что позволяет видеть сразу всю ветку. Количество на странице: выводит желаемое количество комментариев на страницу. Период: вам доступен календарь, в котором вы сами выбираете нужный вам период для просмотра - от и до. + * В публичной части также можно менять вывод комментариев (выбирается в Настройках модуля): + * Сначала старые (новые внизу) + * Сначала новые (старые внизу) + * По общему рейтингу (лучшие вверху) + * По оценке Автора (кол-ву звезд) + * Важно! В ветках потомки выводятся по принципу сначала старые (новые внизу), что-бы не рушить визуальную иерархию ответов. * Эмодзи * Модуль использует кодировку utf8mb4, что позволяет использовать в тексте комментариев эмодзи, например такие: 😀 😁 😂 🤣 😃 😄 😅 😆 😉 😊 😋 😎 😍 😘 😗 😙 😚 🙂 🤗 🤩 * Шаблоны (файлы .tpl) отвечающие за вывод в публичную часть: @@ -91,5 +97,4 @@ https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css ``` ``` -https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css -``` \ No newline at end of file +https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css \ No newline at end of file diff --git a/class/comment.php b/class/comment.php index 2f6a4a4..71ec488 100644 --- a/class/comment.php +++ b/class/comment.php @@ -7,7 +7,7 @@ * @author Александр Сальников (Repellent) * @copyright 2026 * @subpackage module_Comment - * @since 3.33 + * @since 3.34 * @filesource */ class Comment @@ -499,7 +499,19 @@ function commentListShow($tpl_dir) $page_nav = ''; } - // --- AJAX ЛИМИТЫ --- + // --- СНАЧАЛА ДЕТИ ВСЕГДА ОТ СТАРЫХ К НОВЫМ (Причесываем всю очередь) --- + if (!empty($comments)) { + foreach ($comments as $parentId => &$subList) { + if ($parentId > 0) { + usort($subList, function($a, $b) { + return $a['comment_published_raw'] <=> $b['comment_published_raw']; + }); + } + } + unset($subList); + } + + // --- И ТОЛЬКО ПОТОМ AJAX ЛИМИТЫ (Отрезаем лишнее от уже правильной очереди) --- $assign['more_counts'] = []; $requested_branch = (int)($_REQUEST['ajax_load_branch'] ?? 0); @@ -510,6 +522,7 @@ function commentListShow($tpl_dir) continue; } $assign['more_counts'][$parentId] = count($subList) - $assign['ajax_replies_limit']; + // Теперь array_slice заберет именно ПЕРВЫЕ (старые) ответы $comments[$parentId] = array_slice($subList, 0, $assign['ajax_replies_limit']); } } @@ -1838,6 +1851,20 @@ if ($res_locked) { if ($p_id > 0) $child_map[$p_id][] = $id; } + // --- Сортируем детей внутри карты веток --- + // Делаем это только если вид НЕ линейный + if ($view_mode != 'flat' && !empty($child_map)) { + foreach ($child_map as $p_id => &$children) { + usort($children, function($a, $b) use ($all_items) { + // Сравниваем по дате публикации из основного массива данных + $timeA = (int)$all_items[$a]['comment_published']; + $timeB = (int)$all_items[$b]['comment_published']; + return $timeA <=> $timeB; + }); + } + unset($children); + } + foreach ($all_items as $id => &$item_for_check) { $item_for_check['has_children'] = isset($child_map[$id]) ? 1 : 0; } diff --git a/info.php b/info.php index 71f79f3..7f3890e 100644 --- a/info.php +++ b/info.php @@ -3,7 +3,7 @@ if (!defined('BASE_DIR')) exit; $module = array( 'ModuleSysName' => 'comment', - 'ModuleVersion' => '3.34', + 'ModuleVersion' => '3.35', 'ModuleAutor' => 'Repellent', 'ModuleCopyright' => '© 2025-' . date('Y') . ' ave4cms.ru', 'ModuleStatus' => 1, diff --git a/templates/view_logs.tpl b/templates/view_logs.tpl index 7a6a9ba..906cecb 100644 --- a/templates/view_logs.tpl +++ b/templates/view_logs.tpl @@ -83,6 +83,9 @@