Кэширование списка акционных товаров, для выбора одного случайного товара из кэша — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
 
(не показана 1 промежуточная версия 1 участника)
Строка 15: Строка 15:
  
 
Так как четкий алгоритм для выборки только id страниц с помощью протокола '''Selector''' еще не опреден, то лучше использовать  [http://api.umi-cms.ru/ umiSelection]. Примеры кэширования данных можно посмотреть в этом же разделе, что и эта статья.
 
Так как четкий алгоритм для выборки только id страниц с помощью протокола '''Selector''' еще не опреден, то лучше использовать  [http://api.umi-cms.ru/ umiSelection]. Примеры кэширования данных можно посмотреть в этом же разделе, что и эта статья.
[[Категория: Верстка в XSLT ]] [[Категория: Верстка в TPL]]
+
[[Категория: Верстка в XSLT ]] [[Категория: Верстка в TPL]][[Категория:Кеширование]]

Текущая версия на 12:17, 5 июня 2013

Не редким случаем является тот вариант, когда необходимо на сайте выводить один или несколько акционных товаров, и чтобы при обновлении страницы, из определенного списка эти товары выбирались случайным образом. Если сайт небольшой, мало данных, небольшая посещаемость, то можно конечно используя протокол 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. Примеры кэширования данных можно посмотреть в этом же разделе, что и эта статья.