SurfMoney.ru > Полезные статьи > Модуль topnews в DLE под микроскопом, или как заставить его правильно работать
15 декабря 2009. Разместил: krasavchegx

Модуль topnews в DLE под микроскопом, или как заставить его правильно работать


Категория: Полезные статьи

На правах рекламы:  

На этот раз вопрос опять коснется двика DLE. Как Вы наверно уже заметили - после перехода нашего сайта на этот движок, на сайте стали появляться статьи, связанные с улучшением либо дополнением этого движка для более компактной работы с ним. На этот раз поговорим о модуле "topnews", известном многим пользователям DLE как модуль, выводящий самые рейтинговые статьи.

Думал вообще-то начать без встпуления, но...как же - пишу ведь я, а я без вступления не могу :)). Итак, модуль topnews. Что это вообще такое? Для тех, кто не знает - этот модуль входит в стандартную сборку DLE-движка, и присуттсвует практически во всех версия этой CMS. Подключается к сайту путем вставки в шаблон main.tpl в нужном месте тега {topnews}. После включения данного тега в шаблон, в том месте где Вы его ставили будут выводится самые популярные статьи, в виде списка.

Для более понятного уяснения материала давайте все рассматривать на практике. Откройте файл topnews.php, он находится в папке engine/modules. Там находим строчку:

$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" );

Это самая нужная нам строчка, в которой мы можем производить необходимые настройки этого модуля. Начнем с простого - для того что увеличить количество выводимых новостей этим модулем нужно изменить в части кода

DESC LIMIT 0,10" );

цифру 10 поменяйте на нужную Вам - это и есть цифра, отвечающая за количество новостей в блоке topnews.

Далее, излагаю чисто свое мнение - изначально этот модуль работает неправильно, т.е. новости, которые он выводит, я считаю, что отбираются не по тем критериям. Изначально, модуль выбирает из базы новостей самые рейтинговые новости, т.е те новости, которой пользователи Вашего сайта проставили больше всего рейтинга в том малюсеньком блоке с 5-тибальной шкалой рейтинга. Но вот скажите мне, ну кому этот рейтинг нужен, многие вообще его не замечают, а есть еще куча уникумов, кторые специально рейтинг понижают, ставя единицы. Так вот, мое мнение, что модуль topnews должен выводить новости в порядке, соответствующем количеству ПРОСМОТРОВ новости. Вот так будет правильный модуль, который выводит наиболее прочитанные (просмотренные) новости на сайте.

Я думаю многие со мной согласятся. Модуль topnews вообще как-то странно устроен - он проверяет новость по порядку сначала на рейтинг новости, потом на количество комментариев у новости, и уж только после этого смотрит на количество просмотров. Я соглашусь с теми, что рейтинг популярных новостей можно также строить и по количеству комментариев, так что ниже и мы и рассмотрим как сделать вывод новостей по количеству просмотров и по количеству комментариев.

Для того чтобы сделать вывод новостей по количеству просмотров новости делаем следующее - в строке

$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" );

удаляем rating DESC, comm_num DESC, чтобы получилось следующее

$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 news_read DESC, date DESC LIMIT 0,10" );

Для того чтобы выводились новости по количеству комментариев у новости, то делаем почти тоже самое, только оставляем comm_num DESC

$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 comm_num DESC date DESC LIMIT 0,10" );

Или можно совместить эти два параметра вывода удалив из строки только rating DESC, .

И, подводя итоги, я хочу поделиться также способом, касающимся того, как сделать чтобы новости выводились не за месяц (как по умолчанию стоит в модуле), а за любой срок. В Интернет по этому поводу все ссылки введут на сайты, рекомендующие удалять строку

$this_month = date( 'Y-m-d H:i:s', $_TIME );

и заменять нижеследующую измененным кодом.

На этот счет у меня также свое мнение. Ничего удалять не нужно, просто нужно правильно изменять нужную строку. Итак, для того чтобы изменить интервал, за который выводятся новости в блоке topnews, нужно в строке

$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" );

изменить параметр INTERVAL 1 MONTH на нужное количество месяцев, т.е. если мы хотим чтобы рейтинг строился за полгода, то строка должна иметь вид

$db->query( "SELECT id, title, date, alt_name, category, flag FROM " . PREFIX . "_post WHERE approve='1' AND date >= '$this_month' - INTERVAL 6 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, category, flag FROM " . PREFIX . "_post WHERE approve='1' AND date >= '$this_month' - INTERVAL 712548 MONTH AND date < '$this_month' ORDER BY rating DESC, comm_num DESC, news_read DESC, date DESC LIMIT 0,10" );

Если взять число месяцев из вышеприведенного примера, то я не думаю, что у кого то сайт уже существует более 712548 месяцев, так что получается, что мы берем за интервал все время существования сайта.

Вообщем-то и все по модулю topnews, надеюсь моя статья Вам пригодится, если что-то не получается - пишите в коментах вопросы.

P.S. Для того чтобы добавить title (всплывающие подсказки) для ссылок в блоке, то в строке

$link = "<a {$go_page}href=\"" . $full_link . "\">" . stripslashes( $title ) . "</a>";

сделайте такие изменения

$link = "<a {$go_page}href=\"" . $full_link . "\" title=\"сюда вписывайте текст для титла\">" . stripslashes( $title ) . "</a>";;

Также в title блока topnews можно включить даже название новости, для этого сделайте такие изменения

$link = "<a {$go_page}href=\"" . $full_link . "\" title=\"" . $title . " сюда вписывайте текст для титла\">" . stripslashes( $title ) . "</a>";

P.S.S. И еще один совет по модулю topnews - для того чтобы изменить количество символов обрезания названия новости в ссылке блока topnews в строке

if( strlen( $row['title'] ) > 55 ) $title = substr( $row['title'], 0, 55 ) . " ...";

цифру 55 измените на нужную Вам - чем больше эта цифра, тем длинее будет ссылка.

На это раз уже точно все. Всех с наступающим Новым годом! :)))



Вернуться назад