# 1.0 Имя файла: engine/modules/favorites.php # Найти: if( $user_group[$member_id['user_group']]['allow_short'] ) $stop_list = ""; # 2.0 Добавить выше: (заменить существующий код, либо со старого убрать чекбокс и добавить новый код ниже) if (isset($_GET['list']) && $fav_access) { $list = intval($_GET['list']); // Сначала получаем количество записей $count_query = $db->super_query("SELECT COUNT(*) as total FROM " . PREFIX . "_favorites WHERE type = '{$list}' AND name = '{$user}'"); $total_records = $count_query['total']; // Определяем максимальное количество записей для GROUP_CONCAT $max_group_concat = 1000; // Ваше ограничение if ($total_records <= $max_group_concat) { // Используем GROUP_CONCAT для небольшого количества записей $list_ids = $db->super_query("SELECT GROUP_CONCAT(news_id ORDER BY date DESC) as news_id FROM " . PREFIX . "_favorites WHERE type = '{$list}' AND name = '{$user}'"); if (!empty($list_ids['news_id'])) { $all_found = true; $list_found = true; // Обрабатываем список ID $olist = explode(',', $list_ids['news_id']); // Проверяем и фильтруем ID $valid_olist = array(); foreach ($olist as $news_id) { $clean_id = intval($news_id); if ($clean_id > 0) { $valid_olist[] = $clean_id; } } if (!empty($valid_olist)) { $order_list = "ORDER BY FIND_IN_SET(id, '" . implode(",", $valid_olist) . "')"; if ($mod != 'collections') { $favorites = "(" . implode(",", $valid_olist) . ")"; } } else { $list_found = false; } } } else { // Для большого количества записей используем обычный SELECT с пагинацией $all_found = true; $list_found = true; // Получаем ID с пагинацией $limit = $config['news_number']; $pagination_ids = $db->query("SELECT news_id FROM " . PREFIX . "_favorites WHERE type = '{$list}' AND name = '{$user}' ORDER BY date DESC LIMIT {$cstart}, {$limit}"); $valid_olist = array(); while ($row = $db->get_row($pagination_ids)) { $clean_id = intval($row['news_id']); if ($clean_id > 0) { $valid_olist[] = $clean_id; } } if (!empty($valid_olist)) { // Для пагинации не используем FIND_IN_SET, так как порядок уже задан в основном запросе $order_list = ""; if ($mod != 'collections') { $favorites = "(" . implode(",", $valid_olist) . ")"; } } else { $list_found = false; } // Обновляем счетчик для пагинации $sql_count = "SELECT COUNT(*) as count FROM " . PREFIX . "_post p {$cat_join} WHERE {$stop_list}approve=1 AND id IN (SELECT news_id FROM " . PREFIX . "_favorites WHERE type = '{$list}' AND name = '{$user}')"; } if (!$list_found) { $all_found = true; if ($mod != 'collections') { $favorites = "(0)"; } } $url_page .= "/list/{$list}"; $user_query .= "&list={$list}"; } elseif (isset($_GET['cat']) && $fav_access) { $cat_ids = $_GET['cat']; // Валидация категорий $cat_ids_t = explode(',', $cat_ids); $valid_cats = array(); foreach ($cat_ids_t as $cat_id) { $clean_cat = intval($cat_id); if ($clean_cat > 0) { $valid_cats[] = $clean_cat; } } if (!empty($valid_cats)) { $cat_found = true; $all_found = true; $clean_cat_ids = implode('|', $valid_cats); // Используем более безопасное регулярное выражение $category_ids = " AND category REGEXP '(^|,)({$clean_cat_ids})(,|$)' "; if ($mod != 'collections') { $favorites .= $category_ids; } $url_page .= "/cat/" . implode(',', $valid_cats); $user_query .= "&cat=" . implode(',', $valid_cats); } else { // Если категории невалидны, показываем все $all_found = true; } } else { $all_found = true; } /* ------------------------------------------- */ # То есть старый код заменить на код из пункта 2 $cat_found = false; $all_found = false; if (isset ( $_GET['list'] ) AND $fav_access ) { $list_found = false; $list = intval($_GET['list']); $list_ids = $db->super_query("SELECT GROUP_CONCAT(news_id ORDER BY date DESC) as news_id FROM " . PREFIX . "_favorites WHERE type = '{$list}' and name = '" . $name . "'"); if( $list_ids['news_id'] != null ) { $list_found = $all_found = true; $olist = explode(',', $list_ids['news_id']); $order_list = implode( ",", $olist ); $order_list = "ORDER BY FIND_IN_SET(id, '".$order_list."') "; } else $all_found = true; if( $mod != 'collections' ) $favorites = "(" . $list_ids['news_id'] . ")"; if( !$list_found ) $favorites = "(0)"; $url_page .= "/list/{$list}"; $user_query .= "&list={$list}"; } elseif( isset($_GET['cat']) AND $fav_access ) { $cat_found = $all_found = true; $cat_ids = $_GET['cat']; $cat_ids_t = explode(',', $cat_ids); $category_ids = " AND category REGEXP '[[:<:]](" . $cat_ids . ")[[:>:]]' "; if( $mod != 'collections' ) $favorites .= $category_ids; $url_page .= "/{$cat_ids}"; $user_query .= "&cat={$cat_ids}"; } else $all_found = true;