Общие принципы моделей
Модель в MV представляет собой PHP класс и SQL таблицу, управляемую данным классом.
Основные правила создания модели:
- Название php класса должно начинаться с названия модели, например: "pages.model.php", "gallery.model.php".
- Файлы классов моделей должны находиться в папке "models" в корне проекта.
- Класс модели должен быть унаследован от класса "Model".
- Класс модели должен иметь свойство "$name", которое является названием модели.
- Класс модели должен иметь свойство "$model_elements", которое является массивом полей данной модели, аналогично полям в таблице базы данных.
- В основе задания полей в свойстве "$model_elements" модели стоят Типы данных.
- SQL таблица модели должна иметь тоже название что и класс модели в нижнем регистре "pages", "gallery".
- Названия полей в таблице должны совпадать с полями модели в массиве "$model_elements" (название поля в SQL таблице является третьим по счету элементом массива).
- Таблица должна иметь целочисленное поле "id", которое должно быть ее первичным ключом и иметь атрибут "auto increment".
- Для активации модель должна быть прописана в файле "config/models.php", в данном файле название модели должно быть добавлено в массив "$mvActiveModels", после чего модель станет доступна в административном интерфейсе и на frontend части сайта.
Пример 1 Текстовые блоки
PHP класс "Blocks" находящийся в файле models/blocks.model.php
<? class Blocks extends Model { protected $name = "Текстовые блоки"; protected $model_elements = array( array("Активация", "bool", "active"), array("Название", "char", "name"), array("Содержание", "text", "content") ); } ?>
Таблица SQL в базе данных с аналогичным именем "blocks" (СУБД MySQL)
CREATE TABLE `blocks` ( `id` int(11) NOT NULL AUTO_INCREMENT, `active` tinyint(4), `name` varchar(200), `content` text, PRIMARY KEY (`id`), ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
При установке MV в нем находятся 3 предустановленные модели:
- Pages (страницы меню)
- Blocks (текстовые блоки, фрагменты)
- SEO (данные для seo оптимизации).
База данных уже содержит необходимые таблицы для данных моделей. Таблица "pages" имеет 1 запись для приветственной страницы.
Модель "SEO" в отличии от "Pages" и "Blocks" представляет собой "Простую модель", данные которой представляют собой пару ключ - значение. Подробнее о данном типе моделей читайте в разделе Простые модели.
Пример 2 Новости
<? class News extends Model { protected $name = "Новости"; protected $model_elements = array( array("Название", "char", "name", array("required" => true)), array("Раздел", "enum", "type", array("values_list" => array("politic" => "Политика", "economy" => "Экономика", "sport" => "Спорт", "culture" => "Культура"))), array("Дата", "date", "date"), array("Активен", "bool", "active"), array("Текст", "text", "content", array("rich_text" => true)), array("Комментарии", "many_to_one", "comments", array("related_model" => "News_Comments", "name_field" => "author")) ); } ?>
CREATE TABLE "news" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" VARCHAR, "type" VARCHAR, "date" VARCHAR, "active" INTEGER, "content" TEXT)
Пример 3 Комментарии к новостям
<? class News_Comments extends Model { protected $name = "Комментарии к новостям"; protected $model_elements = array( array("Автор", "enum", "author", array("foreign_key" => "Authors", "name_field" => "email")), array("Дата", "date_time", "date"), array("Новость", "enum", "news_id", array("foreign_key" => "News")), array("Текст", "text", "content"), ); protected $name_field = "author"; } ?>
CREATE TABLE "news_comments" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "author" INTEGER, "date" VARCHAR, "news_id" INTEGER, "content" TEXT)
Пример 4 Авторы комментариев
<? class Authors extends Model { protected $name = "Авторы комментариев"; protected $model_elements = array( array("Email", "email", "email", array("required" => true, "unique" => true)), array("Пароль", "password", "password"), array("Комментарии", "many_to_one", "comments", array("related_model" => "News_Comments", "name_field" => "date")), array("Фотографии", "multi_images", "pictures"), array("О себе", "text", "about") ); } ?>
CREATE TABLE "authors" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "email" VARCHAR, "password" VARCHAR, "pictures" TEXT, "about" TEXT)
Предыдущий раздел
Миграции