ПафНутиЙ-Блог » Мысли вслух » [Глобальный хак] Индекс сортировки новостей в DLE или как вывести новости в нужном порядке

[Глобальный хак] Индекс сортировки новостей в DLE или как вывести новости в нужном порядке

14.03

Вы когда нибудь задумывались над вопросом произвольной сортировки новостей в DLE?
Т.е. такой порядок вывода новостей, который не будет зависеть от даты, просмотров, рейтинга или имени новости по умолчанию в DLE не возможен и плясками с использованием fixed и изменением даты новости тут не обойдёшься.
Нужен некий параметр, согласно значения которого будут сортироваться новости, в bitrix есть такой параметр и называется он индекс сортировки.

Суть индекса сортировки проста

В БД заводим новое поле, по умолчанию его значение равно 500. Чем больше значение этого индекса отличается от исходного, тем выше или ниже будет стоять новость в списке новостей.
Все новости сортируются сначала по значению этого поля, а уже потом по дате добавления (настройка по умолчанию DLE). Конечно же фиксированные новости будут в любом случаи выше, но и там они будут сортироваться сначала по индексу сортировки, а потом по дате.

Что это даст и зачем нужно?

Представьте ситуацию, когда нужно по какой то причине "поднять новости выше остальных", например товары в каталоге, но при этом у вас уже есть несколько зафиксированных новостей выше которых не должна подниматься никакая новость, или рекламная статья, за просмотры которой вам платит рекламодатель, но фиксированные новости имеют другой внешний вид, или у вас кинотеатр и нужно вытянуть несколько фильмов на верх в определённом порядке. Вот в этих случаях и нужен индекс сортировки.

Собственно о самом хаке

Установка детально расписана, не слишком сложная, а запрос в БД можно выполнить в автоматическом режиме непосредственно из инструкции по установке.
После установки у всех новостей будет установлен индекс сортировки равным 500, а в админке, в разделе Настройка системы, на вкладке "Настройки вывода новостей" появится вот такая настройка:


Можно включить или отключить учёт индекса сортировки (пока глобально, по всему сайту) и выбрать направление сортировки.

В форме добавления и радактирования новостей в админке так же появится дополнительное поле индекса сортировки:

[Глобальный хак] Индекс сортировки новостей в DLE или как вывести новости в нужном порядке


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


Жду ваших мнений!

Комментарии

wincloa
wincloa 12 мая 2014 10:30
#31
ПафНутиЙ
Спасибо, отдельное за хак, извеняюсь что так наспамил,немного не разобрался просто, хотел дополнить...

А нельзя использовать данный хак с использованием Block Pro? Я думаю это бы было решением вопроса.
ПафНутиЙ
ПафНутиЙ 12 мая 2014 11:08
#32
Можно, напишите мне на email, если время будет сделаю.
wincloa
wincloa 12 мая 2014 16:31
#33
Еще хотел спросить, так как я хочу сортировать с помощью данного индекса только на отдельной странице. А для главной буду выводить с помощью тега Custom, они ведь не будут сортироватся по индексу?
ПафНутиЙ
ПафНутиЙ 12 мая 2014 17:11
#34
скорее всего будут, хак глобальный.
wincloa
wincloa 16 мая 2014 13:29
#35
Тогда было бы хорошо, если б была возможность выбора сортировка (по умолчанию, для отдельных страниц)...
ПафНутиЙ
ПафНутиЙ 16 мая 2014 19:21
#36
боюсь я пока не готов возвращаться к этой теме, слишком много изменений уже произошло.
ForeverRED66
ForeverRED66 29 июня 2014 09:56
#37
поставил на 10.2 его.
Вроде как все норм, пока без ошибок, но на этапе:
5)Открыть \engine\inc\editnews.php
все внес, поправив под 10.2, но строки Индекс сортировки так и не появилось, хотя в пункте 4)Открыть \engine\inc\addnews.php все хорошо, строчка Индекс сортировки появилась.
ПафНутиЙ
ПафНутиЙ 2 июля 2014 13:02
#38
в 10.2 много изменений, скорее всего просто сделали что-то не так или не там.
DMJO
DMJO 28 июня 2015 17:04
#39
Как в Индексе 500 сделать сортировку на главной странице? В категориях нормально все сортируется, а вот на главной не хочет.

