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

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

Модели (models)

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

Формы

SQL запросы

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

Плагины

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

Запись из таблицы можно извлечь при помощи методов модели "findRecord($params)" и "findRecordById($id)", которые возвращают объект класса "Record". Объект данного класса предоставляет возможность доступа и изменения значений полей записи в таблице. Параметры выборки "$params" представляют собой ассоциированный массив, описанный в разделе Конструктор запросов.

Например возьмем модель, описывающую книги.

class Books extends Model
{
    protected $name = "Книги";

    protected $model_elements = array(
        array("Название", "char", "name", array("required" => true)),
        array("Автор", "enum", "author", array("foreign_key" => "Authors")),
        array("Дата выхода", "date", "date"),
        array("Фотография обложки", "image", "photo"),
        array("Краткое описание", "text", "description")
    );

    public function display()
    {
        //Все записи в алфавитном порядке
        $rows = $this -> select(array("order->desc" => "name"));
        $html = "";

        foreach($rows as $row) //Создаем ссылку на каждую книгу
            $html .= '<a href="'.$this -> root_path.'book/'.$row['id'].'/">'.$row['name'].'</a>';

        return $html;
    }
}

После вызова метода "display()" мы увидим список ссылок на странице с книгами. Создадим файл шаблона "view-book.php" для отображения информации о книге. В файле "config/routes.php" добавим строку "'book/*/' => 'view-book.php'".

Содержимое файла "view-book.php"

<? 
$book_id = $mv -> checkUrlPart(1, "numeric");
//Берем вторую часть URL и сразу проверяем, чтобы она была числовой

$book = $mv -> books -> findRecordById($book_id);
//Извлекаем запись по ее id

$mv -> display404($service); //Если запись не найдена показываем 404 ошибку

include $mv -> views_path."main-header.php";
?>

   <div id="content">
        <h2><? echo $book -> name; ?></h2>
        <p>Автор: <? echo $book -> getEnumTitle("author"); ?></p>
        <p>Дата: <? echo $book -> date; ?></p>
        <? echo $book -> resizeImage("photo", 200, 300); ?>
        <h4>Краткое описание</h4>
        <? echo $book -> description; ?>
   </div>
<?
include $mv -> views_path."main-footer.php";
?>

Аналогично можно взять самую новую книгу с списке или первую книгу конкретного автора.

$book = $mv -> books -> findRecord(array("order->desc" => "date")); 
$book = $mv -> books -> findRecord(array("order->asc" => "date","author" => 42));

Принципы работы объекта Record

Доступ к полям извлеченной записи осуществляется как доступ к свойствам объекта (если данное свойство у объекта присутствует, то его значение будет возвращено).

//Получение свойства
echo $book -> name;
echo I18n :: dateFromSQL($book -> date);
echo nl2br($book -> description);

//Установка значения свойства
$book -> name = "Мастер и Маргарита";
$book -> description = "Классика русской литературы.";
$book -> author = 32; //Id записи "Булгаков М." в таблице модели "Authors" 

//Извлечение названия (заголовка) поля типа "enum" 
echo $book -> getEnumTitle("author");

Прочие методы

  • setValues($values) - передать массив значений полей в объект Record
  • getValues() - извлечь значения всех полей в виде ассоциированного массива
  • passContent($content) - передает данные из источника (должен быль одномерным ассоциированным массивом и иметь поле "id")
  • getEnumTitle($field) - получить название (не ключ!) поля типа "enum"

У объекта класса Record присутствуют методы для работы с файлами и изображениями, описанные в разделе Файлы и изображения:

  • resizeImage($field, $width, $height) - сжатие изображения с сохранением пропорций
  • cropImage($field, $width, $height) - сжатие и обрезка изображения
  • displayImage($field) - вывод html тэга img для поля типа "image"
  • displayFileLink($field) - вывод ссылки на файл для скачивания
  • extractImages($field, [$no-comments]) - извлечение изображений типа "multi_images". Данные с типом "multi_images" хранятся в базе данных как один фрагмент текста, который представляет собой пути к изображениям на жестком диске. Пути "склеены" между собой разделителем, также после пути до файла может стоять комментарий к данному изображению. При извлечении данных такого типа из базы необходимо разделить изображения и отделить от них комментарии.

Предположим в модели есть поле типа "multi_images" с названием "pictures", а $product - экземпляр класса "Record"

//Ассоциированный массив (ключи - пути к изображениям,
//значения - комментарии к соответствующим изображениям)
$images = $product -> extractImages("pictures"); 

//Обычный массив путей к изображениям (без комментариев)
$images = $product -> extractImages("pictures", "no-comments");
  • combineImages($field, $images) - "упаковка" изображений в поле типа "multi_images"
  • getFirstImage($field) - извлечение первого изображения из поля типа "multi_images"
  • wrapInParagraphs($field) - разбивает текст из textarea на параграфы

Также в классе Record присутствуют методы "create()", "update()" и "delete()", описанные в разделе Управление записями.

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

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

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

Файлы и изображения