Вы не зашли.
rating - суммарный рейтинг, всегда положителен
votes - число голосований, нужно для получения среднего рейтинга, всегда положительно
А теперь скажите как у вас при выполнении деления одного положительного числа на другое положительное число получается "и результат и будет рейтингом, положительным или отрицательным" ?
Не в сети
rating - суммарный рейтинг, всегда положителен
votes - число голосований, нужно для получения среднего рейтинга, всегда положительноА теперь скажите как у вас при выполнении деления одного положительного числа на другое положительное число получается "и результат и будет рейтингом, положительным или отрицательным" ?
Я неправильно выразился, я не число имел ввиду, извиняйте...
Отрицательным - значит плохим, в данном случае
Не в сети
В принципе сортировка по рейтингу в виде ratings/votes бессмысленна, новостей со средним одинаковым значением может быть тьма тьмущая и постоянно выводить на главной странице непонятные новости смысла нет. Это удобно, например, в блоке последние лучшие за неделю или для рейтинга, который учитывает только +1 или -1
Не в сети
Да, этот вопрос меня тоже волнует, если мы имеем 1000 плохих (я не буду использовать слово "отрицательных" ) голосов за новость, и если новость вдруг неожиданно заслужит уважение новых посетителей, и они начнут ставить ей хорошие оценки, это сколько-же надо новых уникальных пользователей отдающих этой новости хорошую оценку, чтобы у нее серьезно поднялся рейтинг?
При небольшом количестве посетителей оценка новости очень долго будет держаться "1", "2" или "3", и, действительно, мало чем будет отличаться от оценок остальных новостей...
А что делать?
Не в сети
Все зависит от цели, оценивать материал как 3 или 4 слишком сложно, ставят или 5 или 1 обычно.
1. Сортировку по рейтингу использовать как глобальную и единственную для новостей не нужно. Если мы говорим о новостных порталах, так как там имеет значение дата публикации в первую очередь. Показывать топовую новость на главной за прошлый год смысла нет.
2. Сортировку по рейтингу нужно использовать, как я уже писал, в блоках типа "Лучшее за неделю/месяц". Очень удобно.
3. Все зависит от цели, для цитатника, типа Башорга можно сузить диапазон значений до двух +1 и -1 например. Но там опять же на главной всегда по дате сортировка идет с возможностью сортировки по рейтингу если нужно.
То есть универсального рецепта нет.
Не в сети
Если мы говорим о новостных порталах
Лично я хочу сделать не совсем новостной портал, т.е. не варезник
Сортировку по рейтингу нужно использовать, как я уже писал, в блоках типа "Лучшее за неделю/месяц". Очень удобно.
А это тоже надо. Где взять такой блок?
Короче блоГ надо делать, что-то туда писать, и его монетизировать, геморрой я какой-то придумал на свою голову, не потянуть мне такой проект в ближайшее время. Столько всего надо сделать, мозг плавится
Но плагин надо дошаманить в любом случае...
Не в сети
Лично я хочу сделать не совсем новостной портал, т.е. не варезник
Ну я не знаю чем ты там занимаешься, поэтому не могу ничего сказать про рейтинг в твоей ситуации, нужен ли он, должен ли оказывать какое-то влияние на сортировку и т.д.
А это тоже надо. Где взять такой блок?
top_news Правда он по rating сортирует, завтра обновлю его, чтобы сортировал по отношению, хоть какой-то толк будет:)
Не в сети
OK.
Правда я top_news еще не пробовал, я еще пока никак не определюсь что мне нужно...
У меня вопрос есть, а в "engine/plugins/rating/lang/russian" лежат *.ini файлы, а как в скрипте получить их содержимое? Я просто думаю что текст (22 голоса) будет смотреться красивее чем стандартное - (Голосов: 22). И если я правильно понимаю - ["XX голоса", "XX голосов", "XX голос"] нужно вынести в этот ini-шник.
Вынести-то я вынес, как получить - не знаю
Не в сети
Вопрос отпал после частичного изучения функции LoadPluginLang()
global $lang;
LoadPluginLang('rating', 'site');
echo $lang['rating_VarableInSite'];
так работает.
Всем спасибо
Не в сети
Плагин "Rating" 0.6 Alpha test - modified by ikv777vlg, for Next Generation CMS 0.9.3
Модифицированный плагин рейтинга новостей для Next Generation CMS 0.9.X.
ТЕСТОВОЕ ОПИСАНИЕ! Если что забыл или перепутал - поправьте меня!
Обращение к рядовым пользователям - не устанавливайте этот плагин на работающий сайт, плагин еще не проверен, не оптимизирован и не доработан.
Это тестовая версия. Никто не несет ответственность за его работу.
+ Добавлено сохранение идентификатора и IP-адреса проголосовавшего пользователя в базу данных, теперь голосовать можно с отключенными куками
+ В настройки плагина добавлен выбор трех режимов работы плагина - IP+UserID+Cookies, UserID+Cookies и обычный режим - Только Cookies
+ В настройки плагина добавлена возможность задать время хранения информации о каждом голосе в БД, и время хранения кукисов в браузере проголосовавшего пользователя, от 1 до 12 месяцев.
+ Добавлена функция, изменяющая стандартный текст (Голосов: XX) на (XX голос), (XX голосов), (XX голоса), (Нет голосов), окончание именяется в зависимости от количества голосов.
+ Добавлена сортировка новостей по рейтингу на главной странице.
* В связи с этим были незначительно изменены шаблоны, конфиги, и добавлены новые и поля и таблицы в базу данных.
* Изменена сортировка по рейтингу в категориях. Была сортировка по полю "rating", теперь по полям "(rating / votes)".
* Функция extra_get_param , была переименована в pluginGetVariable, везде где только можно. Зачем функцию через функцию использовать?!
*+ И что-то еще
Установка...
Сначала создайте новую таблицу "префикс_rating" и четыре поля в ней по данному SQL-дампу:
-- phpMyAdmin SQL Dump
-- version 3.2.3
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Oct 23, 2011 at 02:16 PM
-- Server version: 5.1.40
-- PHP Version: 5.3.3
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Database: `c2`
--
-- --------------------------------------------------------
--
-- Table structure for table `ng_rating`
--
CREATE TABLE IF NOT EXISTS `ng_rating` (
`news_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`ip` varchar(15) NOT NULL,
`vote_date` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
--
-- Dumping data for table `ng_rating`
--
Префикс "ng_" измените на свой!
Всё база данных готова.
Заменяем файлы "./engine/plugins/rating/rating.php" и "./engine/plugins/rating/config.php" на файлы из приложенного архива
Дальше...
В стандартных шаблонах изменяем:
В news.full.tpl ищем:
<td style="background-image:url('{tpl_url}/images/2z_64.gif');" width="100%" class="mw_links">[comheader] Комментариев: {comnum} |[/comheader] Просмотров: {views} | [print-link]{l_print}[/print-link]</td>
И в конец этой строки вот так добавляем переменную {rated}:
<td style="background-image:url('{tpl_url}/images/2z_64.gif');" width="100%" class="mw_links">[comheader] Комментариев: {comnum} |[/comheader] Просмотров: {views} | [print-link]{l_print}[/print-link] | {rated}</td>
В news.short.tpl ищем:
<td style="background-image:url('{tpl_url}/images/2z_64.gif');" width="100%" class="mw_links"> [comheader]Комментарии: {comments-num} |[/comheader] Просмотров: {views} | [full-link]<b>Подробнее</b>[/full-link]</td>
И так-же как и в шаблоне полной новости, мы вставляем в конец этой строки переменную {rated}:
<td style="background-image:url('{tpl_url}/images/2z_64.gif');" width="100%" class="mw_links"> [comheader]Комментарии: {comments-num} |[/comheader] Просмотров: {views} | [full-link]<b>Подробнее</b>[/full-link] | {rated}</td>
Изменяем стандартные шаблоны плагина:
В rating.form.tpl и rating.tpl ищем:
({l_rating_votes} {votes})
и изменяем на
({votes})
-----------------------------------------
Открываем файл "./engine/plugins/rating/lang/russian/site.ini"
Вставляем туда строки:
votes0 = "голос"
votes1 = "голоса"
votes2 = "голосов"
no_votes = "Нет"
Открываем файл "./engine/includes/inc/functions.inc.php":
Находим строку:
foreach (array('id desc', 'id asc', 'postdate desc', 'postdate asc', 'title desc', 'title asc', 'rating desc', 'rating asc') as $v) {
Ее заменяем на:
foreach (array('id desc', 'id asc', 'postdate desc', 'postdate asc', 'title desc', 'title asc', '(rating / votes) desc', '(rating / votes) asc') as $v) {
а следующую строку:
$vx = str_replace(' ','_',$v);
меняем на:
$vx = str_replace(array(' / ', '(', ')'),'',$v);
$vx = str_replace(' ','_',$vx);
Далее открываем файл "./engine/lang/russian/admin/categories.ini":
Находим 2 строки:
order_rating_desc = "рейтингу / убывание"
order_rating_asc = "рейтингу / возрастание"
Заменяем их на:
order_ratingvotes_desc = "рейтингу / убывание"
order_ratingvotes_asc = "рейтингу / возрастание"
Всё, сохраняем закрываем..
Открываем "./engine/lang/russian/admin/configuration.ini":
Находим строку:
order_title_asc = "наименованию / возрастание"
И после нее вставляем:
order_rating_desc = "рейтингу / убывание"
order_rating_asc = "рейтингу / возрастание"
Всё..
Теперь отрываем "./engine/includes/news.php":
Находим строку:
foreach ($mysql->select($query['result']) as $row) {
Заменить на:
foreach ($db_res as $row) {
И перед ней вставить:
$db_res=$mysql->select($query['result']);
foreach($db_res as $row) $list_id[] = $row['id'];
-----------------------------------------------------
Находим строку:
if (!in_array($orderBy, array('id desc', 'id asc', 'postdate desc', 'postdate asc', 'title desc', 'title asc')))
Заменяем на:
if (!in_array($orderBy, array('id desc', 'id asc', '(rating / votes) desc', '(rating / votes) asc', 'postdate desc', 'postdate asc', 'title desc', 'title asc')))
-----------------------------------------------------
Находим код:
if (!is_array($row = $mysql->record("select * from ".prefix."_news where approve=1".(count($filter)?' and '.implode(" and ",$filter):'')))) {
if (!$params['FFC']) {
error404();
}
return false;
}
После него вставляем(расположение под сомнением, но работает):
$list_id[0]=$row['id'];
------------------------------------------------------
Находим строки:
global $year, $month, $day, $SUPRESS_TEMPLATE_SHOW;
и
global $SYSTEM_FLAGS, $TemplateCache;
И после каждой строки вставляем(объявляем глобальную переменную $list_id; в функциях news_showlist и news_showone):
global $list_id;
------------------------------------------------------
Вроде ничего не забыл...
Редактирую сообщение. Поправка. Я же говорил что могу что-то пропустить
Еще нужно открыть файл "./engine/actions/configuration.php":
Находим строку:
'default_newsorder' => MakeDropDown(array('id desc' => $lang['order_id_desc'], 'id asc' => $lang['order_id_asc'], 'postdate desc' => $lang['order_postdate_desc'], 'postdate asc' => $lang['order_postdate_asc'], 'title desc' => $lang['order_title_desc'], 'title asc' => $lang['order_title_asc']), "save_con[default_newsorder]", $config['default_newsorder']),
Заменяем на:
'default_newsorder' => MakeDropDown(array('id desc' => $lang['order_id_desc'], 'id asc' => $lang['order_id_asc'], '(rating / votes) desc' => $lang['order_rating_desc'], '(rating / votes) asc' => $lang['order_rating_asc'], 'postdate desc' => $lang['order_postdate_desc'], 'postdate asc' => $lang['order_postdate_asc'], 'title desc' => $lang['order_title_desc'], 'title asc' => $lang['order_title_asc']), "save_con[default_newsorder]", $config['default_newsorder']),
Теперь точно всё...
Всё просто и легко.
У меня всё работало...
rating.php и config.php прикрепил.
Изменено ikv777vlg (2011-10-24 16:22:23)
Не в сети
Нафига ты это выкладываешь? Как оно работает никого не интересует Сделай сборку и выложи её, чтобы можно установить без проблем
Не в сети
Как оно работает никого не интересует
А жаль
Но вся эта информация в любом случае пригодится при тестировании, еще как пригодится...
А сборку - не вопрос, сделаю
Не в сети
Никак не отсортируешь ты глобально новости на главной адекватно по рейтингу, да и не нужно это, все твои новые новости будут на последней странице и их никто не увидит никогда
Не в сети
Никак не отсортируешь ты глобально новости на главной адекватно по рейтингу, да и не нужно это, все твои новые новости будут на последней странице и их никто не увидит никогда
Все сортируется, хочешь по ASC, хочешь по DESC, хочешь - новые новости будут в начале, хочешь новые новости будут в конце, хочешь сортируй по ID новости или по дате, всё настраивается в админке, если не надо - всегда можно изменить
По каким-то параметрам нужно-же сортировать, не рандомно же их сортировать?! Яша проиндексирует, пользователь найдет что-то, зайдет на сайт - а там рандомно уже другая новость отображается это-же не вариант..
Чтобы пользователь что-то увидел из имеющихся, например, нескольких тысяч новостей, есть поиск, "последние новости", "похожие новости", что-то еще, и фантазия
Подожди, дай я соберу всё это дело, а потом уже посмотрим...
Не в сети
Не в сети
У тебя выбор получается, либо рейтинговые наверху - пользователи не видят новых новостей, либо внизу - говно на главной
Да я понял.. Ну можно же как-то выводить последние новости на главной? Придумаем что-нибудь, я все сразу не могу предусмотреть, тем-более с моим скудным опытом программирования. Всё будет - но не сразу
Можно даже, например, по 3 новых новости, и/или новости с низким рейтингом (даже пусть рандомно) выводить на главной, и даже внутри категории? Это мысль. Может даже такой плагин уже существует, а я не в курсе.
В любом случае придумаем что-нибудь, и будет вообще всё в шоколаде
Не в сети
Не, что-то "for 0.9.3" не канает
Всё работает, но в админке, самым мистическим образом, пропала настройка сортировки по рейтингу, в конфигах всё описано, всё заменено и отредактировано, а настройки пропали, хотя в 0.9.2 работает
А так, всё устанавливается и голосуется нормально, только настройки этой нету...
Разбираться буду уже завтра...
Не в сети
Wolverine пишет:rating / votes
Мы вроде пришли к мнению, что это ерунда полнейшая
Как так?
А как еще сортировать?
Обрати внимание - в таблице _news есть индексы по всем полям. по которым возможна сортировка.
Ты же добавляешь вычисляемое поле (кстати, оно работает?) и при таком отображению mySQL'ю нужно будет каждый раз просматривать все новости.
Если на сайте их 10-100-500, то особых проблем не будет.
А вот если хотябы 1000+, то тормоза будут уже заметны
Не в сети
vitaly, но для блоков типа "Популярное за неделю" это будет менее заметно, если мы ограничиваем выборку датой публикации и уже из отфильтрованного ищем самое рейтинговое?
Не в сети
Обрати внимание - в таблице _news есть индексы по всем полям. по которым возможна сортировка.
Ты же добавляешь вычисляемое поле (кстати, оно работает?) и при таком отображению mySQL'ю нужно будет каждый раз просматривать все новости.
Если на сайте их 10-100-500, то особых проблем не будет.
А вот если хотябы 1000+, то тормоза будут уже заметны
Оно работает
А я же делал сначала поле в _news, в которое при голосовании записывается итоговый результат (rating / votes) чтобы потом по нему можно было сортировать.. Это что получается, нужно убрать сортировку по вычисляемому полю, и сделать как раньше было? Допустим.
А с индексами я не работал, если при установке я добавляю дополнительное поле в таблицу _news, то как добавить индекс для этого поля, и сортировать по нему для уменьшения нагрузки при большом количестве новостей?
А вот как работает рейтинг сейчас, сделал сборку как и обещал. Архив в формате 7-Zip:
Что-то с загрузкой файлов на форум туговато, я только вижу ошибку "Соединение закрыто удаленным сервером", ограничение по размеру стоит?...
Залил на народ, он безотказен
http://narod.ru/disk/29346943001/0.9.3% … 1).7z.html
Изменено ikv777vlg (2011-10-24 17:26:11)
Не в сети
А я же делал сначала поле в _news, в которое при голосовании записывается итоговый результат (rating / votes) чтобы потом по нему можно было сортировать.. Это что получается, нужно убрать сортировку по вычисляемому полю, и сделать как раньше было? Допустим.
Именно, тогда mySQL сможет пользоваться индексами.
А с индексами я не работал, если при установке я добавляю дополнительное поле в таблицу _news, то как добавить индекс для этого поля, и сортировать по нему для уменьшения нагрузки при большом количестве новостей?
Читай документацию, она у mySQL'я отличная.
Не в сети
Именно, тогда mySQL сможет пользоваться индексами.
Отлично, значит так и сделаю
Читай документацию, она у mySQL'я отличная.
OK, поизучаю...
Не в сети