Похоже, что у них нет документации, кроме некоторых ави на своих официальных форумах. У меня есть опыт работы с картой Zend и Framework CodeIgniter. Могут ли любые мастера OpenCart рекомендовать мне лучший способ изучить его и освоить в кратчайшие сроки? Я должен сделать большой проект с ним в ближайшее время.
Как стать гуру OpenCart?
Ответ 1
Краткое руководство для начинающих разработчиков OpenCart 1.5.X для начинающих
Это руководство написано для разработчиков, уже знакомых с PHP, OOP и архитектурой 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()
использует mysql_real_escape_string() значение, пройденное
$this->db->countAffected
возвращает количество строк, на которые влияет запрос UPDATE
и т.д.
$this->db->getLastId()
возвращает последний идентификатор автоматического увеличения с помощью mysql_insert_id()
Общие сведения о зарезервированных переменных
OpenCart имеет предопределенные переменные для использования вместо стандартных $_GET
, $_POST
, $_SESSION
, $_COOKIE
, $_FILES
, $_REQUEST
AND $_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
Резюме
В то время как вышеприведенное не является пуленепробиваемым руководством для разработчиков, мы надеемся, что это послужит хорошей отправной точкой для тех, кто начал работу
Ответ 2
Глобальные библиотечные методы: основные функции библиотеки экспонентов, а также их функциональные возможности. Большинство из них можно вызывать из любой папки каталога или администратора (контроллеры, модели, представления).
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']
Ответ 3
Существует сайт OpenCart Wiki с документацией для начинающих разработчиков. Следуйте приведенным ниже URL для более подробной информации:
http://wiki.opencarthelp.com/doku.php?id=start http://wiki.opencarthelp.com/doku.php?id=methods_reference
ИНТЕРНЕТ АРХИВ ссылки
http://web.archive.org/web/20160305131349/http://wiki.opencarthelp.com/doku.php?id=start http://web.archive.org/web/20160305131349/http://wiki.opencarthelp.com/doku.php? ID = methods_reference
Например, ссылка на метод содержит подробности для:
- Вход для клиентов
- Доступ к БД
- Обработка корзины покупок
- конфиг
- кэш
- Обработка валюты
Тем не менее Есть несколько страниц в стадии разработки, но это будет полезно.
[Обновить]
По состоянию на январь 2018 года домен opencarhelp.com не работает.
Ответ 4
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/
Ответ 5
Этот плейлист видео на YouTube также может быть полезным, чтобы стать гуру разработчиков OpenCart:
- Введение и содержание Это видео проходит введение в серию
- Установка 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.
Как только вы увидите эти видео, вы можете начать кодировать :)
Ответ 6
Хотя на эту тему уже отвечали много раз, я хотел бы предложить другой подход к освоению 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. Я буду публиковать там больше советов и учебных пособий для вас, ребята!
Ответ 7
-
Это ценный ресурс:
-
Также это, как указано выше: