Модель компонента

Модель представляет из себя PHP-класс, внутри которого реализуются методы для создания (add), извлечения (get), изменения (update) и удаления (delete) записей из базы данных.

Создайте файл model.php в папке компонента и поместите в него каркас модели:

<?php
if(!defined('VALID_CMS')) { die('ACCESS DENIED'); }
 
class cms_model_guestbook{
 
    function __construct(){
        $this->inDB = cmsDatabase::getInstance();
    }
 
    // ... здесь будут методы для работы с данными ...
}

Название класса модели формируется из двух частей: cms_model_ + <название_компонента>

Теперь реализуем метод для добавления сообщений нашей гостевой:

    // ...
 
    public function addMessage($title, $message, $user_id) {
 
        //готовим запрос для добавления записи
        $sql = "INSERT INTO cms_guestbook (title, message, user_id, pubdate)
                VALUES ('{$title}', '{$message}', '{$user_id}', NOW())";
 
        //выполняем запрос
        $this->inDB->query($sql);
 
        //если возникла ошибка, вернем false
        if ($this->inDB->error()) { return false; }
 
        //если ошибок не было, вернем ID новой записи
        return $this->inDB->get_last_id('cms_guestbook');
    }
    // ...

Примечание: Обратите внимание что в этой функции мы не реализуем никакой логики, кроме добавления записи в базу данных. Функция принимает все необходимые данные (заголовок, текст и автора сообщения) в качестве аргументов, формирует запрос и выполняет его.

Для работы с базой данных используется объект $this→inDB, который мы получили ранее, в конструкторе модели:

    // ...
 
    function __construct(){
        $this->inDB = cmsDatabase::getInstance();
    }
    // ...

Полный список методов этого объекта вы можете посмотреть в файле /core/classes/db.class.php

Примечание: Обычно функции модели возвращают true или false, чтобы контроллер компонента мог судить об удачности выполнения операции. Однако в случае с добавлением записей считается за правило возвращать ID вставленной записи в случае удачи и false в случае ошибки.

Следующим шагом создадим метод для удаления сообщения:

    // ...
 
    public function deleteMessage($message_id) {
 
        $sql = "DELETE FROM cms_guestbook WHERE id = '{$message_id}'";
 
        //выполняем запрос
        $this->inDB->query($sql);
 
        //если возникла ошибка, вернем false
        if ($this->inDB->error()) { return false; }
 
        //если ошибок не было, вернем true
        return true;
    }
    // ...

Он имеет такую же структуру, меняется лишь запрос и входящие параметры (для удаления достаточно знать только ID сообщения).

Остался последний нереализованный метод - для извлечения сообщений из базы. Давайте напишем его:

    // ...
 
    public function getMessages() {
 
        //Подключим ядро движка, оно потребуется ниже
        $inCore = cmsCore::getInstance();
 
        $sql = "SELECT id,
                       title,
                       message,
                       user_id,
                       pubdate
                FROM cms_guestbook";
 
        //выполняем запрос
        $result = $this->inDB->query($sql);
 
        //если возникла ошибка, вернем false
        if ($this->inDB->error()) { return false; }
 
        //если не было получено ни одного сообщения - вернем false
        if (!$this->inDB->num_rows($result)) { return false; }
 
        //массив в который мы будем складывать сообщения
        //он необходим для того, чтобы мы могли вернуть все сообщения
        //за один вызов функции
        $messages = array();
 
        //получаем все сообщения по-очереди и складываем в массив
        while ($message = $this->inDB->fetch_assoc($result)){
 
            //c помощью метода ядра форматируем дату сообщения
            //(приводим ее в русский вид)
            $message['pubdate'] = $inCore->dateFormat($message['pubdate']);
 
            //и добавляем сообщение в массив
            $messages[] = $message;
        }
 
        //возвращаем массив сообщений
        //название каждого элемента в нем совпадает с названием полей
        //в таблице cms_guestbook
        return $messages;
    }
    // ...

Примечание: В данный момент функция getMessages() имеет простейший вид - в ней не предусмотрено разбиение на страницы, выборки сообщений от конкретной даты и конкретного автора. Эти возможности мы добавим в следующей части данного руководства. Сейчас наша задача изучить общие принципы.

Теперь наша модель имеет 3 метода - для создания, удаления и извлечения сообщений. На первое время этого нам достаточно и можно перейти к созданию контроллера компонента.

Что дальше?

 
разработка/компоненты/модель_компонента.txt · Последние изменения: 2015/02/10 17:48 От Aquarius