Швидкий посібник для початківців OpenCart 1.5.X для розробників
Цей посібник написаний для розробників, які вже знайомі з PHP, OOP та архітектурою MVC
Далі ви побачите приклади для каталогічної сторони кошика. Сторона адміністратора є ідентичною за функцією за винятком переглядів, які відмічені у відповідному розділі
Розуміння бібліотек
Усі функціонування бібліотеки доступні за допомогою контролера, моделі та представлень за допомогою $this->library_name
. Все це можна знайти в /system/library/
папці. Наприклад, для доступу до поточних продуктів кошика для покупок вам потрібно буде використовувати Cart
клас, до якого є /system/library/cart.php
і до якого можна отримати доступ, використовуючи$this->cart->getProducts()
Поширені предмети
customer.php
- Функції, пов'язані з клієнтом
user.php
- Функції, пов’язані з користувачем адміністратора
cart.php
- Функції, пов'язані з кошиком
config.php
- Від цього завантажуються всі налаштування
url.php
- Функції генерації URL-адрес
Розуміння параметра маршруту
Рамка OpenCart покладається на route=aaa/bbb/ccc
параметр рядка запиту, щоб знати, що завантажувати, і є основою функції пошуку файлів, які потрібно редагувати для кожної сторінки. Більшість маршрутів фактично використовують лише те, aaa/bbb
що має розглядатися як дві частини, проте деякі містять три частини aaa/bbb/ccc
. Перша частина, aaa
як правило, стосується папки в загальній папці, такі як контролер або папки шаблонів. Друга частина зазвичай стосується імені файлу, без відповідного .php
або .tpl
розширення. Третя частина пояснюється в розділі "Розуміння контролерів" нижче
Розуміння мов
Мови зберігаються у /catalog/language/
папці у your-language
підпапці. У межах цього загальні текстові значення, які використовуються на різних сторінках, зберігаються у your-language.php
файлі всередині папки, тому для англійської мови на стороні каталогу ви знайдете значення в catalog/language/english/english.php
. Для конкретного тексту сторінки вам знадобиться route
сторінка (Це, як правило, так, але не завжди, оскільки ви можете вказати будь-який мовний файл, який вам подобається). Наприклад, на пошуковій сторінці є маршрут product/search
, і тому текст, визначений для цієї сторінки, можна знайти в catalog/language/english/product/search.php
(Зауважте, що ім'я та підпапка файлу відповідають маршруту, за яким слід .php
.
Щоб завантажити мову в контролер, ви використовуєте
$this->language->load('product/search');
Потім ви можете використовувати функцію мовної бібліотеки get
для отримання конкретних мовних текстів, таких як
$some_variable = $this->language->get('heading_title');
Змінні мови призначаються у мовному файлі за допомогою спеціальної змінної, $_
яка є масивом ключів та текстових значень. У вашому /catalog/language/english/product/search.php
слід знайти щось подібне
$_['heading_title'] = 'Search';
Значення у глобальному мовному файлі english/english.php
автоматично завантажуються та доступні для використання без $this->language->load
методу
Розуміння контролерів
Контролери завантажуються на базі route
і досить зрозумілі вперед. Контролери розташовані в /catalog/controller/
папці. Продовжуючи з останнього прикладу, Контролер сторінки пошуку знаходиться в /product/search.php
цій папці. Знову зауважте, що маршрут, за яким .php
слід, використовується.
Відкриваючи файл контролера, ви побачите ім'я Controller
класу Pascal Case, що розширює клас, званий ControllerProductSearch
. Знову це характерно для маршруту, Controller
після чого слід зазначити ім'я підпапки та ім'я файлу без розширення з великої літери. Капіталізація фактично не потрібна, але рекомендується для легкої читабельності. Варто зазначити, що назви класів не беруть ніяких значень із підпапки та імені файлу, крім букв та цифр. Підкреслення видалено.
У межах класу знаходяться методи. Методи в оголошеному класі public
доступні для запуску через маршрут - private
ні. За замовчуванням стандартним маршрутом з двох частин ( aaa/bbb
вище) index()
називається метод за замовчуванням . Якщо використовується третя частина маршруту ( ccc
вище), замість цього буде застосовано цей метод. Наприклад, account/return/insert
завантажить /catalog/controller/account/return.php
файл і клас і спробує викликати insert
метод
Розуміння моделей
Моделі в OpenCart знаходяться в /catalog/model/
папці і групуються на основі функції, а не маршруту, і тому вам потрібно буде завантажити їх у свій контролер через
$this->load->model('xxx/yyy');
Це завантажить файл у xxx
названу підпапку yyy.php
. Потім він доступний для використання через об’єкт
$this->model_xxx_yyy
і як з контролерами, ви можете викликати лише його public
методи. Наприклад, щоб змінити розмір зображення, ви б використали tool/image
модель та назвали її resize
метод наступним чином
$this->load->model('tool/image');
$this->model_tool_image->resize('image.png', 300, 200);
Розуміння призначення змінної у видах контролера
Для того, щоб передати значення перегляду з контролера, вам просто потрібно призначити свої дані $this->data
змінній, яка по суті є масивом пар значень key =>. Як приклад
$this->data['example_var'] = 123;
Доступ до цього у перегляді мало бути зрозумілим, якщо ви знайомі з методом extra (), який перетворює кожну клавішу в змінну. Таким чином, example_var
ключ стає $example_var
і до нього можна отримати доступ у такому вигляді.
Розуміння тем
Теми доступні лише на стороні каталогу та в основному це папка шаблонів, таблиць стилів та зображень тем. Папки тем розміщуються у /catalog/view/theme/
папці, а потім - назва теми. Назва папки не має важливого значення, за винятком default
папки
Сторона адміністратора використовує /admin/view/template/
(пропуск /theme/theme-name/
із шляху, оскільки він не дозволяє відрізняти теми)
Файли шаблонів перебувають у template
папці в темі. Якщо будь-який шаблон не доступний для вибраної теми, шаблон папки за замовчуванням використовується замість цього. Це означає, що теми можна створювати з дуже малою кількістю файлів і все ще функціонувати повноцінно. Це також зменшує дублювання коду та створює проблеми при здійсненні оновлення
Розуміння поглядів (шаблонів)
Як і мова та моделі, файли перегляду, як правило, пов'язані з маршрутом, хоча це зовсім не повинно бути. Шаблони на стороні каталогу зазвичай знаходяться в тому випадку, /catalog/view/theme/your-theme/template/
якщо його не існує, і в цьому випадку будуть використані шаблони теми за замовчуванням. На нашому прикладі сторінки пошуку вище, файл є product/search.tpl
. Для маршрутів з трьох частин, як правило, aaa/bbb_ccc.tpl
немає, хоча немає жорсткого встановленого правила. У адміністраторі більшість сторінок слідують за цим, за винятком того, що на сторінках перелічуються елементи, як-от сторінка з переліком продукту, catalog/product_list.tpl
і форма редагування продукту є catalog/product_form.tpl
. Знову ж таки, вони не встановлені, а стандарт для кошика за замовчуванням.
Файл шаблону насправді є лише іншим файлом php, але з розширенням .tpl і фактично запускається у файлі контролера, тому всі речі, які можна кодувати в контролері, можна запускати у файлі шаблону (хоча не рекомендується, якщо абсолютно необхідно)
Розуміння об’єкта бази даних
Запити виконуються за допомогою
$result = $this->db->query("SELECT * FROM `" . DB_PREFIX . "table`");
DB_PREFIX
як випливає з назви, це константа, що містить префікс бази даних, якщо такий існує
$result
поверне об’єкт для SELECT
запитів, що містить кілька властивостей
$result->row
містить дані першого ряду, якщо один або більше повертаються як асоціативний масив
$result->rows
містить масив результатів рядків, ідеально підходить для перегляду циклу за допомогою foreach
$result->num_rows
містить кількість повернутих результатів
Існує також кілька додаткових методів, якими $this->db
володіє об’єкт
$this->db->escape()
використовує mysql_real_escape_string () для переданого значення
$this->db->countAffected
повертає кількість рядків, на які впливає UPDATE
запит тощо
$this->db->getLastId()
повертає останній ідентифікатор автоматичного збільшення за допомогою mysql_insert_id ()
Розуміння зарезервованих змінних
Замість стандартного OpenCart має змінні для використання зумовлений $_GET
, $_POST
, $_SESSION
, $_COOKIE
, $_FILES
, $_REQUEST
і$_SERVER
$_SESSION
редагується, використовуючи, $this->session->data
де дані - це асоціативний масив, що імітує$_SESSION
До всіх інших можна отримати доступ, використовуючи $this->request
та "очистившись", щоб відповідати магічним котируванням увімкнено / вимкнено, так
$_GET
стає $this->request->get
$_POST
стає $this->request->post
$_COOKIE
стає $this->request->cookie
$_FILES
стає $this->request->files
$_REQUEST
стає $this->request->request
$_SERVER
стає $this->request->server
Підсумок
Хоча вищезазначене не є пуленепробивним посібником для розробників, сподіваємось, це послужить гарною відправною точкою для тих, хто починає працювати