Кэширование списка акционных товаров, для выбора одного случайного товара из кэша
Не редким случаем является тот вариант, когда необходимо на сайте выводить один или несколько акционных товаров, и чтобы при обновлении страницы, из определенного списка эти товары выбирались случайным образом. Если сайт небольшой, мало данных, небольшая посещаемость, то можно конечно используя протокол usel , написать шаблон, по которому в разделе каталога будет случайным образом выбираться один элемент каталога отмеченный чекбоксом Акция. В случае TPL-шаблонизатора, необходимо будет еще использовать макрос %data doSelection()%.
Но если ситуация по сайту совсем иная, это серьезный Интернет магазин, с большой посещаемостью, то было бы неправильным, при каждой загрузке страницы, из всего каталога, выбирать случайным образом товар, с указанными параметрами.
Для решения данного вопроса, без лишней нагрузки на сервер, можно использовать кэширование данных. Из общего списка товаров, которые подходят по нужным условиям, делается сериализованный массив и сохраняется в кэш, можно просто в файл. Кэш можно настроить так, чтобы он обновлялся один раз в час. Данные из Кэша (или из файла) считываются, потом с помощью php-функции array_rand из массива можно выбрать случайное значение (id товара):
$arr_serialize = file_get_contents("…");
$arr_id = unserialize($arr_serialize);
if(!is_array($arr_id) || !sizeof($arr_id)) return "";
$rand_key = array_rand($arr_id);
$page_id = $arr_id[$rand_key];
Так как четкий алгоритм для выборки только id страниц с помощью протокола Selector еще не опреден, то лучше использовать umiSelection. Примеры кэширования данных можно посмотреть в этом же разделе, что и эта статья.