diff --git a/ReadMe.txt b/ReadMe.txt index c60942d..ce3d7e1 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -1,13 +1,3 @@ -Шаг 1: Назначение перемнных в шаблоне - - - -Шаг 2: Нужен плагин для jQuery - jquery.form -http://malsup.com/jquery/form/ - Добавить в шаблон \ No newline at end of file diff --git a/class/comment.php b/class/comment.php index 272ed27..88d33e3 100644 --- a/class/comment.php +++ b/class/comment.php @@ -303,14 +303,34 @@ function commentListShow($tpl_dir) while ($row = $sql->FetchAssocArray()) { - if (isset($row['comment_author_id']) && $row['comment_author_id'] > 0) - { - $row['avatar'] = getAvatar($row['comment_author_id'], 48); - } - else - { - $row['avatar'] = ''; - } +// 1. Получаем аватар через стандартную функцию системы + if (isset($row['comment_author_id']) && $row['comment_author_id'] > 0) + { + $row['avatar'] = getAvatar($row['comment_author_id'], 48); + } + else + { + $row['avatar'] = ''; + } + + // 2. ПРОВЕРКА: Если функция вернула системную заглушку, считаем, что аватара нет + if (!empty($row['avatar']) && strpos($row['avatar'], 'user.png') !== false) + { + $row['avatar'] = ''; + } + + // 3. ЛОГИКА БУКВ: Если аватара нет (пусто или мы его обнулили выше) + if (empty($row['avatar'])) + { + // Берем имя автора (если пусто — 'Guest') + $name = !empty($row['comment_author_name']) ? stripslashes($row['comment_author_name']) : 'Guest'; + + // Получаем первую букву имени (в верхнем регистре) + $row['first_letter'] = mb_substr(trim($name), 0, 1, 'UTF-8'); + + // Вычисляем индекс цвета (от 1 до 8) на основе имени + $row['avatar_color_index'] = (abs(crc32($name)) % 12) + 1; + } // --- ИСПРАВЛЕННАЯ ЛОГИКА ТАЙМЕРА И ПРАВ (УЧЕТ АДМИНА) --- $row['can_edit'] = 0; @@ -560,7 +580,22 @@ exit; if ($ajax) { - $new_comment['avatar'] = (isset($new_comment['comment_author_id']) && $new_comment['comment_author_id'] > 0) ? getAvatar($new_comment['comment_author_id'], 48) : ''; + // 1. Получаем аватар как обычно +$new_comment['avatar'] = (isset($new_comment['comment_author_id']) && $new_comment['comment_author_id'] > 0) ? getAvatar($new_comment['comment_author_id'], 48) : ''; + +// 2. Очищаем, если это системный user.png +if (!empty($new_comment['avatar']) && strpos($new_comment['avatar'], 'user.png') !== false) +{ + $new_comment['avatar'] = ''; +} + +// 3. Если аватара нет — генерируем данные для буквы +if (empty($new_comment['avatar'])) +{ + $name = !empty($new_comment['comment_author_name']) ? stripslashes($new_comment['comment_author_name']) : 'Guest'; + $new_comment['first_letter'] = mb_substr(trim($name), 0, 1, 'UTF-8'); + $new_comment['avatar_color_index'] = (abs(crc32($name)) % 12) + 1; +} $new_comment['comment_changed'] = 0; // Передаем флаги для мгновенной активации управления в шаблоне diff --git a/css/mod_comment_styles.css b/css/mod_comment_styles.css index e7e5bf3..db57029 100644 --- a/css/mod_comment_styles.css +++ b/css/mod_comment_styles.css @@ -1,108 +1,109 @@ /* ==================================================================== - ОБЩИЕ СТИЛИ КОММЕНТАРИЕВ И АВАТАРОВ (НОВЫЕ И ОБНОВЛЕННЫЕ) + ОБЩИЕ СТИЛИ КОММЕНТАРИЕВ И АВАТАРОВ ==================================================================== */ /* 1. Общие настройки для блока комментария */ .mod_comment_comment { - /* Можно добавить небольшой отступ снизу, если стандартный mb-3 недостаточен */ - /* margin-bottom: 1.5rem !important; */ + /* Резерв для кастомных отступов */ } /* 2. Контейнер аватара */ .mod_comment_avatar { - /* Фиксируем размер и убедимся, что аватар не "съедет" */ width: 48px; height: 48px; - margin-right: 20px !important; - /* Убедимся, что аватар имеет правильный отступ от метаданных/текста */ - /* margin-right: 15px; */ /* Если вы используете me-3 в HTML, этот CSS не нужен */ + margin-right: 1rem !important; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; } /* 3. Стиль изображения аватара */ .mod_comment_avatar img { - /* Если rounded-circle не работает или его нет в Bootstrap */ - border-radius: 50%; - width: 100%; - height: 100%; - object-fit: cover; /* Гарантирует, что изображение не исказится */ + border-radius: 50% !important; + width: 48px !important; + height: 48px !important; + object-fit: cover !important; } /* 4. Стиль метаданных (Автор, Дата, IP) */ .mod_comment_meta { - /* Делаем блок метаданных компактнее и выравниваем по верхнему краю */ line-height: 1.2; - margin-bottom: 5px !important; /* Чуть меньше отступ от текста */ + margin-bottom: 0.5rem !important; + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 5px 15px; /* Удобный отступ между элементами */ } /* 5. Стили текста комментария */ .mod_comment_text { - /* Увеличиваем межстрочный интервал для лучшей читабельности */ line-height: 1.5; + word-wrap: break-word; + overflow-wrap: break-word; } -/* 6. Стили панели действий (Редактировать, Удалить, Ответить) */ -.mod_comment_actions a { - text-decoration: none; - font-size: 0.9em; - padding-left: 10px; - padding-right: 10px; +/* 6. Прикрепленные изображения */ +.mod_comment_attached_image img { + max-width: 100%; + height: auto; + max-height: 300px; } +/* 7. СТИЛИ ДЛЯ БУКВЕННЫХ АВАТАРОВ */ +.mod_comment_avatar_letter { + width: 100%; + height: 100%; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + font-weight: bold; + color: #ffffff; + font-size: 1.2rem; + text-transform: uppercase; + user-select: none; + box-shadow: inset 0 0 5px rgba(0,0,0,0.1); +} + +/* Цветовая палитра для аватаров */ +.av-c1 { background-color: #6c5ce7; } +.av-c2 { background-color: #2ecc71; } +.av-c3 { background-color: #e67e22; } +.av-c4 { background-color: #e91e63; } +.av-c5 { background-color: #00cec9; } +.av-c6 { background-color: #0984e3; } +.av-c7 { background-color: #d63031; } +.av-c8 { background-color: #636e72; } +.av-c9 { background-color: #fdcb6e; } +.av-c10 { background-color: #fd79a8; } +.av-c11 { background-color: #a29bfe; } +.av-c12 { background-color: #273c75; } /* ==================================================================== - СТИЛИ ДЛЯ ДРЕВОВИДНОГО ОТОБРАЖЕНИЯ КОММЕНТАРИЕВ (Replies) - ВАШ КОД + СТИЛИ ДЛЯ ДРЕВОВИДНОГО ОТОБРАЖЕНИЯ (Replies) ==================================================================== */ -/* 1. Общий контейнер ответа, который находится внутри .mod_comment_comment - и имеет отступ ms-4 */ .mod_comment_comment .mod_comment_comment.ms-4 { - /* Добавляем вертикальную линию слева */ - border-left: 3px solid #dee2e6; /* Легкая граница */ - - /* Уменьшаем margin-left, который дает ms-4, чтобы освободить место - для линии и при этом не уходить слишком далеко вправо на каждом уровне. */ - margin-left: 20px !important; /* Принудительно уменьшаем отступ */ - padding-left: 15px; /* Отступ между линией и контентом ответа */ - - /* Опционально: немного отличающийся фон */ + border-left: 3px solid #dee2e6; + margin-left: 20px !important; + padding-left: 15px; background-color: #f8f9fa; } -/* 2. Отдельно стилизуем рамку для вложенных карточек, чтобы они не выглядели - громоздко внутри родителя */ .mod_comment_comment .mod_comment_comment.ms-4 > .mod_comment_box { - border: none !important; /* Убираем стандартную рамку карточки, чтобы осталась только наша вертикальная линия */ + border: none !important; } -/* 3. Убираем рамки у вложенных заголовков, чтобы линия была чистой */ -.mod_comment_comment .mod_comment_comment.ms-4 > .mod_comment_box > .card-header { - border-bottom: none !important; -} - -/* 4. Более глубокий уровень вложенности (если ответов много) */ -/* Если ответ на ответ имеет дополнительный ms-4, стилизуем его дальше */ -.mod_comment_comment .mod_comment_comment.ms-4 .mod_comment_comment.ms-4 { - border-color: #adb5bd; /* Чуть темнее линия для следующего уровня */ - background-color: #fff; /* Возвращаем белый фон для контраста */ -} - - /* ==================================================================== - !!! ФИНАЛЬНЫЕ СТИЛИ ДЛЯ ПАГИНАЦИИ !!! + СТИЛИ ДЛЯ ПАГИНАЦИИ ==================================================================== */ -/* 1. Общий контейнер, который окружает