Система управления «Сайт PRO»
Версия 20240107

Модель данных

Данные системы управления хранятся в:

  • Файле настроек 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();