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

Материал из Umicms
Перейти к:навигация, поиск
м (переименовал «Кеширование списка акционных товаров, для выбора одного случайного товара из кеша» в «[[Кэширование списка акционных това)
Строка 5: Строка 5:
 
Но если ситуация по сайту совсем иная, это серьезный Интернет магазин, с большой посещаемостью, то было бы неправильным, при каждой загрузке страницы, из всего каталога, выбирать случайным образом товар, с указанными параметрами.
 
Но если ситуация по сайту совсем иная, это серьезный Интернет магазин, с большой посещаемостью, то было бы неправильным, при каждой загрузке страницы, из всего каталога, выбирать случайным образом товар, с указанными параметрами.
  
Для решения данного вопроса, без лишней нагрузки на сервер, можно использовать кеширование данных. Из общего списка товаров, которые подходят по нужным условиям, делается [http://ru.php.net/manual/ru/function.serialize.php сериализованный] массив и сохраняется в кеш, можно просто в файл. Кеш можно настроить так, чтобы он обновлялся один раз в час. Данные из Кеша (или из файла) считываются, потом с помощью php-функции [http://ru.php.net/manual/ru/function.array-rand.php array_rand] из массива можно выбрать случайное значение (id товара):
+
Для решения данного вопроса, без лишней нагрузки на сервер, можно использовать кэширование данных. Из общего списка товаров, которые подходят по нужным условиям, делается [http://ru.php.net/manual/ru/function.serialize.php сериализованный] массив и сохраняется в кэш, можно просто в файл. Кэш можно настроить так, чтобы он обновлялся один раз в час. Данные из Кэша (или из файла) считываются, потом с помощью php-функции [http://ru.php.net/manual/ru/function.array-rand.php array_rand] из массива можно выбрать случайное значение (id товара):
 
<source lang="php">
 
<source lang="php">
 
$arr_serialize = file_get_contents("…");
 
$arr_serialize = file_get_contents("…");
Строка 14: Строка 14:
 
</source>
 
</source>
  
Так как четкий алгоритм для выборки только id страниц с помощью протокола '''Selector''' еще не опреден, то лучше использовать  [http://api.umi-cms.ru/ umiSelection]. Примеры кеширования данных можно посмотреть в этом же разделе, что и эта статья.
+
Так как четкий алгоритм для выборки только id страниц с помощью протокола '''Selector''' еще не опреден, то лучше использовать  [http://api.umi-cms.ru/ umiSelection]. Примеры кэширования данных можно посмотреть в этом же разделе, что и эта статья.
 
[[Категория: Верстка в XSLT ]] [[Категория: Верстка в TPL]]
 
[[Категория: Верстка в XSLT ]] [[Категория: Верстка в TPL]]

Версия 05:54, 15 августа 2012

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