Як стати гуру OpenCart? [зачинено]


98

Схоже, у них немає жодної документації, крім деяких дзвінків на їх офіційних форумах. У мене є досвід роботи з Zend Framework і FrameworkIgniter Framework. Чи можуть будь-які майстри OpenCart рекомендувати мені найкращий спосіб навчитися цьому та опанувати його за найкоротший час? Я маю незабаром зробити великий проект з ним.


Див. Docs.opencart.com та огляд рамок Qphoria . Також перегляньте теми на форумах OpenCart> Підтримка . В майбутньому, сподіваємось, у нас з’явиться спеціалізований сайт OpenCart SE за адресою area51.stackexchange.com/proposals/77558/opencart
Pacerier

Це дійсно важливе питання, колись подолання стандартів ПС справді корисне ...
KAD


@BipulRoy Я радий! Здається, це популярне питання зараз!
CodeCrack

Відповіді:


311

Швидкий посібник для початківців 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


Підсумок

Хоча вищезазначене не є пуленепробивним посібником для розробників, сподіваємось, це послужить гарною відправною точкою для тих, хто починає працювати


3
Дякую! Де ти це взяв?
CodeCrack

64
Я це написав. Я подумав, що потрібно писати і підходити до квестону
Джей Гілфорд

2
Дуже хороша. Шлях більш інформативний, ніж більшість путівників. У вас є випадковість?
CodeCrack

3
Це має надати статус Wiki-спільноти
Stann0rz

1
@UltimateKing - Цей посібник вже пропонує вам більш ніж достатньо інформації для початку роботи зі створення власних модників. Також у мережі є підручники, характерні для розробки модулів
Jay Gilford

36

Глобальні методи бібліотеки: Основні функції відкритої бібліотеки разом із їх функціональними можливостями. Більшість із них можна викликати з будь-якого місця в каталогах або папках адміністратора (контролери, моделі, представлення даних)

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']  

9

Існує веб-сайт 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 = method_reference

Наприклад, посилання на метод містить деталі для:

  1. Вхід клієнта
  2. Доступ до БД
  3. Поводження з кошиком
  4. Налаштування
  5. Кеш
  6. Обробка валюти

Ще є кілька сторінок, які будуються, але це буде корисно.

[Оновлення]

З січня 2018 року домен opencarhelp.com не працює.


Здається, що через пару місяців бракує багато інформації. Чи відмовився від цього проекту?
Печер'є

@Pacerier, я не впевнений у цьому.
Дхарманг

це чудова сторінка навіть на відкриту кошик вікі посилається на неї, ви можете побачити посилання тут wiki.opencarthelp.com/doku.php?id=opencart_framework
Нассім,

4

Хоча на цю тему вже давали відповіді багато разів, я хотів би запропонувати інший підхід до оволодіння OpenCart виходячи зі свого досвіду.

Навчання в процесі роботи

Створивши власну рамку OpenCart з нуля з кількома файлами, ви зможете зрозуміти, як все складається разом. Я буду імітувати файлову структуру OpenCart для вас.

Створіть файл index.php

<?php
// My simpleCart

1. Реєстр

Opencart використовує шаблон реєстру, щоб перелічити всі екземпляри завантажених класів. Це серце вашої програми 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 приклад лише як приклад. Далі ми його видалимо. Оновіть свій сайт, щоб перевірити його. Веб-переглядач повинен відображатись 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;
    }
}

Створіть клас маршрутизатора, який буде відповідати за ініціалізацію файлу контролера на основі маршруту (іншими словами: динамічно викликайте контролер)

<?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.

Якщо ви хочете, щоб я продовжив цю публікацію і розповів, як працюють інші речі, як моделі та види, оцініть цю відповідь, щоб я знав.

Також перегляньте мій Youtube https://www.youtube.com/dreamvention та мій блог https://dreamvention.com/blog Я буду публікувати більше порад та навчальних посібників там для вас, хлопці!


1

PHP - це досить велика мова з більш ніж 5000 вбудованими функціями, тому одна з стратегій для вивчення нової платформи - визначити, які функції вона використовує найчастіше і витратити деякий час на їх знайомство.

Я запустив кілька запитів щодо вихідного коду OpenCart, і 10 найпоширеніших функцій:

array()
count()
explode()
implode()
mktime()
delete()
time()
date()
sprintf()
list()

Всі 52 перераховані тут, а також команди bash Linux, які ви можете використовувати на будь-якій кодовій базі для ідентифікації часто використовуваних функцій: https://www.antropy.co.uk/blog/efficient-learning-for-new-opencart-developers/


1

Цей список відтворення відео на YouTube також може бути корисним, щоб стати Gurus для розробників OpenCart:

OpenCart Відеоуроки

  1. Вступ та зміст Це відео проходить через вступ серії
  2. Установка OpenCart localhost Це відео проходить через установку OpenCart у localhost
  3. Файли та структура папок Opencart У ньому описана структура файлів і папок OpenCart
  4. Створення схеми таблиці таблиць баз даних у OpenCart Вона показує схему таблиці баз даних та показує, як створювати таблиці баз даних у OpenCart
  5. Методи заздалегідь визначених об'єктів бібліотеки OpenCart У ньому описані методи попередньо визначених об'єктів бібліотеки OpenCart та показано, де їх знайти.
  6. Шаблон MVCL, потік коду та запит і відповідь у OpenCart Він показує MVCL-шаблон, потік коду та запит і відповідь у OpenCart. Вони описують потік, як на малюнку нижче: MVCL описано з Code

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

  8. Макети та положення в Opencart 3 Тут описуються макети та позиції OpenCart 3. Він показує, як показати налаштування макетів для різних сторінок, наводячи приклади сторінок категорій. Ми показуємо різний макет для різної категорії.

  9. Огляд подій Opencart Ви дізнаєтесь, що таке події в OpenCart, як вони працюють та що робить їх настільки корисними.

  10. Документація API Opencart для розробника Це відео покаже, як використовувати та створювати власні API opencart

Як тільки ви побачите ці відео, ви можете почати кодування :)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.