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

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

Модели (models)

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

Формы

SQL запросы

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

Плагины

Вывод данных в шаблоне

Шаблоны создаются для отображения данных из моделей. Сами модели доступны как объекты в главном объекте "$mv". Для того чтобы вывести данные модели из базы данных можно пойти следующими путями.

Использование объекта класса Record

Данный класс предназначен для работы с извлеченными из базы SQL данными. Создается объект обычно в результате вызова методов по поиску нужной записи, которая затем возвращается в объекте Record. Извлечение данных из такого объекта описано в разделе Объект класса Record.

$content = $mv -> pages -> findRecord(array("url" => "events", "active" => 1));

$last_event = $mv -> events -> findRecord(array("active" =>1, "limit->" => 1, "order->desc" => "date"));

$gallery_data = $mv -> gallery -> loadIntoRecord(); //Простая модель

Методы объекта модели

  • resizeImage($image, $width, $height) - уменьшение изображения, возвращает тэг "img"
  • cropImage($image, $width, $height) - уменьшение и обрезка изображения, возвращает тэг "img" (подробнее в разделе Файлы и изображения)
  • extractImages($value, [$no-comments]) - извлечение изображений из поля типа "multi_images". Данные с типом "multi_images" хранятся в базе данных как один фрагмент текста, который представляет собой пути к изображениям на жестком диске. Пути "склеены" между собой разделителем "-*//*-", также после пути до файла может стоять комментарий к данному изображению между символами "(*". При извлечении данных такого типа из базы необходимо разделить изображения и отделить от них комментарии. Если в результирующем массиве комментарии не нужны, надо передать значение необязательного параметра в виде "no-comments".
  • getFirstImage($value) - извлечение первого изображения из массива изображения (тип "multi_images")
  • getEnumValues($field) - возвращает массив (ключ - значение) значений поля типа "enum"
  • getEnumTitle($field, $key) - возвращает значение по ключу поля типа "enum"
  • displayEnumOptions($field, [$selected]) - создает HTML из тэгов "option" для элемента "select", используется для вывода полей типа "enum", в необязательном параметре "$selected" можно передавать значение, которое должно быть изначально выбрано в списке

Создание метода внутри модели для генерации HTML кода

Предположим есть модель "Новости"

class News extends Model
{
    protected $name = "Новости";

    protected $model_elements = array(
        array("Активировать", "bool", "active",
        array("on_create" => true)),
        array("Заголовок", "char", "name", array("required" => true)),
        array("Дата выхода", "date", "date"),
        array("Содержание", "text", "content")
    );
}

Необходимо вывести список новостей с заголовком и ссылкой на полный текст новости. Добавляем в модель "News" новый метод для вывода html.

public function display()
{
   //Извлекаем необходимые записи из базы данных
   $rows = $this -> select(array("order->desc" => "date", "limit->" => $this -> pager -> getParamsForSQL()));

   $html = ""; //Переменная для сборки html кода

   foreach($rows as $row)
   {
      $url = $this -> root_path."news/".($row['url'] ? $row['url']."/" : $row['id']."/"); //Ссылка на новость

      $html .= '<p class="date">'.I18n :: dateFromSQL($row['date']).'</p>'; //Дата и заголовок новости
      $html .= '<a class="title" href="'.$url.'">'.$row['name'].'</a>';
   }

   return $html;
}

Вывод данных из простых моделей

Если модель относится к типу Простые модели, то данные извлекаются иным образом, т.к. таблица простой модели содержит всего 2 колонки - "ключ" и "значение". Дополнительная информация содержится в разделе Управление простыми моделями.

class Options extends Model_Simple
{
   protected $name = "Дополнительные параметры";

   protected $model_elements = array(
       array("Email для писем с сайта", "email", "email", array("required" => true)),
       array("Телефон", "char", "phone"),
       array("Слоган", "text", "slogan")
   );
};

В шаблоне можно извлекать значения по ключам из объекта модели, либо создать объект класса "Record" если требуется более сложная обработка данных при вставке в шаблон.

//Вывод данных в html шаблон
<div id="header">
   <p><? echo $mv -> options -> phone; ?></p>
   <h3><? echo $mv -> options -> slogan; ?></h3>
</div>

//Извлечение email адреса для отправки сообщения
if(!$form -> hasErrors())
{  
    $recipient = $mv -> options -> email;
    $message = $form -> composeMessage(array("head", "company", "name", "email", "telephone"));  
    Email :: send($recipient, "Сообщение с сайта", $message);
    $mv -> redirect("order/?send");
}

Пример извлечение всех данных простой модели в Объект класса Record. Данный способ часто используется если среди типов данных есть Файлы и изображения.

$params = $mv -> options -> loadIntoRecord();
echo $params -> phone;
echo $params -> content;

Внимание! При использовании объекта Record с простой моделью обновления данных как в разделе Управление записями не предусмотрено.

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

Создание нового шаблона

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

Объект класса Record