Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Сортировка

00 голосов
8
Добрый день. Подскажите пожалуйста.

Имеется информационный блок. Необходимо сделать, что бы компонент "элементы раздела" сортировал по свойству "сорт" и выводил это в случайном порядке.

Т.е. чтобы выпадали случайным образом, но у кого свойство сорт, к примеру, "500" были выше тех, у кого свойство сорт "400".

Спасибо.
спросил 21 Май, 13 от Semster (160 баллов)

8 Ответы

00 голосов
"порядок сортировки элементов" сделать по убыванию. И кастомизировать сам компонент catalog.section - добавить туда в сортировку "RAND" => "ASC".
ответил 21 Май, 13 от ZakonD3D (600 баллов)
00 голосов
Не помогло. Может что то не так сделал?

Воткнул:

Код
$arSort = array(
      "RAND"=>"asc", "left_margin"=>"asc" 
   );
ответил 21 Май, 13 от Semster (160 баллов)
00 голосов
Цитата
Marso пишет:
Имеется информационный блок. Необходимо сделать, что бы компонент "элементы раздела" сортировал по свойству "сорт" и выводил это в случайном порядке.

Извините, а это как? Случайный порядок уже предполагает отсутствие сортировок.
ответил 08 Авг, 13 от Almarea (3,760 баллов)
00 голосов
Дмитрий, в инфоблоке к примеру имеется 20 товаров со значением сорт "500", имеется ещё 20 товаров но со значением сорт "400", возможно ли каким то простым способом сделать, что бы товары выпадали случайным образом, но те 20 товаров с сорт "500" были выше, чем те у которых сорт "400" ?
ответил 08 Ноя, 13 от Semster (160 баллов)
00 голосов
В таком виде - нет. Единственное, что можно попробовать (не уверен, что пройдет, но по логике): сортировка вида
Код
$arOrder = array('SORT' => 'DESC','RAND' => 'ASC'); 
с ограничением по числу элементов в выборке.
ответил 15 Фев, 14 от Pomnep (13,960 баллов)
00 голосов
Код
$arOrder = array('SORT' => 'DESC','RAND' => 'ASC');


Спасибо, Евгений, всё получилось.

Единственное, я не до конца понял "с ограничением по числу элементов в выборке."

Возник ещё вопрос, а существуют ли какие нибудь хитрости, что бы при таких условиях работала пагинация?
ответил 06 Июнь, 14 от Semster (160 баллов)
00 голосов
Вряд ли, на каждой странице запрос будет заново тасовать результат. Если рандомизация нужна однократно или с интервалом времени, можно сделать, например, в служебной странице на кроне изменение значения SORT для элементов в виде N*100000+random, где N - это "старший" порядок сортировки, который не меняется, а random - случайный аппендикс, который генерируется заново при каждом вызове служебной страницы кроном.

Второй вариант, хороший и быстрый, но требующий усилий - закешировать результат запроса с привязкой к сессии и формировать из него страницы постранички. Кеш можно очищать по времени или после перехода пользователя на другую страницу.
ответил 04 Окт, 14 от Eddie (2,060 баллов)
00 голосов
Цитата
Marso пишет:
Единственное, я не до конца понял "с ограничением по числу элементов в выборке."

Это когда надо получать не весь список эелементов, а какую-то часть.
$rsItems = CIBlockElement::GetList(сортировка, фильтр,false,array('nTopCount' =>'максимальное число элементов'))
ответил 05 Фев, 15 от Pomnep (13,960 баллов)

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

0 голосов
0 ответов
спросил 12 Май, 16 от loony (540 баллов)
0 голосов
1 ответ
0 голосов
1 ответ
0 голосов
1 ответ
спросил 09 Май, 14 от Kania (5,180 баллов)