Кэширование списка акционных товаров, для выбора одного случайного товара из кэша — различия между версиями
Kalexey (обсуждение | вклад) м (переименовал «Кеширование списка акционных товаров, для выбора одного случайного товара из кеша» в «[[Кэширование списка акционных това) |
Kalexey (обсуждение | вклад) |
||
Строка 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 товара): |
<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. Примеры кэширования данных можно посмотреть в этом же разделе, что и эта статья.