На главной новости выводятся следующим образом:
{custom category="49" template="shortstory" aviable="main" from="0" sort="desc" order="date" limit="8" fixed="yes" cache="no"}
ПафНутиЙ
ПафНутиЙ 28 июня 2015 17:14
#40
В категориях вы новости выводите стандартным способом, или тоже через custom?
DMJO
DMJO 28 июня 2015 17:21
#41
Да вроде стандартным способом выводятся.
ПафНутиЙ
ПафНутиЙ 28 июня 2015 17:33
#42
В engine/functions.php
найдите
$tpl->load_template( $custom_template . '.tpl' );

ниже добавьте:
$sort_index = "";
		if ($config['allow_sort_index']) {
			$sort_index = ($config['news_msort_index']) ? "sorting ".$config['news_msort_index'].", " : "sorting ASC, ";
		}

ниже найдите:
$fixed . $news_sort

и замените на:
$fixed . $sort_index . $news_sort

отпишитесь о результатах, я дополню инструкцию.
DMJO
DMJO 28 июня 2015 17:44
#43
Cкорей всего в В engine/modules/functions.php

Спасибо! теперь все работает.
ПафНутиЙ
ПафНутиЙ 28 июня 2015 17:45
#44
да, недопечатал smile
отлично, дополню инструкцию.
DMJO
DMJO 10 августа 2015 21:18
#45
ПафНутиЙ, Можно ли номер индекса вывести в полную или короткую новость? чтобы видеть какую новость поднять, а какую можно опустить. А то постоянно заходить в админку и смотреть не совсем удобно.
ПафНутиЙ
ПафНутиЙ 10 августа 2015 21:31
#46
Да, можно.
Добавьте в show.short.php и show.full.php код:
$tpl->set('{sorting}', $row['sorting']);
DMJO
DMJO 10 августа 2015 21:50
#47
Пафнутий, Спасибо! Только в некоторых новостях выводит, а в некоторых выводится просто тег:
{sorting}
DMJO
DMJO 10 августа 2015 21:56
#48
А все разобрался не туда код запихал, Спасибо еще раз )
Chessman
Chessman 28 августа 2015 14:02
#49
На 10.5 станет
или даже и не пробовать?
DMJO
DMJO 28 августа 2015 14:15
#50
Да пойдет
Chessman
Chessman 1 сентября 2015 21:23
#51
Открыть \engine\inc\editnews.php
Найти:
<tr>
        <td height="29" style="padding-left:5px;">{$lang['edit_cat']}</td>


Не могу найти
DMJO
DMJO 1 сентября 2015 21:37
#52
Найдите:
<label class="control-label col-md-2">{$lang['edit_cat']}</label>
Chessman
Chessman 1 сентября 2015 21:47
#53
вроде разобрался
теперь жду "вывода в категориях"
Chessman
Chessman 1 сентября 2015 22:30
#54
и ещё вопрос:
что нужно изменить чтоб можно было делать дробные значения индекса.
В базе поменял тип данных на float
ПафНутиЙ
ПафНутиЙ 1 сентября 2015 22:54
#55
Встречный вопрос:
Неужели 10-ти значной цифры не достаточно для выставления требуемого индекса?
Chessman
Chessman 1 сентября 2015 22:56
#56
просто я этот параметр использую как стоимость.
нерационально использовать ещё и дополнительное поле и прописывать дважды одно и тоже
ПафНутиЙ
ПафНутиЙ 1 сентября 2015 22:58
#57
Зря.
Chessman
Chessman 1 сентября 2015 22:59
#58
т.е. Вы не знаете/ не скажете, как вводить дробные числа?
ПафНутиЙ
ПафНутиЙ 3 сентября 2015 18:18
#59
Я не вижу смысла в использовании индекса сортировки в качестве цены, это нелогично.
over
over 12 октября 2015 13:35
#60
Паш, а на 10.5 работает ?

Добавить комментарий

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

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