Документация

Начало работы

Модели (models)

Шаблоны (views) и маршрутизация (routes)

Формы

SQL запросы

Сессии и безопасность

Плагины

Общие принципы моделей

Модель в MV представляет собой PHP класс и SQL таблицу, управляемую данным классом.
Основные правила создания модели:

  1. Название php класса должно начинаться с названия модели, например: "pages.model.php", "gallery.model.php".
  2. Файлы классов моделей должны находиться в папке "models" в корне проекта.
  3. Класс модели должен быть унаследован от класса "Model".
  4. Класс модели должен иметь свойство "$name", которое является названием модели.
  5. Класс модели должен иметь свойство "$model_elements", которое является массивом полей данной модели, аналогично полям в таблице базы данных.
  6. В основе задания полей в свойстве "$model_elements" модели стоят Типы данных.
  7. SQL таблица модели должна иметь тоже название что и класс модели в нижнем регистре "pages", "gallery".
  8. Названия полей в таблице должны совпадать с полями модели в массиве "$model_elements" (название поля в SQL таблице является третьим по счету элементом массива).
  9. Таблица должна иметь целочисленное поле "id", которое должно быть ее первичным ключом и иметь атрибут "auto increment".
  10. Для активации модель должна быть прописана в файле "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 предустановленные модели:

  1. Pages (страницы меню)
  2. Blocks (текстовые блоки, фрагменты)
  3. 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)

Предыдущий раздел

Системные настройки

Следующий раздел

Типы данных