ilya_nb 0 Опубликовано: 10 марта 2011 Рассказать Опубликовано: 10 марта 2011 (изменено) Собственно... Как оказалось, рейтинг топ 10 в DLE строится очень специфически, то есть, по суммарному количеству баллов, которые проставило n пользователей, а не по среднему, как показывает графическое отображение в новости. Выходит, что 4 раза по 1-му баллу, это сравни 2 раза по 2 (а дальше отличие только по посещаемости или дате) Так как такая простота мне не подходит для нового проекта, я решил это побороть) 1. Делаем запрос к базе ALTER TABLE dle_post ADD COLUMN rate_tr decimal(4,1) not null default'0'; 2. Открываем файл engine\ajax\rating.php Там находим такую строчку $db->query( "UPDATE " . PREFIX . "_post set rating=rating+'$go_rate', vote_num=vote_num+1 where id ='$news_id'" ); и заменяем её на $db->query( "UPDATE " . PREFIX . "_post set rating=rating+'$go_rate', vote_num=vote_num+1, rate_tr=rate_tr*0+rating/vote_num where id ='$news_id'" ); 3. Открываем файл engine\modules\topnews.php Находим строчку $db->query( "SELECT id, title, date, alt_name, category, flag FROM " . PREFIX . "_post WHERE approve='1' AND date >= '$this_month' - INTERVAL 1 MONTH AND date < '$this_month' ORDER BY rating DESC, comm_num DESC, news_read DESC, date DESC LIMIT 0,10" ); заменяем на $db->query( "SELECT id, title, date, alt_name, rate_tr, vote_num, category, flag FROM " . PREFIX . "_post WHERE approve='1' AND date >= '$this_month' - INTERVAL 1 MONTH AND date < '$this_month' ORDER BY rate_tr DESC, vote_num DESC, news_read DESC, date DESC LIMIT 0,10" ); получаем рейтинг по среднему, который строится, учитывая последовательность: рейтинг, кол-во проголосовавших, кол-во просмотров Не судите строго, я энергетик )) программист/верстальщик любитель-самоучка 6 мес увлекаюсь для себя) Буду рад комментариям и замечаниям. и ещё... чтобы добавить в админку возможность чистить данный рейтинг: 1. Открываем файл engine\inc\editnews.php после <option value="mass_clear_rating">{$lang['mass_clear_rating']}</option> вставляем <option value="mass_clear_rate_tr">{очистка пр рейтинга}</option> 2. Открываем файл engine\inc\massactions.php после } elseif( $action == "mass_clear_rating" ) { $field = "rating"; $value = 0; $k_mass = true; $title = $lang['mass_clear_rating_2']; $lang['mass_confirm'] = $lang['mass_clear_rating_1']; $lang[mass_confirm_1] = $lang[mass_confirm_2]; вставляем } elseif( $action == "mass_clear_rate_tr" ) { $field = "rate_tr"; $value = 0; $k_mass = true; $title = $lang['mass_clear_rating_2']; $lang['mass_confirm'] = $lang['mass_clear_rating_1']; $lang[mass_confirm_1] = $lang[mass_confirm_2]; находим if ( $field == "rating" ) { $db->query( "UPDATE " . PREFIX . "_post SET vote_num='0' WHERE id='{$id}'" ); заменяем на if ( $field == "rate_tr" ) { $db->query( "UPDATE " . PREFIX . "_post SET vote_num='0', rating='0' WHERE id='{$id}'" ); теперь при выборе пункта меню массовых действий : (удалить пр рейтинг) вы удаляете и рейтинг графический и этот модифицированный Изменено 10 марта 2011 пользователем ilya_nb Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.