From 9cc11571a0a933370eabf55e0facba7e0c952459 Mon Sep 17 00:00:00 2001 From: Repellent Date: Sat, 20 Dec 2025 23:55:02 +0500 Subject: [PATCH] =?UTF-8?q?=D0=B2=D1=8B=D0=B1=D0=B8=D1=80=D0=B0=D0=B5?= =?UTF-8?q?=D0=BC=20=D0=B2=20=D0=B0=D0=B4=D0=BC=D0=B8=D0=BD=D0=BA=D0=B5=20?= =?UTF-8?q?=D0=BB=D0=B8=D0=B1=D0=BE=20=D0=B7=D0=B2=D0=B5=D0=B7=D0=B4=D1=8B?= =?UTF-8?q?=20=D0=BB=D0=B8=D0=B1=D0=BE=20=D1=81=D0=B5=D1=80=D0=B4=D0=B5?= =?UTF-8?q?=D1=87=D0=BA=D0=B8=20=D0=BB=D0=B8=D0=B1=D0=BE=20=D1=80=D0=B5?= =?UTF-8?q?=D0=B9=D1=82=D0=B8=D0=BD=D0=B3=20=D0=BE=D1=82=D0=BA=D0=BB=D1=8E?= =?UTF-8?q?=D1=87=D0=B5=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- class/comment.php | 4 +++ js/comment.js | 23 ++++++++++++---- sql.php | 17 ++++++------ templates/admin_settings.tpl | 23 ++++++++++++++++ templates/comments_tree_sub.tpl | 48 ++++++++++++++++++++++----------- 5 files changed, 86 insertions(+), 29 deletions(-) diff --git a/class/comment.php b/class/comment.php index c76ab9e..4b6324f 100644 --- a/class/comment.php +++ b/class/comment.php @@ -1214,6 +1214,9 @@ function commentPostDelete($comment_id) // НОВОЕ: Настройка разрешения загрузки файлов $post_allow_files = $_POST['comment_allow_files'] ?? 0; + // НОВОЕ: Тип рейтинга (0 - звезды, 1 - лайки) + $post_rating_type = $_POST['comment_rating_type'] ?? 0; + // Данные для универсальных полей $post_show_f1 = $_POST['comment_show_f1'] ?? 0; $post_req_f1 = $_POST['comment_req_f1'] ?? 0; @@ -1242,6 +1245,7 @@ function commentPostDelete($comment_id) comment_use_page_nav = '" . (int)$post_use_page_nav . "', comment_page_nav_count = '" . (int)$post_page_nav_count . "', comment_allow_files = '" . (int)$post_allow_files . "', + comment_rating_type = '" . (int)$post_rating_type . "', comment_show_f1 = '" . (int)$post_show_f1 . "', comment_req_f1 = '" . (int)$post_req_f1 . "', comment_name_f1 = '" . $clean_name_f1 . "', diff --git a/js/comment.js b/js/comment.js index c9678a2..42efdad 100644 --- a/js/comment.js +++ b/js/comment.js @@ -121,8 +121,23 @@ // --- ЛОГИКА ГОЛОСОВАНИЯ (РЕЙТИНГ) --- $doc.on('mouseenter', '.star-item', function() { - $(this).prevAll().addBack().removeClass('bi-star').addClass('bi-star-fill'); - $(this).nextAll().removeClass('bi-star-fill').addClass('bi-star'); + var $parent = $(this).parent(); + // Если это лайки (сердце) + if ($parent.hasClass('comment-like')) { + $(this).css('transform', 'scale(1.2)'); + } + // Если это звезды + else { + $(this).prevAll().addBack().removeClass('bi-star').addClass('bi-star-fill'); + $(this).nextAll().removeClass('bi-star-fill').addClass('bi-star'); + } + }); + + $doc.on('mouseleave', '.star-item', function() { + var $parent = $(this).parent(); + if ($parent.hasClass('comment-like')) { + $(this).css('transform', 'scale(1)'); + } }); $doc.on('mouseleave', '.comment-stars', function() { @@ -135,18 +150,16 @@ var voteValue = $(this).data('value'); $.ajax({ - // Используем относительный путь для избежания проблем с протоколом HTTPS/HTTP url: 'index.php?module=comment&action=vote&ajax=1', type: 'POST', data: { comment_id: commentId, vote: voteValue, - ajax: 1 // Дублируем для надежности + ajax: 1 }, success: function(response) { var res = response.toString().trim(); - // Проверяем наличие ключевого слова в ответе (защита от варнингов PHP) if (res.indexOf('success') !== -1) { $container.html('Спасибо!'); setTimeout(function(){ location.reload(); }, 1000); diff --git a/sql.php b/sql.php index f509ea4..78aa591 100644 --- a/sql.php +++ b/sql.php @@ -3,7 +3,7 @@ /** * AVE.cms - Модуль Комментарии * - * Обновленная структура с поддержкой рейтинга (звезд), + * Обновленная структура с поддержкой выбора типа рейтинга (звезды/лайки), * идентификации анонимных пользователей, загрузки файлов и защиты по IP. */ @@ -36,6 +36,7 @@ $module_sql_install[] = "CREATE TABLE `%%PRFX%%_module_comments` ( `comment_name_f2` varchar(255) NOT NULL default '', `comment_allow_files` tinyint(1) NOT NULL default '0', `comment_file_max_size` int(10) NOT NULL default '2048', + `comment_rating_type` tinyint(1) NOT NULL default '0', /* 0 - звезды, 1 - лайки */ PRIMARY KEY (`Id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;"; @@ -48,7 +49,7 @@ $module_sql_install[] = "CREATE TABLE `%%PRFX%%_module_comment_info` ( `comment_author_email` varchar(255) NOT NULL, `comment_author_city` varchar(255) NOT NULL, `comment_author_website` varchar(255) NOT NULL, - `comment_author_ip` varchar(45) NOT NULL, /* Увеличено для поддержки IPv6 */ + `comment_author_ip` varchar(45) NOT NULL, `anon_key` varchar(32) DEFAULT NULL, `comment_published` int(10) unsigned NOT NULL default '0', `comment_changed` int(10) unsigned NOT NULL default '0', @@ -66,13 +67,12 @@ $module_sql_install[] = "CREATE TABLE `%%PRFX%%_module_comment_info` ( KEY `anon_key` (`anon_key`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;"; -// Таблица для хранения истории голосов (Добавлено поле remote_addr для защиты по IP) $module_sql_install[] = "CREATE TABLE `%%PRFX%%_module_comment_votes` ( `id` int(10) unsigned NOT NULL auto_increment, `comment_id` int(10) unsigned NOT NULL, `user_id` int(10) unsigned DEFAULT '0', `anon_key` varchar(32) DEFAULT '', - `remote_addr` varchar(45) DEFAULT '', /* Поле для хранения IP проголосовавшего */ + `remote_addr` varchar(45) DEFAULT '', `vote_value` tinyint(1) NOT NULL, `date_voted` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), @@ -82,7 +82,8 @@ $module_sql_install[] = "CREATE TABLE `%%PRFX%%_module_comment_votes` ( KEY `remote_addr` (`remote_addr`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;"; -$module_sql_install[] = "INSERT INTO `%%PRFX%%_module_comments` VALUES (1, 1000, '1,3', '1,2,3,4', '0', '1', '1' , '0', '', 1, 0, '', 1, 0, '', 0, 2048);"; +/* Добавили 0 в конце для comment_rating_type */ +$module_sql_install[] = "INSERT INTO `%%PRFX%%_module_comments` VALUES (1, 1000, '1,3', '1,2,3,4', '0', '1', '1' , '0', '', 1, 0, '', 1, 0, '', 0, 2048, 0);"; // ================================================================================= // 2. ОБНОВЛЕНИЕ МОДУЛЯ (ALTER TABLE) @@ -98,12 +99,13 @@ $module_sql_update[] = " LIMIT 1; "; -// Добавляем поля рейтинга в существующую таблицу +/* Добавляем переключатель типа рейтинга, если его нет */ +$module_sql_update[] = "ALTER TABLE `%%PRFX%%_module_comments` ADD COLUMN IF NOT EXISTS `comment_rating_type` TINYINT(1) NOT NULL DEFAULT '0';"; + $module_sql_update[] = "ALTER TABLE `%%PRFX%%_module_comment_info` ADD `rating_sum` INT(10) NOT NULL DEFAULT '0';"; $module_sql_update[] = "ALTER TABLE `%%PRFX%%_module_comment_info` ADD `rating_count` INT(10) NOT NULL DEFAULT '0';"; $module_sql_update[] = "ALTER TABLE `%%PRFX%%_module_comment_info` MODIFY `comment_author_ip` VARCHAR(45) NOT NULL;"; -// Создаем таблицу голосов с полем IP, если её еще нет $module_sql_update[] = "CREATE TABLE IF NOT EXISTS `%%PRFX%%_module_comment_votes` ( `id` int(10) unsigned NOT NULL auto_increment, `comment_id` int(10) unsigned NOT NULL, @@ -119,7 +121,6 @@ $module_sql_update[] = "CREATE TABLE IF NOT EXISTS `%%PRFX%%_module_comment_vote KEY `remote_addr` (`remote_addr`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;"; -// Если таблица уже была, но поля remote_addr в ней нет — добавляем его $module_sql_update[] = "ALTER TABLE `%%PRFX%%_module_comment_votes` ADD COLUMN IF NOT EXISTS `remote_addr` VARCHAR(45) DEFAULT '' AFTER `anon_key`;"; ?> \ No newline at end of file diff --git a/templates/admin_settings.tpl b/templates/admin_settings.tpl index bf6c798..e9eb0d6 100644 --- a/templates/admin_settings.tpl +++ b/templates/admin_settings.tpl @@ -112,6 +112,29 @@ + + Система оценки комментариев + + + Тип рейтинга: + +
+ + + + + + + + + + + + +
+ + + Настройки медиафайлов diff --git a/templates/comments_tree_sub.tpl b/templates/comments_tree_sub.tpl index f204454..7e4ba3a 100644 --- a/templates/comments_tree_sub.tpl +++ b/templates/comments_tree_sub.tpl @@ -28,24 +28,40 @@ {$c.comment_published} - {* ----- БЛОК РЕЙТИНГА (ЗВЕЗДЫ) ----- *} -
-
- {assign var="avg_rating" value=0} - {if isset($c.rating_count) && $c.rating_count > 0} - {math equation="round(x / y)" x=$c.rating_sum y=$c.rating_count assign="avg_rating"} - {/if} + {* ----- БЛОК РЕЙТИНГА (ЗВЕЗДЫ ИЛИ ЛАЙКИ) ----- *} + {* Добавлена проверка на полное отключение (значение 2) *} + {if $comment_rating_type != 2} +
+ {if $comment_rating_type == 1} + {* РЕЖИМ ЛАЙКОВ (СЕРДЕЧКО) *} +
+ +
+ {if isset($c.rating_count)} + {$c.rating_count} + {/if} + {else} + {* РЕЖИМ ЗВЕЗД (1-5) - ПО УМОЛЧАНИЮ ПРИ 0 *} +
+ {assign var="avg_rating" value=0} + {if isset($c.rating_count) && $c.rating_count > 0} + {math equation="round(x / y)" x=$c.rating_sum y=$c.rating_count assign="avg_rating"} + {/if} - {section name=star start=1 loop=6} - - {/section} + {section name=star start=1 loop=6} + + {/section} +
+ {if isset($c.rating_count)} + ({$c.rating_count}) + {/if} + {/if}
- {if isset($c.rating_count)} - ({$c.rating_count}) - {/if} -
+ {/if} {* --------------------------------- *} {if $comment_show_f1 == 1 && $c.comment_author_website}