Швидкий посібник для початківців 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
Підсумок
Хоча вищезазначене не є пуленепробивним посібником для розробників, сподіваємось, це послужить гарною відправною точкою для тих, хто починає працювати