КАК НАПИСАТЬ МОДУЛЬ OPENCART (ЧАСТЬ 2)
В этой части будем разбираться с файлом модели (т.е. функций запросов в БД, так же считаем, что Вы прочиталя предыдущую часть)
Для админской части модуля коментов нужно 4 функции:
- Получение из БД всех записей
- Добавление комента
- Редактирование комента
- Удаление комента
Начинается модуль всегда так:
<?php
class ModelCommentsComments extends Model {
Схема названия класса такая же, как в названии контроллера.
public function getAll () {
$comments = array();
$this->db->query("CREATE TABLE IF NOT EXISTS " . DB_PREFIX . "comments (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
`image` VARCHAR(255) NOT NULL,
`text` TEXT NOT NULL,
PRIMARY KEY(`id`)
)");
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "comments ORDER BY id");
foreach ($query->rows as $result) {
$comments[] = $result;
}
return $comments;
}
Функция getAll будет получать из БД все записи:
Для начала создается массив, куда будем записывать результат.
Затем ключевое для opencart: $this->db->query
Это значит, что нужно обратиться к классу Model (так как наш класс наследуется от модели), в ней найти объект db — который имеет в себе функции для безопасного общения с базой. Используется функция query — запрос, в котором аргументами выступает обычный mySql запрос.
Рассмотрим сам запрос, по человечески он выглядит так:
«Если не существует таблицы префикс_всех_таблиц_вашей_бд_comments, то создать ее. Создать в ней столбцы id name image text с параматрами. Главный ключ — id»
Чтобы научиться писать такие строчки — ищите по словам «синтаксис mysql, примеры»
Эта строчка не будет выполнена, если таблица есть — т.е. при любом кроме первого вызове этой функции.
Сам запрос следует далее
$this->db->query("SELECT * FROM " . DB_PREFIX . "comments ORDER BY id");
Опять таки «по человечески»: Выбрать все записи из такой то таблицы, сортируя по id.
И этот результат выборки с базы с помощью цикла foreach разбиваем на строчки и все их помещаем в массив $comments
Остальные функции аналогичны и не особо сложные. Специфики OpenCart нету, сложности могут возникнуть только в запросах к БД.
public function addNew ($name,$image,$text){
$this->db->query("INSERT INTO " . DB_PREFIX . "comments (`name`, `image`, `text`) VALUES
('".$name."','".$image."','".$text."')");
return 'added';
}
public function updateRow ($id,$name,$image,$text){
$this->db->query("UPDATE " . DB_PREFIX . "comments SET name = '".$name."', image= '".$image."', text = '".$text."' WHERE id = '" . (int)$id . "'");
return 'updated';
}
public function deleteRow ($id){
$this->db->query("DELETE FROM " . DB_PREFIX . "comments WHERE id = ".$id);
return 'deleted';
}
Таким образом строятся все файлы модели.