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

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

udjin123

Мой дом здесь!
Регистрация
26 Дек 2014
Сообщения
162
Реакции
206
Стоит не стандартная задачка у меня! Есть мысль как её решить, но очень громоздко получается, может у кого нибудь будет светлая мысль?

600-700 элементов в инфоблоке.
Как сделать чтобы выборка из CIBlockElement::GetList была случайная для каждого пользователя, но одинаковая в пределах сессии так как есть пагинация?

Да есть возможность отсортировать случайно записи получаемые
PHP:
$res = CIBlockElement::GetList(Array("RAND"=>"ASC"), $arFilter, false, Array("nPageSize"=>20), $arSelect);
но учитывая что дальше идет пагинация, то листая страницы мы с высокой
вероятностью будем видеть повторяющиеся элементы или на оборот можем не увидеть какие либо элементы. Плюс вернувшись на какую то страницу мы опять получим выборку другую.

В голову пока приходит только.
1. Прочитать все ID в сессию при первом заходе в каталог, перемешать случайно.
2. Потом при каждом запросе получать все элементы, сортировать их согласно сохраненному порядку в сессии.
3. Этот массив превращать в объект CDBResult и работать с ним дальше как обычно, как будто это результат CIBlockElement::GetList.
 
Как вариант кастомизировать компонент таким образом чтобы он проверял текущую сессию пользователя и выдавал на первый запрос рандомный набор элементов с последующим занесением этого массива в КЭШ и дальше обращался только к закэшированому массиву если сессия таже. Но боюсь при таком подходе размер вашего кэша будет безмерно велик.

А вообще данная задача крайне плохая затея. Пользователь всегда может вернуться на сайт, поделиться ссылок с кем-то, сохранить в закладки и т.д. и при следующем посещении или же посещении сайта с другого устройства он будет вынужден заново искать то что ему было нужно. Да и поисковые роботы тоже не очень обрадуются вашему решению.
 
Поисковикам пофиг на это так как страницы канонические и контент и так на них меняется когда добавляются новые элементы.
То же самое и для пользователя даже если он вернется по ссылке не факт что увидет тоже что там было, для решения таких задач создана обратная пагинация, которой толком ни кто и не пользуется, потому что есть свои недостатки и у нее.

А задачу я давно решил уже, и более просто. А именно я создал 30 свойств где случайным образом заполнил их числовыми значениями. Далее при первом посещении я рандомом сохраняю в куках у пользователя значение от 1 до 30 и далее просто для этого пользователя сортирую по нужному свойству. Вот и все.

Может кому пригодится....
 
Последнее редактирование:
Назад
Сверху