• DONATE to NULLED!
    Форуму и его команде можно помочь, мотивировать модераторов разделов.
    Помогите модератору этого раздела killoff лично.

Помощь Сортировка новостей в админке по количеству просмотров

Lazy_bones

Постоялец
Регистрация
11 Дек 2008
Сообщения
432
Реакции
108
Здравствуйте. Есть куча модулей, которые выводят на сайте новости с сортировкой по количеству просмотров.
А можно ли как то отсортировать их в админке именно по количеству просмотров?
К примеру стандартная строка при редактировании новостей выглядит таким образом
Код:
http://site/admin.php?mod=editnews&action=list&search_field=&search_author=&search_cat=&fromnewsdate=&tonewsdate=&news_status=0&news_per_page=50&search_order_f=desc&search_order_m=asc&search_order_d=desc&search_order_t=&start_from=0

Можно ли подставить в данную строку какой нить параметр, чтобы сортировка выполнилась по количеству просмотров? Или есть какие то способы это сделать?
 
\engine\inc\editnews.php
PHP:
$db->query( "SELECT p.id, p.date, p.title, p.category, p.autor, p.alt_name, p.comm_num, p.approve, p.fixed, e.news_read, e.votes FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) " . $where . " ORDER BY " . $order_by . " LIMIT $start_from,$news_per_page" );
Заменить на:
PHP:
$db->query( "SELECT p.id, p.date, p.title, p.category, p.autor, p.alt_name, p.comm_num, p.approve, p.fixed, e.news_read, e.votes FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) " . $where . " ORDER BY e.news_read asc, " . $order_by . " LIMIT $start_from,$news_per_page" );
 
Прошу прощения, ошибся в коде. Код обновил. Забыл указать порядок сортировки asc...
Странно, поставил то, что Вы сразу дали и он работает также, как и новый.
Вот только почему то всегда сортирует от меньших просмотров к большим и какой бы параметр не менял, обратная сортировка не происходит. Не знаю так и должно быть или все таки где то и обратная есть?
 
И так, чисто теория, т.к. установленной ДЛЕ под рукой нет. Будут баги - исправлю.
\engine\inc\editnews.php
Найти:
PHP:
        <td style="padding-left:2px;" colspan="2"><select name="search_order_t" id="search_order_t">
           <option {$search_order_title['----']} value="">{$lang['user_order_no']}</option>
           <option {$search_order_title['asc']} value="asc">{$lang['user_order_plus']}</option>
           <option {$search_order_title['desc']} value="desc">{$lang['user_order_minus']}</option>
            </select>
        </td>
Добавить ниже:
PHP:
        <td style="padding-left:2px;"><select name="search_order_v" id="search_order_v">
           <option {$search_order_mod['----']} value="">{$lang['user_order_no']}</option>
           <option {$search_order_mod['asc']} value="asc">{$lang['user_order_plus']}</option>
           <option {$search_order_mod['desc']} value="desc">{$lang['user_order_minus']}</option>
            </select>
        </td>
Найти:
PHP:
	if( $_REQUEST['search_order_t'] == "asc" or $_REQUEST['search_order_t'] == "desc" ) $search_order_t = $_REQUEST['search_order_t'];
	else $search_order_t = "";
Добавить ниже:
PHP:
	if( $_REQUEST['search_order_v'] == "asc" or $_REQUEST['search_order_v'] == "desc" ) $search_order_v = $_REQUEST['search_order_v'];
	else $search_order_v = "";
Найти:
PHP:
	if( ! empty( $search_order_t ) ) {
		$order_by[] = "title $search_order_t";
	}
Добавить ниже:
PHP:
	if( ! empty( $search_order_v ) ) {
		$order_by[] = "e.news_read $search_order_v";
	}
Найти:
PHP:
	$search_order_title = array ('----' => '', 'asc' => '', 'desc' => '' );
	if( ! empty( $search_order_t ) ) {
		$search_order_title[$search_order_t] = 'selected';
	} else {
		$search_order_title['----'] = 'selected';
	}
Добавить ниже:
PHP:
	$search_order_view = array ('----' => '', 'asc' => '', 'desc' => '' );
	if( ! empty( $search_order_v ) ) {
		$search_order_view[$search_order_v] = 'selected';
	} else {
		$search_order_view['----'] = 'selected';
	}
Найти:
PHP:
        <td style="padding:5px;">{$lang['edit_et']}</td>
Добавить ниже:
PHP:
        <td style="padding:5px;">По просмотрам:</td>

Пробуем... Единственное - немного поедит дизайн... Там надо количество колонок восстанавливать:
colspan="4" заменять на colspan="5" и т.д., но это уже мелочи.
 
Все поставил. Но почему то какую бы сортировку не выбрал, всегда сортирует от меньшего к большему
 
Так предыдущее измениен надо убрать =)

И ещё заметил багу у себя:
PHP:
    if( ! empty( $search_order_v ) ) {
        $order_by[] = "title $search_order_v";
    }
А должно быть:
PHP:
    if( ! empty( $search_order_v ) ) {
        $order_by[] = "e.news_read $search_order_v";
    }
 
Все получилось. Только нужно сначала сбросить сортировки(Статус, Дата публикации, Заголовок), которые ставятся по умолчанию. Сначала нужно поставить в положение -----(Статус, Дата публикации, Заголовок) и только после этого начинает работать правильно в оба направления, если же их оставить то работает только от меньшего к большему
 
Да, это действительно так. Смысл вот в чём: сортировка идёт последовательно. Сначала скрипт сортирует всё по параметру "зафиксированных" статей - получаем 2 группы: зафиксированные и обычные. Они соответсвенно сортируются по статусу, уже получаем 4 группы. Следующая - сортировка по дате и заголовку соответственно. И дальше уже происходит сортировка по просмотрам. Итог:
Если мы будем иметь 2 новости от одинаковой даты, с одинаковыми заголовками и другими параметрами - они будут отсортированы по просмотрам, в противном случае сортировка не будет произведена, т.к. в каждой группе останется 1 статья...

Тут либо очищать параметры, либо передвинуть код:
PHP:
    if( ! empty( $search_order_v ) ) {
        $order_by[] = "e.news_read $search_order_v";
    }
выше, чтобы сортировка по этому параметру происходила раньше, чем по другим. Либо изменить параметры сортировки по умолчанию:
PHP:
if( ! $order_by ) $order_by = "fixed desc, approve asc, date desc";
К примеру, оставить сортировку только по фиксированным новостям, либо по статусу.
 
Еще обнаружил такую проблему. Выбираю сортировку по просмотрам и хоть по возрастанию, хоть по убыванию. Все отсортировал, но если я перейду на любую страницу пагинации, то дальше сортировка не работает, все сбрасывается. Получается, что сортировка работает только для первой страницы и чтобы получить больше результатов, то нужно просто вписывать большее количество новостей для отображения.

В хаке, который Вы предложили в самом Для просмотра ссылки Войди или Зарегистрируйся работала только сортировка по возрастанию, но страницы пагинации работали.
 
У меня не вышло.
Версия DLE 10.2
Все сделал как описано. Но сортировка не работает.
Частично код выглядит по другому.

Прошу помощи в разъяснении
 
Последнее редактирование:
Назад
Сверху