- Автор темы
- #1
Стоит не стандартная задачка у меня! Есть мысль как её решить, но очень громоздко получается, может у кого нибудь будет светлая мысль?
600-700 элементов в инфоблоке.
Как сделать чтобы выборка из CIBlockElement::GetList была случайная для каждого пользователя, но одинаковая в пределах сессии так как есть пагинация?
Да есть возможность отсортировать случайно записи получаемые
но учитывая что дальше идет пагинация, то листая страницы мы с высокой
вероятностью будем видеть повторяющиеся элементы или на оборот можем не увидеть какие либо элементы. Плюс вернувшись на какую то страницу мы опять получим выборку другую.
В голову пока приходит только.
1. Прочитать все ID в сессию при первом заходе в каталог, перемешать случайно.
2. Потом при каждом запросе получать все элементы, сортировать их согласно сохраненному порядку в сессии.
3. Этот массив превращать в объект CDBResult и работать с ним дальше как обычно, как будто это результат CIBlockElement::GetList.
600-700 элементов в инфоблоке.
Как сделать чтобы выборка из CIBlockElement::GetList была случайная для каждого пользователя, но одинаковая в пределах сессии так как есть пагинация?
Да есть возможность отсортировать случайно записи получаемые
PHP:
$res = CIBlockElement::GetList(Array("RAND"=>"ASC"), $arFilter, false, Array("nPageSize"=>20), $arSelect);
вероятностью будем видеть повторяющиеся элементы или на оборот можем не увидеть какие либо элементы. Плюс вернувшись на какую то страницу мы опять получим выборку другую.
В голову пока приходит только.
1. Прочитать все ID в сессию при первом заходе в каталог, перемешать случайно.
2. Потом при каждом запросе получать все элементы, сортировать их согласно сохраненному порядку в сессии.
3. Этот массив превращать в объект CDBResult и работать с ним дальше как обычно, как будто это результат CIBlockElement::GetList.