Как стать гуру OpenCart?
Кажется, что у них нет документации, за исключением некоторых вызовов API на их официальных форумах. У меня есть опыт работы с Zend Framework и CodeIgniter Framework. Могут ли мастера OpenCart порекомендовать мне лучший способ изучить его и освоить в кратчайшие сроки? Я должен сделать большой проект с этим в ближайшее время.
4 ответа
Краткое руководство для разработчиков OpenCart 1.5.X для начинающих
Это руководство написано для разработчиков, уже знакомых с PHP, ООП и архитектурой MVC.
Далее вы увидите примеры для каталога на стороне корзины. Административная сторона идентична по функции, за исключением представлений, которые отмечены в соответствующем разделе
Понимание библиотек
Все функциональные возможности библиотеки доступны через Controller, Model и Views, используя $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()
использует http://php.net/mysql_real_escape_string для переданного значения
$this->db->countAffected
возвращает количество строк, затронутых UPDATE
запрос и так далее
$this->db->getLastId()
возвращает идентификатор последнего автоматического приращения, используя http://php.net/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
Резюме
Хотя вышеперечисленное не является пуленепробиваемым руководством для разработчиков, надеюсь, оно послужит хорошей отправной точкой для начинающих
Методы глобальной библиотеки: основные функции библиотеки opencart и их функциональные возможности. Большинство из них можно вызывать из любого места в каталоге или в папках администратора (контроллеры, модели, представления)
CACHE
$this->cache->delete($key) - Deletes cache [product, category, country, zone, language, currency,
manufacturer]
CART
$this->cart->getProducts() Gets all products currently in the cart including options, discounted prices, etc.
$this->cart->add( $product_id, $qty = 1, $options = array()) - Allows you to add a product to the cart
$this->cart->remove( $key ) - Allows you to remove a product from the cart
$this->cart->clear() - Allows you to remove all products from the cart
$this->cart->getWeight() - Sum of the weight of all products in the cart that have require shipping set to Yes
$this->cart->getSubTotal() - returns the subtotal of all products added together before tax
$this->cart->getTotal() - returns the total of all products added together after tax
$this->cart->countProducts() - returns the count of all product in the cart
$this->cart->hasProducts() - returns true if there is at least one item in the cart
$this->cart->hasStock() - returns false if there is at least one item in the cart that is out of stock
$this->cart->hasShipping() - returns true if there is at least one item in the cart that requires shipping
$this->cart->hasDownload() - returns true if there is at least one item in the cart that has a download
associated
CONFIG
$this->config->get($key) - returns setting value by keyname based on application (catalog or admin)
$this->config->set($key, $value) - set the value to override the setting value. DOES NOT SAVE TO DATABASE
CURRENCY
$this->currency->set($currency) - set or override the currency code to be used in the session
$this->currency->format($number, $currency = '', $value = '', $format = TRUE) - format the currency
$this->currency->convert($value, $from, $to) - convert a value from one currency to another. Currencies must
exist
$this->currency->getId() - get the database entry id for the current currency (1, 2, 3, 4)
$this->currency->getCode() - get the 3-letter iso code for the current currency (USD, EUR, GBP, AUD, etc)
$this->currency->getValue($currency) - get the current exchange rate from the database for the specified
currency.
$this->currency->has(currency) - Check if a currency exists in the opencart currency list
CUSTOMER
$this->customer->login($email, $password) - Log a customer in
$this->customer->logout() - Log a customer out
$this->customer->isLogged() - check if customer is logged in
$this->customer->getId() - get the database entry id for the current customer (integer)
$this->customer->getFirstName() - get customer first name
$this->customer->getLastName() - get customer last name
$this->customer->getEmail() - get customer email
$this->customer->getTelephone() - get customer telephone number
$this->customer->getFax() - get customer fax number
$this->customer->getNewsletter() - get customer newsletter status
$this->customer->getCustomerGroupId() - get customer group id
$this->customer->getAddressId() - get customer default address id (maps to the address database field)
DATABASE
$this->db->query($sql) - Execute the specified sql statement. Returns row data and rowcount.
$this->db->escape($value) - Escape/clean data before entering it into database
$this->db->countAffected($sql) - Returns count of affected rows from most recent query execution
$this->db->getLastId($sql) - Returns last auto-increment id from more recent query execution 4
DOCUMENT (*Called from controller only before renderer)
$this->document->setTitle($title) - Set page title
$this->document->getTitle()- Get page title
$this->document->setDescription($description) - Set meta description
$this->document->getDescription()- Get meta description
$this->document->setKeywords()- Set meta keywords
$this->document->getKeywords()- Get meta keywords
$this->document->setBase($base) - Set page base
$this->document->getBase() - Get page base
$this->document->setCharset($charset) - Set page charset
$this->document->getCharset() - Get page charset
$this->document->setLanguage($language) - Set page language
$this->document->getLanguage()- Get page language
$this->document->setDirection($direction) - Set page direction (rtl/ltr)
$this->document->getDirection()- Get page direction (rtl/ltr)
$this->document->addLink( $href, $rel ) – Add dynamic <link> tag
$this->document->getLinks()- Get page link tags
$this->document->addStyle( $href, $rel = 'stylesheet', $media = 'screen' ) – Add dynamic style
$this->document->getStyles()- Get page styles
$this->document->addScript( $script ) - Add dynamic script
$this->document->getScripts()- Get page scripts
$this->document->addBreadcrumb($text, $href, $separator = ' > ') – Add breadcrumb
$this->document->getBreadcrumbs()- Get Breadcrumbs
ENCRYPT
$this->encryption->encrypt($value) - Encrypt data based on key in admin settings
$this->encryption->decrypt($value) - Decrypt data based on key in admin settings
IMAGE
$this->image->resize($width = 0, $height = 0)
JSON
$this->json->encode( $data )
$this->json->decode( $data , $assoc = FALSE)
LANGUAGE
$this->language->load($filename);
LENGTH
$this->length->convert($value, $from, $to) - convert a length to another. units must exist
$this->length->format($value, $unit, $decimal_point = '.', $thousand_point = ',') - format the length to use
unit
LOG
$this->log->write($message) - Writes to the system error log
REQUEST
$this->request->clean($data) - Cleans the data coming in to prevent XSS
$this->request->get['x'] - Same as $_GET['x']
$this->request->post['x'] - Same as $_POST['x']
RESPONSE
$this->response->addHeader($header) - additional php header tags can be defined here
$this->response->redirect($url) - redirects to the url specified
TAX
$this->tax->setZone($country_id, $zone_id) - Set the country and zone id for taxing (integer)
$this->tax->calculate($value, $tax_class_id, $calculate = TRUE) - Calculate all taxes to be added to the total
$this->tax->getRate($tax_class_id) - Get the rates of a tax class id
$this->tax->getDescription($tax_class_id) - Get the description of a tax class id
$this->tax->has($tax_class_id) - Check if a tax class id exists in opencart
SESSION
$this->session->data['x'] - Same as $_SESSION['x']
Существует сайт OpenCart Wiki с документацией для начинающих разработчиков. Следуйте приведенным ниже URL для получения более подробной информации:
http://wiki.opencarthelp.com/doku.php?id=start http://wiki.opencarthelp.com/doku.php?id=methods_reference
Например, ссылка на метод содержит подробности для:
- Вход для клиентов
- Доступ к БД
- Обработка корзины покупок
- конфиг
- кэш
- Обработка валюты
Тем не менее Есть несколько страниц в стадии разработки, но это будет полезно.
[Обновить]
По состоянию на январь 2018 года домен opencarhelp.com не работает.
Хотя на эту тему уже отвечали много раз, я хотел бы предложить другой подход к освоению OpenCart на основе моего опыта.
Учиться путем практики
Создавая свою собственную платформу OpenCart с нуля с несколькими файлами, вы можете понять, как все соединено. Я буду подражать файловой структуре OpenCart для вас.
Создать файл index.php
<?php
// My simpleCart
1. Реестр
Opencart использует шаблон Registry для составления списка всех экземпляров загруженных классов. Это сердце вашего приложения OpenCart. Затем объект реестра передается каждой категории, модели и библиотеке для быстрого доступа к другим объектам.
создать файл с путем /system/engine/registry.php
<?php
// Registry class.
class Registry
{
private $data = array();
public function set($key, $value){
$this->data[$key] = $value;
}
public function get($key){
return (isset($this->data[$key])) ? $this->data[$key] : false;
}
}
в вашем index.php
<?php
// My simpleCart
//load dependency files
require_once('system/engine/registry.php');
//initialize registry
$registry = new Registry;
2. Выход
Теперь давайте добавим вывод, который будет нашим HTML в будущем. В конце концов, вся идея заключается в том, чтобы отправить строку текста в браузер.
Создать файл system/library/response.php
<?php
class Response {
private $output;
public function getOutput() {
return $this->output;
}
public function setOutput($output) {
$this->output = $output;
}
public function output() {
if ($this->output) {
echo $this->output;
}
}
}
и в вашем index.php
<?php
// My simpleCart
//load dependency files
require_once('system/engine/registry.php');
require_once('system/library/response.php');
//initialize registry
$registry = new Registry;
//initialize response
$response = new Response;
//add response object to the registry
$registry->set('response', $response);
//lets set an output as a test
$registry->get('response')->setOutput('Hello World');
//send the output to the client
$registry->get('response')->output();
Обратите внимание, я добавил Hello world только в качестве примера. Мы удалим это дальше. Обновите свой сайт, чтобы проверить это. Браузер должен отображать
Hello World
,
3. Контроллеры
Думайте о контроллерах как о страницах. Они будут определять, что будет отображаться клиенту: текст, HTML, JSON, скачать или даже изображение. На данный момент мы просто хотим страницу, которая отправляет текст.
Мы создадим контроллер для home
стр.
добавить файл с путем catalog/controller/common/home.php
<?php
class ControllerCommonHome{
private $registry = array();
public function __construct($registry){
$this->registry = $registry;
}
public function index(){
$output = 'Home Page';
//using the registry to get the response object and set the Output
$this->registry->get('response')->setOutput($output);
}
}
и отредактируйте свой index.php
<?php
// My simpleCart
//load registry
require_once('system/engine/registry.php');
//load response
require_once('system/library/response.php');
//initialize registry
$registry = new Registry;
//initialize response
$response = new Response;
//add resoinse object to the registry
$registry->set('response', $response);
//load controller common/home
require_once('catalog/controller/common/home.php');
$controller = new ControllerCommonHome($registry);
$controller->index();
//send the output to the client
$registry->get('response')->output();
обратите внимание, как я прошел
$refistry
в ControllerCommonHome, чтобы я мог получить доступ к нему внутри контроллера.
4. Маршрутизатор
Мы не хотим, чтобы контроллеры были жестко закодированы, верно. Мы будем использовать параметр route
с адреса URL, чтобы сказать нашей корзине, какой контроллер загрузить.
Создать файл с путем system/library/request.php
<?php
class Request {
public $get = array();
//for now I just need the $_GET parameter
public function __construct() {
$this->get = $_GET;
}
}
Создайте класс Router, который будет отвечать за инициализацию файла Controller на основе маршрута (другими словами: динамически вызывать контроллер)
<?php
class Router {
private $registry;
public function __construct($registry) {
$this->registry = $registry;
}
public function dispatch($route) {
require_once('catalog/controller/'.$route.'.php');
$class = "Controller".str_replace('/', '', $route);
$controller = new $class($this->registry);
$controller->index();
}
}
загрузить его в свой index.php
<?php
require_once('system/engine/registry.php');
require_once('system/engine/router.php');
require_once('system/library/response.php');
require_once('system/library/request.php');
$registry = new Registry;
$response = new Response;
$registry->set('response', $response);
$request = new Request;
$registry->set('request', $request);
//get the route from the url
if(isset($registry->get('request')->get['route'])){
$route = $registry->get('request')->get['route'];
}else{
$route = 'common/home';
}
//initiate the router and dispatch it base on the route
$router = new Router($registry);
$router->dispatch($route);
$registry->get('response')->output();
Обратите внимание, как я загружаю все в
$registry
а затем передать его$router
который затем передает его$controller
,
Этот пост уже слишком длинный, но я надеюсь, что он даст общее представление о шаблоне MVC в OpenCart.
Если вы хотите, чтобы я продолжил читать этот пост и рассказал, как работают другие вещи, такие как модели и представления, оцените этот ответ, чтобы я знал.
Также посмотрите мой https://www.youtube.com/dreamvention YouTube и мой блог https://dreamvention.com/blog Я буду публиковать там больше советов и учебных пособий для вас, ребята!
PHP - довольно большой язык с более чем 5000 встроенными функциями, поэтому одной из стратегий изучения новой платформы является определение наиболее часто используемых функций и некоторое время на их изучение.
Я выполнил несколько запросов к исходному коду OpenCart, и 10 наиболее часто используемых функций:
array()
count()
explode()
implode()
mktime()
delete()
time()
date()
sprintf()
list()
Все 52 команды, перечисленные здесь, а также команды Linux bash, которые вы можете использовать в любой кодовой базе для определения часто используемых функций: https://www.antropy.co.uk/blog/efficient-learning-for-new-opencart-developers/
Этот плейлист видео на YouTube также может помочь стать разработчиком OpenCart Gurus:
- Введение и содержание Это видео проходит введение в серию
- Установка OpenCart localhost Это видео проходит установку OpenCart в localhost
- Структура файлов и папок Opencart Описывает структуру файлов и папок OpenCart
- Создание схемы таблицы базы данных в OpenCart Показывает схему таблицы базы данных и показывает, как создавать таблицы базы данных в OpenCart.
- Методы предопределенных объектов библиотеки OpenCart Описывает методы предопределенных объектов библиотеки OpenCart и показывает, где их найти.
Шаблон MVCL, поток кода и запрос и ответ в OpenCart Показывает шаблон MVCL, поток кода и запрос и ответ в OpenCart. Они описывают поток как на картинке ниже:
Установка, настройка и удаление модуля Opencart В нем показано три способа загрузки модулей, затем установка, настройка и удаление модуля / расширения OpenCart 3.
Макеты и расположение в Opencart 3 В нем описаны макеты и позиции OpenCart 3. Он показывает, как показать настраиваемые макеты для разных страниц, приводя примеры категорий страниц. Мы показываем другой макет для другой категории.
Обзор событий Opencart Вы узнаете, что такое события в OpenCart, как они работают и что делает их такими полезными.
Документация по Opencart API для разработчика. Это видео покажет, как использовать и создавать пользовательские API OpenCart.
Как только вы увидите эти видео, вы можете начать кодировать:)