КАК НАПИСАТЬ МОДУЛЬ OPENCART (ЧАСТЬ 2)

КАК НАПИСАТЬ МОДУЛЬ 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';
 }

Таким образом строятся все файлы модели.



Report Page