Архитектура
Типы данных
В основе архитектуры MV лежат типы данных для моделей и форм, среди которых имеются как типичные для программирования (строковый, целочисленный и пр.), так и специальные для более удобной работы (файлы, изображения, массивы изображений, группа). Все типы данных имеют под собой поля в SQL таблице за исключением типа "многие ко многим" (для него создается связующая таблица), а также "многие к одному", который представляет собой обратный подсчет записей по внешнему ключу. Типам присваиваются специальные атрибуты, задающие особые настройки для данного поля.
Для создания поля в модели или форме нужно заполнить массив из 3 обязательных параметров и одного необязательного:
- текстовое название поля
- тип данных
- название поля в SQL таблице
- массив дополнительных параметров
array("Активация", "bool", "active", array("on_create" => true)), array("Название", "char", "name", array("required" => true)), array("Альбом", "enum", "album", array("foreign_key" => "Albums", "empty_value" => true)), array("Рейтинг", "float", "rating"), array("Позиция", "order", "order"), array("Изображение", "image", "image", array("required" => true))
Модели и представления
Основными компонентами MV являются модели - классы для управления данными в SQL таблицах и представления (шаблоны) - PHP файлы для генерации HTML кода. Модель состоит из нескольких типов данных, которые внутри модели взаимодействуют в виде объектов друг с другом и с другими моделями. На основании полей модели автоматически строится административный интерфейс.
class News extends Model { protected $name = "Новости"; protected $model_elements = array( array("Активация", "bool", "active", array("on_create" => true)), array("Дата", "date", "date", array("required" => true)), array("Название", "char", "name", array("required" => true)), array("Новость", "text", "content", array("rich_text" => true)), array("Комментарии", "many_to_one", "comments", array("related_model" => "Comments")) ); public function display() { $rows = $this -> select(array("active" => 1, "order->desc" => "date")); $html = ""; foreach($rows as $row) { $html .= "<h2>".$row["name"]."</h2>"; $html .= "<p>Дата: <span>".I18n :: firmatDate($row["date"])."</span></p>"; $html .= "<p>".$row["content"]."</p>"; } return $html; } }
В качестве шаблонизатора выступает PHP, файлы шаблонов расположены в специальной папке и подключаются в результате обработки маршрутизатором переданного URL. В шаблоне происходит поиск нужных записей из SQL таблиц, а также вызов методов модели для отображения данных.
<div id="content"> <h1><? echo $news -> name; ?></h1> <p class="date"><? echo I18n :: formatDate($news -> date); ?></p> <? echo $news -> content; ?> </div>
Маршрутизация
Подключение нужного шаблона (представления) осуществляется при помощи маршрутизации на основе переданного URL. Запрошенный URL разделяется на части и анализируется маршрутизатором, после чего происходит подключение шаблона. При анализе URL не применяются регулярные выражения, для увеличения производительности происходит сравнение с типовыми шаблонами, описанными в разделе Общие принципы шаблонов.
Шаблон подключается в любом случае, даже если совпадений не найдено, будет подключен шаблон "по умолчанию", из которого можно вызвать 404 ошибку
"contacts/" => "view-contacts.php", "user/login/" => "client/view-login.php", "news/*/" => "view-news.php"
Формы
Формы создаются на основе типов данных. Также, можно создавать формы на основе моделей, используя уже созданную структуру полей. MV располагает инструментами для проверки полей формы, вывода полей и их ошибок, компоновки сообщений, быстрого создания записей в SQL таблицах на основе данных формы.
<? $form_news = new Form("News"); $fields = array( array("Имя", "char", "name", array("required" => true)), array("Email", "email", "email", array("required" => true)), array("Телефон", "phone", "phone"), array("Вопрос", "text", "question", array("required" => true)) ); $form_contact = new Form($fields); ?> <form method="post" action=""> <table> <? echo $form_contact -> display(); ?> </table> <p><input type="submit" value="Отправить" /></p> </form>
Административная панель
В состав MV входит административная панель, которая автоматически создает интерфейс для управления моделями. Все активные модели имеют свой раздел в административной панели, через который можно создавать, редактировать и удалять записи.
Следующие компоненты входят в состав административной панели:
- списки всех записей модели
- управление записями (CRUD)
- удаление в корзину с возможностью восстановления
- поиск (фильтрация) записей по всем полям
- массовые операции с записями
- история изменений всех полей каждой записи
- администраторы с возможностью разграничения прав
- история операций администраторов
- файловый менеджер