Краткое руководство разработчика OpenCart 1.5.X для начинающих
Это руководство написано для разработчиков, уже знакомых с PHP, ООП и архитектурой 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
следует.
Открыв файл контроллера, вы увидите, что имя класса Pascal Case, расширяющее Controller
класс, называется 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
переменной, которая по сути представляет собой массив пар ключ => значение. Например
$this->data['example_var'] = 123;
Доступ к этому в представлении должен быть легким для понимания, если вы знакомы с методом extract (), который преобразует каждый ключ в переменную. Таким образом, 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
Резюме
Хотя приведенное выше не является надежным руководством для разработчиков, мы надеемся, что оно послужит хорошей отправной точкой для тех, кто только начинает.