Похоже, что у них нет документации, кроме некоторых ави на своих официальных форумах. У меня есть опыт работы с картой Zend и Framework CodeIgniter. Могут ли любые мастера OpenCart рекомендовать мне лучший способ изучить его и освоить в кратчайшие сроки? Мне нужно сделать большой проект с ним в ближайшее время.
Это руководство написано для разработчиков, уже знакомых с 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 = ' > ') – 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
Например, ссылка на метод содержит:
Тем не менее Есть некоторые страницы в стадии строительства, но это будет полезно.
Это ценный ресурс:
Также этот, как указано выше:
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/