Модель данных
Данные системы управления хранятся в:
- Файле настроек
cms/conf.php
. Файл содержит настройки подключения к базе данных, а также основные настройки сайта. Для доступа к настройкам используется$Conf
- Базе данных. Для хранения данных может быть использована MySQL или SQLite. Для доступа к базе данных используется
$Data
В базе данных хранится информация обо всех страницах сайта. Структура базы данных оптимизирована таким образом, чтобы разработчику не приходилось изменять ее структуру для решения типовых задач.
Информация о каждой странице сайта хранится в нескольких таблицах. Это сделано для того, чтобы запросы вида
SELECT *
возвращали не все данные, а только наиболее востребованные, для оптимизации быстродействия системы.
Для хранения страндартных страниц используются следующие таблицы:
item
– список страниц и общая информация о нихhtml
– HTML-содержимое страницmenu
– информация о меню, в которых отображать страницыinfo
– дополнительная информация для страницtags
– списки тэгов для страниц
Кроме этого, используются вспомогательные таблицы, содержимое которых автоматически обновляется системой управления:
path
– список всех разделов, к которым принадлежат все страницыfull
– полный текст страниц, оптимизированный для полнотекстового поискаback
– резервные копии страниц, которые были удалены
Каждая страница, информация о которой содержится в базе данных, представляется в виде объекта класса
Cms\Root\Page
или его наследника. Система управления содержит все необходимые инструменты для получения данных из этих таблиц и записи данных, когда это необходимо.
Общая схема работы выглядит следующим образом:
- Необходимо получить ID страницы или массив со значениями полей таблицы
item
, соответствующими нужной странице:
$id = "about";
$row = $Data->getRow("SELECT * FROM `item` WHERE `id`='about'");
- Данные преобразуются в объект с помощью
$Main->load()
:
$Item = $Main->load($id);
$Item = $Main->load($row);
- Результатом выполнения будет
null
, если запрошенная страница не найдена, или объект нужного класса, соответствующего типу страницы
$id = '/страница/не/найдена';
$Main->load($id) === null;
- Можно загрузить полную или частичную информацию, относящуюся к нужной странице:
$Item->open();
$Item->openHtml();
$Item->openMenu();
$Item->openInfo();
- Можно обратиться к любым данные в виде свойств объекта:
print $Item->title;
print $Item->html;
print $Item->{'menu-left'};
print $Item->info['price'];
- Можно изменить любые данные о странице, кроме ее ID:
$Item->title = 'О компании';
$Item->{'menu-left'} = 'Y';
unset($Item->info['price']);
- Можно сохранить все измененные данные в базе с помощью
$Item->save()
или$Item->saveAll()
:
$Item->save();
$Item->saveAll();