Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы » Как вывести актуальные новости с использованием стандартной сортировки?

Как вывести актуальные новости с использованием стандартной сортировки?


     07.01.2022    Все вопросы » Общие вопросы    147

вопрос
Здравствуйте!

Сортировка новостей стандартными средствами в DLE организована таким образом, что в случае выбора критерия "по рейтингу" или "по просмотрам" в топ попадают уже неактуальные новости.

Возможен ли вариант, чтобы для двух указанных критериев выборка была ограничена определенным периодом времени (например, 1 месяц)? Сейчас для таких вещей понимаю используется {custom}, но меня интересует именно возможность с использования стандартной сортировки {content}.

Имеется предположение, что необходимо вносить изменения в следующие строчки, добавив что-то подобное date >= NOW() - INTERVAL 30 DAY.
$sql_select = "SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason {$user_select}FROM " . PREFIX . "_post p {$cat_join}LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) {$user_join}WHERE {$stop_list}autor = '$user' AND approve=1" . $where_date . " ORDER BY " . $news_sort_by . " " . $news_direction_by . " LIMIT " . $cstart . "," . $config['news_number'];

Но в таком случае, это коснется и всех других типов сортировки.

Ответа пока нет


14 комментариев

dj-avtosh
PHP-developer

dj-avtosh - 10 января 2022 16:02 -

над запросом



if ($news_direction_by == 'такой_то_такой_то')
{

 $where_date .= ' AND date >= NOW() - INTERVAL 30 DAY';
   
}


ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

Crashlabs
Юзер

Crashlabs - 10 января 2022 16:33 -

Эльхан, спасибо! Способ отлично работает.

Crashlabs
Юзер

Crashlabs - 16 января 2022 23:55 -

Выяснил, что данное условие срабатывает только при сортировке == 'date'. В случае, если подставить news_read, то выборка не ограничивается. Посмотрел запрос при сортировке по просмотрам и он имеет следующий вид:
... AND allow_main=1 ORDER BY news_read DESC, fixed desc, date DESC LMIT 0,11.

Видимо, проблема связана с тем, что выборка при сортировке по просмотрам имеет двойную сортировку - по просмотрам и потом по дате.

dj-avtosh
PHP-developer

dj-avtosh - 17 января 2022 11:03 -

if (in_array($news_sort_by, ['rating', 'news_read']))
{

 $where_date .= ' AND date >= NOW() - INTERVAL 30 DAY';
   
}

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

Crashlabs
Юзер

Crashlabs - 17 января 2022 11:26 -

Что-то ни в какую для rating и news_read, условие не хочет срабатывать для данных типов сортировки.

Для 'date' срабатывает, подставляешь любой другой тип в условие и выдает все новости без ограничений по дате.

dj-avtosh
PHP-developer

dj-avtosh - 17 января 2022 11:28 -

кеш очищали? на какой строчке и какая версия dle вставлен код?

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

dj-avtosh
PHP-developer

dj-avtosh - 17 января 2022 11:33 -

нужно вставить над каждым запросом, в котором есть
$where_date . " ORDER BY 

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

Crashlabs
Юзер

Crashlabs - 17 января 2022 11:53 -

Да, кеш чистил после каждой правки. Поскольку интересует сортировка только на главной, код вставляю в следующую секцию:

if (isset ( $_SESSION['dle_sort_main'] )) $news_sort_by = $_SESSION['dle_sort_main'];
if (isset ( $_SESSION['dle_direction_main'] )) $news_direction_by = $_SESSION['dle_direction_main'];

**КОД**

$sql_select = "SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason {$user_select}FROM " . PREFIX . "_post p {$cat_join}LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) {$user_join}WHERE {$stop_list}autor = '$user' AND approve=1" . $where_date . " ORDER BY " . $news_sort_by . " " . $news_direction_by . " LIMIT " . $cstart . "," . $config['news_number'];

dj-avtosh
PHP-developer

dj-avtosh - 17 января 2022 11:56 -

эта секция относится только к новостям пользователя, видимо

вам нужно искать ниже секции

// ################ show main page #################

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

Crashlabs
Юзер

Crashlabs - 17 января 2022 12:00 -

Да, это как раз ниже данной секции.

Дополнительно проверил, если вручную в этом запросе вместо . $where_date . подставить AND date >= NOW() - INTERVAL 30 DAY, то ограничиваются новости именной на главной странице.

dj-avtosh
PHP-developer

dj-avtosh - 17 января 2022 12:06 -

это не может быть правдой - в запросе четко видно
autor = '$user'

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

Crashlabs
Юзер

Crashlabs - 17 января 2022 12:13 -

Ввел в заблуждение, неверно сюда скопировал сам запрос. Запрос там такой:

$sql_select = "SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason {$user_select}FROM " . PREFIX . "_post p {$cat_join}LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) {$user_join}WHERE {$stop_list}approve=1 AND allow_main=1" . $where_date . " ORDER BY " . $fixed . $news_sort_by . " " . $news_direction_by . " LIMIT " . $cstart . "," . $config['news_number'];

dj-avtosh
PHP-developer

dj-avtosh - 17 января 2022 12:16 -

может так


if (in_array($news_sort_by, ['e.rating', 'e.news_read']))
{

 $where_date .= ' AND date >= NOW() - INTERVAL 30 DAY';

  }


ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

Crashlabs
Юзер

Crashlabs - 17 января 2022 12:40 -

Есть, выборка ограничилась! Спасибо за подсказку!

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх