Как стать гуру OpenCart?

Похоже, что у них нет документации, кроме некоторых ави на своих официальных форумах. У меня есть опыт работы с картой Zend и Framework CodeIgniter. Могут ли любые мастера 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 = ' &gt; ') – 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

Например, ссылка на метод содержит подробности для:

  1. Вход для клиентов
  2. Доступ к БД
  3. Обработка корзины покупок
  4. конфиг
  5. кэш
  6. Обработка валюты

Тем не менее Есть несколько страниц в стадии разработки, но это будет полезно.

[Обновить]

По состоянию на январь 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 Видео Уроки

  1. Введение и содержание Это видео проходит введение в серию
  2. Установка OpenCart localhost Это видео проходит установку OpenCart в localhost
  3. Структура файлов и папок Opencart Описывает структуру файлов и папок OpenCart
  4. Создание схемы таблицы базы данных в OpenCart Показывает схему таблицы базы данных и показывает, как создавать таблицы базы данных в OpenCart.
  5. Методы предопределенных объектов библиотеки OpenCart В ней описаны методы предопределенных объектов библиотеки OpenCart и показано, где их найти.
  6. Шаблон MVCL, поток кода и запрос и ответ в OpenCart Показывает шаблон MVCL, поток кода и запрос и ответ в OpenCart. Они описывают поток, как на рисунке ниже: MVCL described with Code

  7. Установка, настройка и удаление модуля Opencart В нем показано три способа загрузки модулей, затем установка, настройка и удаление модуля/расширения OpenCart 3.

  8. Макеты и расположение в Opencart 3 В нем описаны макеты и позиции OpenCart 3. Он показывает, как показать настраиваемые макеты для разных страниц, приводя примеры категорий страниц. Мы показываем другой макет для другой категории.

  9. Обзор событий Opencart Вы узнаете, что такое события в OpenCart, как они работают и что делает их такими полезными.

  10. Документация по 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. Я буду публиковать там больше советов и учебных пособий для вас, ребята!