Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”

0 Пользователей и 1 Гость просматривают эту тему.

*

albion

  • ***
  • 109
  • +3/-0
    • Просмотр профиля
    • Веб-Админ
Закешировать только одну страницу
« : 09 Февраля 2012, 08:14:18 »
В базу UMI в однин из разделов каталога будет внесено более 1000 объектов, которые будут выводится на сайт все разом. Каким образом можно закешировать (сохранить) весь этот объем и обновлять по крону, либо по нажатии какой либо ссылки? Формат вывода XML, а если быть более точным, то XML в формате Яндекс карт. И соответственно все эти данные - координаты и описание объектов на Яндекс карте.

*

Vladimir

  • ****
  • 279
  • +48/-0
    • Просмотр профиля
Re:Закешировать только одну страницу
« Ответ #1 : 09 Февраля 2012, 09:46:40 »
Я бы делал так:

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

В админке. Скорее всего, для этих координат создан свой тип данных. Поэтому перехватывать событие добавления/удаления/редактирования объекта каталога, проверять его тип и, если это нужный тип, просто удаляет существующий xml с координатами. Он будет перестроен заново при первом обращении посетителя к странице.

*

albion

  • ***
  • 109
  • +3/-0
    • Просмотр профиля
    • Веб-Админ
Re:Закешировать только одну страницу
« Ответ #2 : 09 Февраля 2012, 11:33:24 »
Логика процесса и так в принципе понятна. Может есть какие стандартные способы это сделать?

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Закешировать только одну страницу
« Ответ #3 : 09 Февраля 2012, 13:14:09 »
посмотрите еще и в эту сторону
Цитировать
Кеширование результатов вызова

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

Например:

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

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