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

Похоже, что у них нет документации, кроме некоторых ави на своих официальных форумах. У меня есть опыт работы с картой Zend и Framework CodeIgniter. Могут ли любые мастера OpenCart рекомендовать мне лучший способ изучить его и освоить в кратчайшие сроки? Мне нужно сделать большой проект с ним в ближайшее время.

Краткое руководство для начинающих 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 – Связанные с cart.php функции
  • config.php – все настройки загружаются из этого
  • url.php – функции генерации URL-адресов

Понимание параметра маршрута

Рамка OpenCart полагается на route=aaa/bbb/ccc в параметре строки запроса, чтобы знать, что загружать, и является основополагающей функцией для поиска файлов, которые нужно редактировать для каждой страницы. Большинство маршрутов фактически используют только aaa/bbb которые следует рассматривать как две части, однако некоторые из них содержат три части aaa/bbb/ccc . Первая часть aaa обычно связана с папкой в ​​общей папке, такой как папки контроллера или шаблона. Вторая часть обычно относится к имени файла без соответствующего расширения .php или .tpl . Третья часть объясняется в разделе «Общие сведения о контроллерах» ниже


Понимание языков

Языки хранятся в /catalog/language/ folder в подпапке 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'); 

Затем вы можете использовать функцию библиотеки языков для получения определенных языковых текстов, например

 $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/ folder. Продолжая работу с последнего примера, страница «Контроллер для поиска» находится в /product/search.php в этой папке. Заметим еще раз, что используется маршрут, за которым следует .php .

Открыв файл контроллера, вы увидите имя класса Pascal Case, расширяющее класс Controller , называемый ControllerProductSearch . Это опять-таки специфично для маршрута, с Controller за которым следуют имя подпапки и имя файла без расширения заглавной буквы. Капитализация на самом деле не требуется, но рекомендуется для удобства чтения. Стоит отметить, что классные имена не принимают никаких значений из подпапки и имени файла, отличного от букв и цифр. Подчеркивания удаляются.

В классе есть методы. Методы в объявляемом классе доступны для запуска через маршрут – 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 , которая по существу представляет собой массив пар ключ => значение. В качестве примера

 $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 файл 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


Резюме

Хотя вышеупомянутое не является пуленепробиваемым руководством для разработчиков, мы надеемся, что это послужит хорошей отправной точкой для тех, кто начнет работу

Глобальные библиотечные методы: основные функции библиотеки экспонентов и их функциональные возможности. Большинство из них можно вызывать из любой папки каталога или администратора (контроллеры, модели, представления)

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

Существует сайт OpenCart Wiki с документацией для начинающих разработчиков. Следуйте приведенным ниже ссылкам:

http://wiki.opencarthelp.com/doku.php?id=start
http://wiki.opencarthelp.com/doku.php?id=methods_reference

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

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

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

PHP – довольно большой язык с более чем 5000 встроенными функциями, поэтому одна стратегия для изучения новой платформы – определить, какие функции она использует наиболее часто, и потратить некоторое время, чтобы хорошо их узнать.

Я запустил некоторые запросы в исходном коде OpenCart, а 10 наиболее часто используемых функций:

 array() count() explode() implode() mktime() delete() time() date() sprintf() list() - 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/