UMIhelp

Разработка сайта на UMI.CMS => Настройка системы и модулей => Тема начата: albion от 09 Февраля 2012, 08:14:18

Название: Закешировать только одну страницу
Отправлено: albion от 09 Февраля 2012, 08:14:18
В базу UMI в однин из разделов каталога будет внесено более 1000 объектов, которые будут выводится на сайт все разом. Каким образом можно закешировать (сохранить) весь этот объем и обновлять по крону, либо по нажатии какой либо ссылки? Формат вывода XML, а если быть более точным, то XML в формате Яндекс карт. И соответственно все эти данные - координаты и описание объектов на Яндекс карте.
Название: Re:Закешировать только одну страницу
Отправлено: Vladimir от 09 Февраля 2012, 09:46:40
Я бы делал так:

В клиентской части макрос вывода карты построен таким образом, что сперва пытается прочитать координаты из статического xml-файла. Если такого xml нет - читает из БД, строит его, сохраняет в файл.

В админке. Скорее всего, для этих координат создан свой тип данных. Поэтому перехватывать событие добавления/удаления/редактирования объекта каталога, проверять его тип и, если это нужный тип, просто удаляет существующий xml с координатами. Он будет перестроен заново при первом обращении посетителя к странице.
Название: Re:Закешировать только одну страницу
Отправлено: albion от 09 Февраля 2012, 11:33:24
Логика процесса и так в принципе понятна. Может есть какие стандартные способы это сделать?
Название: Re:Закешировать только одну страницу
Отправлено: admin от 09 Февраля 2012, 13:14:09
посмотрите еще и в эту сторону
Цитировать
Кеширование результатов вызова

Если установлен один из кеширующих бекэндов и включено кеширование на сайте, можно управлять кешированием результатов вызова по протоколу UData. Для этого укажите после вызова по протоколу параметр ?expire = время_кеширования_в_секундах.

Например:

<xsl:apply-templates select="document('udata://content/menu?expire=600')//item" mode="menu" />

, хотя вариант с сохранением в файл более основателен. Примеров кода сейчас нет, но сделать можно, подводных камней особо нет, решал год назад