16
Окт
Кэширование динамических блоков в NetCat
Категории: CMS NetCat создание сайта | Комментарии (5)На многих сайтах есть информационные блоки, которые показывают одну и ту же информацию на всех страницах сайта. Например, последние новости, последние статьи, контакты. Самый простой спобов вывода таких блоков - функция s_list_class, но как я уже писал, она слишком ресуркоемкая для простых операций. Наилучшим способом оптимизации вывода таких блоков является кеширование, поскольку эти блоки обновляются очень редко по сравнению с количеством их просмотров.
При кешировании данных, возникает вопрос о том где их хранить. Если мы используем файлы, то для получения этих данных нужно будет дополнительно считать их с диска. Но можно избежать дополнительных запросов, если хранить кэшируемые данные вместе с системными данными которые и так считываются при каждом создании страницы. В качестве таких хранилищ можно использовать поля сайта или раздела. Если выодимая информация зависит от раздела, то сохранять кеш нужно в полях раздела, если на всем сайте она не меняется, то в полях сайта.
Рассмотрим на примере кеширования блока новстей. Кеш должен обновляться при добавлении новости, редактировании новости и удалении новости.
- Создадим дополнительное поле в настройках сайта.
Разработка -> Системные таблицы -> Поля таблицы сайты. Добавим поле "NewsBlock" с описанием "Блок новостей (кэш)", тип: текстовый блок. Ставим галочку "наследовать значение поля". - Добавим сохранение кеша при добавлении и изменении новостей.
Разработка -> Список компонентов -> Добавление -> Действие после добавления объекта. Генерируем код действия если поле пустое. Добавлем следующий код:
$admin_mode=0;
$news=s_list_class(123,456,"recNum=3&nc_title=1",1);
$db->query("UPDATE Catalogue SET NewsBlock='".mysql_real_escape_string($news)."' WHERE Catalogue_ID=$catalogue");
Аналогично для действия после изменения объекта, действие после включения и выключения объекта, действие после удаления объекта. - Заменим в макете вызов функции
".s_list_class(123,456,"recNum=3&nc_title=1",1)." на поле сайта $current_catalogue[NewsBlock]
--
Тренинг искусство презентации.
Александр, 2008-10-26 @ 19:08
Круто. Спасибо.
10 заповедей разработчика на NetCat | Блогнот, 2008-11-03 @ 11:30
[...] минимальным выполнением php кода. Но лучше всего будет кешировать такие блоки.Используйте функции opt() и opt_case() только для вывода html. [...]
Andry, 2008-12-19 @ 03:02
Почему то когда добавляю
$news=s_list_class(123,456,"recNum=3&nc_title=1",1);
то данные сохраняются в кэш, но не совсем те, а данные с блоком для редактирования
Меняю на
$news=s_list_class(123,456,"recNum=3&nc_title=1");
т.е, убираю ",1" вконце и данные в кэш уже не сохраняются, поле пустое.
В чем проблема то?
Andry, 2008-12-19 @ 03:51
И что делать с $fullLink ? зачем нужен путь в ружиме редактирования. Как подставить нормальный?
yakodzun, 2008-12-19 @ 08:30
чтоб убрать блок редактирования нужно перед $news=s_list_class ... вставить строку
$admin_mode=0;
также это решит проблему с $fullLink