Вывод данных в шаблоне
Шаблоны создаются для отображения данных из моделей. Сами модели доступны как объекты в главном объекте "$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 с простой моделью обновления данных как в разделе Управление записями не предусмотрено.
Предыдущий раздел
Создание нового шаблона