Руководство Разработчика

Тема в разделе "для Администратора и Технического специалиста", создана пользователем Romans, 31 окт 2017.

  1. Romans

    Romans Administrator Команда форума

    Сообщения:
    1.339
    Симпатии:
    698
    OpenCart 3 представляет собой отличную платформу для разработчиков, желающих понять PHP и web-фреймворк в целом. Это один из самых простых способов изучить MVC фремворк. OpenCart 3 позволяет узнать MVC framework, давая вам доступ к знакомым инструментам, такие как, PHP, mySQL и HTML-технологий, на которых она построена. Это руководство предполагает наличия у Вас базовых знания HTML, CSS, Javascript, PHP (в том числе классов и объектов), и TWIG и MySQL, так как Мы будем описывать, каким образом они используются в OpenCart 3.

    В данном руководстве разработчика OpenCart 3x, будут описаны лишь основы разработки для OpenCart 3x. Это поможет Вам быстро понят, что же такое OpenCart и быстро разобраться в основах.

    Быстрые ссылки раздела:
    1. Введение в MVC(L)
    2. Разработка модулей. Введение
    3. Модуль в панели администратора
    4. Модуль на Витрине магазина
    5. Установка и Удаление модулей
    6. Загрузка файлов в Контроллере
    7. Модификаторы OCMOD

    назад к Содержанию
     
    Последнее редактирование: 31 окт 2017
  2. Romans

    Romans Administrator Команда форума

    Сообщения:
    1.339
    Симпатии:
    698
    Введение в MVC(L)
    OpenCart 3 основан на шаблоне проектирования Модель-Отображение-Контроллер (Model-View-Controller). MVC — это шаблон (паттерн), который позволяет разделить логику от отображения. Это позволяет файлам с отображением содержать минимальное количество скриптов.

    M - Model (Модель)
    Модель предоставляет возможность взаимодействовать непосредственно с базой данных, получая данные и преобразуя его в формат, который подходит для вашего интерфейса. Как правило, модель состоит в основном из запросов к базе данных. Если вы привыкли писать запросы MySQL, Вам понравится OpenCart 3 т.к он не использует ORM, позволяя Вам писать прямые запросы к базе данных.

    V - View (Отображение)
    View - отвечает за отображение информации (визуализацию). Идея Model и Controller это максимально отделить логику и сделать шаблоны проще, т.е по возможности в View должно быть минимум логики. Для того чтобы изменить дизайн магазина, вы просто измените представление, а M, C и L, останется такими же. Файлы представлений View в OpenCart 3 имеют .twig расширение.

    С - Controller (Контроллер)
    Это то место, где обеспечивается связь между представлением и моделью или любыми другими ресурсами. Полученные данные от пользователя обрабатываются в контроллере и выводит результат в представление View

    L - Language (Язык)
    OpenCart 3 расширяет MVC до MVCL, предоставляя простой способ разделения языковой информации для интернационализации. Вы можете использовать языковые файлы для хранения любого текста, такие как заголовки, текст кнопок и другое. Поэтому, для того чтобы перевести Ваш магазин на другой язык, Вам необходимо изменить текст в соответствующем языковом файле.
     
    Последнее редактирование: 31 окт 2017
  3. Romans

    Romans Administrator Команда форума

    Сообщения:
    1.339
    Симпатии:
    698
    Разработка модулей. Введение
    Для того, чтобы понять основы разработки модулей для OpenCart 3, мы рассмотрим готовый модуль google_hangouts.

    Базовая структура модуля состоит из двух частей, это catalog и admin. В папке admin располагается функционал управления модулем, отображение его в панели администратора, а так же его установка и удаление. А в папке catalog, находятся файлы, отвечающие за функционал модуля и его отображение на витрине магазина.

    Ниже показана базовая структура директорий, для нашего первого модуля. Для примера мы взяли модуль google_hangouts
    struktura-modula-opencart3.png
     
    Последнее редактирование: 31 окт 2017
  4. Romans

    Romans Administrator Команда форума

    Сообщения:
    1.339
    Симпатии:
    698
    Модуль в панеле администратора
    Если посмотреть на предыдущий рисунок, можно увидеть основные директории в папке admin, а именно controller | view | language

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

    Давайте рассмотрим каждую из папок.

    Controller

    Тут располагается наш первый файл, контроллер интерфейса. OpenCart 3 автоматически подключает модули, просматривая директорию admin/controller/extension/module Поэтому нет никакой необходимости где то и что то добавлять или изменять файлы.

    Любой модуль, расположенный в данной директории, будет автоматически подключен и показан в панели администратора в разделе Модули / Расширения, тип расширения Модули

    В контроллере мы можем загрузить языковые файлы, библиотеки и другие ресурсы.
    Подробнее о загрузки ресурсов, можно прочитать в разделе Загрузка файлов.
    А так же, вам доступны методы установки и удаления модуля.
    Подробнее можно прочитать в разделе Установка и Удаление модуля.

    Доступ через URL
    Controller (контроллер) это простой файл с классом, названный так, чтобы ассоциироваться с URL по которому он будет вызван.

    В панели администратора URL выглядит следующим образом
    пример: /admin/index.php?route=extension/module/google_hangouts&user_token=

    При обращении к модулю, добавляется токен для безопасности сессии (данное правило с токеном, действительно только для модулей в панели администратора).

    Откройте файл контроллера \admin\controller\extension\module\google_hangouts.php

    Рассмотрим пример URL: /admin/index.php?route=extension/module/google_hangouts&user_token=

    Когда имя контроллера будет найдено в сегменте URL — он будет загружен.

    Первым что загрузится, это метод index(). Метод «index» всегда будет загружаться по умолчанию, если вторая часть в URL не определена.

    Вторая часть адреса определяет, какой метод контроллера должен быть вызван.
    Например, для URL /admin/index.php?route=extension/module/google_hangouts/validate&user_token

    будет вызван метод validate.

    Продолжим. Кратко пройдемся по коду.

    В результате вызова метода index, контроллер загрузит языковые файлы и его переменные
    PHP:
            $this->load->language('extension/module/google_hangouts');

            
    $this->document->setTitle($this->language->get('heading_title'));
    Загрузит модель, для возможности записи настроек модуля в базу.
    PHP:
    $this->load->model('setting/setting');
    Далее проверит на соответствие условию: если существует POST запрос, то содержимое POST запроса записывается в базу данных. Это происходит, когда в модуле нажимаем кнопку Сохранить, именно тогда и создается POST со всеми настройками модуля. А далее просто перенаправление на страницу списка модулей.

    Если POST не существует, то естественно запись в базу игнорируется. Это происходит тогда, когда мы просто нажимаем кнопку Изменить, для того чтобы посмотреть настройки модуля. А перед тем как нам откроется форма с настройками модуля, происходит следующее.

    Производится заполнение массива $data для передачи в «Отображение»
    Массив заполняется текстовыми данными, которые мы получили из языкового файла, а так же заполняется другими данными необходимые для работы модуля и его отображения.

    А в конце производим рендеринг данных $data для передачи в отображение view
    PHP:
    $this->response->setOutput($this->load->view('extension/module/google_hangouts'$data));

    Viev
    View (отображение) отвечает за вывод данных, то есть шаблон, формирующий html код.
    Сам файл шаблона находится в admin/view/template/extension/module и файл имеет расширение twig

    В нашем случае, формируется форма для заполнения пользователем настроек модуля.

    Если откроете файл \admin\view\template\extension\module\google_hangouts.twig то можно быстро понять его структуру, увидеть знакомые переменные, для которых мы подготавливали данные в контроллере.


    Language
    Language (язык) – представляет собой файл, в котором можно задавать некие языковые переменные для разных языков. В нашем случае таких языков два, и соответственно папок и файлов тоже 2
    \admin\language\english\extension\module\google_hangouts.php

    \admin\language\russian\extension\module\google_hangouts.php

    При ненадобности, данные файлы можно не создавать.


    Model
    Model (модель) содержит в себе функционал по работе с базой данных.
    Файлы находятся в admin\model\

    А в нашем случае его просто нет, т.к для данного модуля не требуется создании модели в панели управления. Но если бы он у нас был, он находился бы в папке, например, \admin\model\extension\module\ и в нем, возможно, был бы запрос к базе данных, для записи или обновления определенной таблицы БД.
     
    Последнее редактирование: 31 окт 2017
  5. Romans

    Romans Administrator Команда форума

    Сообщения:
    1.339
    Симпатии:
    698
    Модуль в Витрине магазина
    Интерфейс витрины модуля для отображения в витрине магазина, построен по принципу того же шаблона, что и интерфейс панели администратора, описанный выше, т.е MVCL. Модуль так же может получить доступ к любым model файлам, которые уже существуют в OpenCart 3, а так же вам не нужно создавать новые запросы базы данных, если они уже существуют. Например, модель catalog/product содержит много полезных запросов для выборки товаров. Использование существующих методов, предпочтительнее, чем писать то, что уже написано.

    Отличительной особенностью структуры директорий для модулей витрины, является расположение файла шаблона модуля. Он находится по пути catalog/view/theme/default/template/extension/module

    Это дает нам возможность, создавать свой шаблон отображения модуля для каждой темы интернет магазина.

    Стоит отметить, что в модуле витрины, Вам будут предоставлен доступ к параметрам модуля, как через объект контроллера, так и через переменную $settings, которая передается в модуль, при помощи метода index($settings) контроллера. А также у Вас есть возможность контролировать отображение модуля, основываясь на параметрах настройки.
    В качестве примера вы можете посмотреть модуль Рекомендуемые \catalog\controller\extension\module\featured.php

    А в нашем случаи модуль google_hangouts записывает данные не в настройки модуля, а в общие настройки, так называемые config, поэтому и доступ к данные получаем так
    PHP:
    $this->config->get('module_google_hangouts_code')
     
    Последнее редактирование: 31 окт 2017
  6. Romans

    Romans Administrator Команда форума

    Сообщения:
    1.339
    Симпатии:
    698
    Установка и Удаления модуля
    Рекомендуется, чтобы разработчики модулей, включали в создаваемый модуль методы «установки и удаления» в файле controller. В OpenCart 3 существуют стандартные методы, которые будут вызваны при установки или удалении. Это
    public function install() и public function uninstall()

    Установка
    Пример:
    PHP:
        public function install() {
            
    $this->load->model('setting/setting');
            
    $settings['module_pp_button_status'] = 1;
            
    $this->model_setting_setting->editSetting('module_pp_button'$settings);
        }

    Удаление
    Пример:
    PHP:
    public function uninstall() {
      
    $this->load->model('setting/setting');
      
    $this->model_setting_setting->deleteSetting('module_pp_button');
    }
    Т.е если модуль при установке создает дополнительные таблицы или хранимые настройки, то необходимо при удалении модуля, тоже их удалять.
     
    Последнее редактирование: 31 окт 2017
  7. Romans

    Romans Administrator Команда форума

    Сообщения:
    1.339
    Симпатии:
    698
    Загрузка файлов в контроллер
    Основная загрузка файлов, происходит в контроллере. В контроллер загружаются файлы языка, модели и шаблона.

    Рассмотрим каждый в отдельности.

    Загрузка языковых файлов.

    Контроллер подключает загружает текстовые данные, сохраненный в языковом файле, и возвращает его в переменную, которая отражается в файле шаблона, с целью отображения различного текста. Это очень удобно, т.к Вам при необходимости изменять текст, не нужно изменять какие либо переменные в шаблоне или в контроллере, а достаточно изменить текст в языковом файле.

    Ниже пример загрузки языкового файла и назначение.
    PHP:
    $this->load->language('extension/module/google_hangouts');
    $this->document->setTitle($this->language->get('heading_title'));
    Если открыть языковый файл, например по пути, \admin\language\english\extension\module\google_hangouts.php

    Мы увидим, что мы получили доступ к любому тексту через $this->language->get

    А при рендеринге, каждый элемент массива $data будет доступен в виде переменой.

    Пример:
    PHP:
    $data['entry_code'] = $this->language->get('entry_code');

    $data['entry_code']
    будет доступен в шаблоне twig как $entry_code
    Обратите внимание, что в OpenCart 3 не обязательно в контроллере явно назначать текст переменным, в простейшем случаи они сразу доступны в шаблоне как переменные .

    Загрузка модели.

    Загрузка моделей в контролер, помогут вам использовать уже готовые встроенные методы OpenCart 3.

    Разберем небольшой пример загрузки модели.
    PHP:
    $this->load->model('setting/setting');
    Код выше позволит нам загрузит методы класса, что обеспечит доступ к методам в пределах класса ModelSettingSetting файла model контроллера.

    Для того, чтобы вызвать определенный метод из модели, используйте следующий синтаксис.

    Пример:
    PHP:
    $this->model_setting_setting->editSetting('google_hangouts'$this->request->post);

    Загрузка файла шаблона.

    Приведем простой пример, который показывает возможность загрузки файла шаблона в контроллер.
    PHP:
    $this->response->setOutput($this->load->view('extension/module/google_hangouts'$data));


    Загрузка файлов библиотек

    Opencart 3 содержит множество различных библиотек, которые, могут быть загружены в контроллер и использованы по назначению.

    Чтобы получить доступ к определенным методам библиотек, используйте следующий синтаксис
    PHP:
    $this->[тут имя файла библиотеки]->function()
    Например, установка заголовка документа
    PHP:
    $this->document->setTitle($this->language->get('heading_title'));
     
    Последнее редактирование: 31 окт 2017
  8. Romans

    Romans Administrator Команда форума

    Сообщения:
    1.339
    Симпатии:
    698
    Введение в ocmod

    OCMOD это встроенная система модификации файлов, которая позволяет владельцу магазина, модифицировать поведение магазина или добавить дополнительный функционал. Для этого достаточно загрузить сжатый файл, который содержит XML и файлы модули или расширения.

    Если OCMOD разработан правильно, то магазин работает без изменения основных файлов. Это означает, что оригинальные файлы движка не изменяются.

    OCMOD основан на кодах Qphoria's VQMOD.

    Установка и структура

    Установка OCMOD файлов производится через панель управления в разделе Модули / Расширения — Установка расширений.
    Для установки расширения, достаточно загрузить файл .ocmod.zip
    Например: name_modificator.ocmod.zip

    1. Загрузка модификатора через Меню - Модули / Расширения - Установка расширений . Данный метод установки записывает код модификатора в базу данных, так же модификаторы видны в списке модификаторов. А если в архиве есть файлы модуля, то данные файлы копируются в соответствующие директории.

    2. Возможно просто скопировать файл модификатора nazvanie.ocmod.xml в папку system . Данный метод не записывает код в базу, а использует его напрямую. Удобен тем, что можно код редактировать дальше не делая повторных загрузок.

    Пример структуры OCMOD сжатого файла

    - upload
    - install.xml

    upload
    Директория в которой расположены файлы (например библиотека или модуль).

    install.xml
    XML файл модификатор.

    Обратите внимание, на тот факт, что не все директории доступны для загрузки файлов через установку расширений. Ниже список доступных директорий.
    Код:
     'admin/controller/extension/',
     'admin/language/',
     'admin/model/extension/',
     'admin/view/image/',
     'admin/view/javascript/',
     'admin/view/stylesheet/',
     'admin/view/template/extension/',
     'catalog/controller/extension/',
     'catalog/language/',
     'catalog/model/extension/',
     'catalog/view/javascript/',
     'catalog/view/theme/',
     'system/config/',
     'system/library/',
     'image/catalog/'

    Документация по XML модификатору

    Модификатор создает виртуальную копию файла над которым производит изменения. Используйте эту систему вместо изменения файлов по умолчанию . Различные модификации могут быть применены для одного и того же файла

    Пример OCMOD файла:
    Код:
    <?xml version="1.0" encoding="utf-8"?>
      <modification>
      <name>Modification Default</name>
      <code>modification_id</code>
      <version>1.0</version>
      <author>OpenCart Ltd</author>
      <link>http://www.opencart.com</link>
    
      <file path="catalog/controller/common/home.php">
        <operation>
          <search><![CDATA[
             $data['column_left'] = $this->load->controller('common/column_left');
          ]]></search>
          <add position="replace"><![CDATA[
             test123
          ]]></add>
        </operation>
      </file>
    
    </modification>
    

    Описание тегов

    File
    Файл или файлы для изменений

    Система модификатора использует PHP функцию glob для поиска файлов
    http://hk1.php.net/manual/ru/function.glob.php

    Пример:
    Путь к файлу.
    Код:
    <file path="catalog/controller/common/home.php">

    Если необходимо произвести изменения в нескольких файлах или в файлах "по маске", используйте следующий пример:
    Код:
    <file path="system/engine/action.php|system/engine/loader.php|system/library/config.php|system/library/*.php">
    или
    Код:
    <file path="system/{engine,library}/{action,loader,config,language}*.php">

    Operation Действия над файлом / файлами

    Атрибуты:
    • error="(skip|abort)" - пропустить при ошибке | прервать работу модификатора


    Search Поиск кода

    Атрибуты:
    • trim="(true|false)" - удалить пробелы
    • regex="(true|false)" - использовать регулярное выражение
    • index="(число)" - выбор определенной найденной позиции по числу

    Пример:
    Код:
    <?xml version="1.0" encoding="utf-8"?>
    <modification>
      <name>Modification Default</name>
      <code>modification_id</code>
      <version>1.0</version>
      <author>OpenCart Ltd</author>
      <link>http://www.opencart.com</link>
    
          <file path="catalog/controller/common/home.php">
              <operation>
                  <search trim="true|false"><![CDATA[
                      $data['column_left'] = $this->load->controller('common/column_left');
                  ]]></search>
                  <add position="replace" offset="1"><![CDATA[
                      test123
                  ]]></add>
              </operation>
          </file>
    
    </modification>

    Add Добавить или заменить.

    Атрибуты:
    • position="(Replace|Before|After)" - Заменить | Вставить до | Вставить после
    • trim="(true|false)" - удалить пробелы
    • offset="(число)" - перейти на указанное кол-во строк (можно использовать отрицательное значение)
    (внимание, атрибут position не может быть использован если применяется поиск с регулярным выражением).

    Пример
    Код:
    <?xml version="1.0" encoding="utf-8"?>
    <modification>
      <name>Modification Default</name>
      <code>modification_id</code>
      <version>1.0</version>
      <author>OpenCart Ltd</author>
      <link>http://www.opencart.com</link>
    
      <file path="catalog/controller/common/home.php">
          <operation>
              <search trim="true|false" limit="2"><![CDATA[
                  $data['column_left'] = $this->load->controller('common/column_left');
              ]]></search>
              <add position="Replace|Before|After" offset="2"><![CDATA[
                  test123
              ]]></add>
          </operation>
      </file>
    
    </modification>

    Regex - регулярное выражение

    Атрибуты:
    • limit="(число)" - ограничение кол-во найденных совпадений

    Пример:
    Код:
    <?xml version="1.0" encoding="utf-8"?>
    <modification>
      <name>Regex Example</name>
      <code>modification_id</code>
      <version>1.0</version>
      <author>OpenCart Ltd</author>
      <link>http://www.opencart.com</link>
    
      <file path="system/{engine,library}/{action,loader,config,language}*.php">
          <operation>
              <search regex="true" limit="3"><![CDATA[
                  ~(require|include)(_once)?\(([^)]+)~
              ]]></search>
              <add><![CDATA[
                  $1$2(modification($3)
              ]]></add>
          </operation>
      </file>
    
    </modification>
    Когда вы используете regex вы не можете использовать атрибут position, trim or offset . Атрибут limit доступен для использования.
    В примере ниже можно увидеть как в третьей найденой позиции меняется 'foo' на 'bar':

    lorem ifoopsum foo lor foor ipsum foo dolor foo
    ^1 ^2 ^3 ^4 ^5
    Выражение:
    s/\(.\{-}\zsfoo\)\{3}/bar/
    Результат:
    lorem ifoopsum foo lor barr ipsum foo dolor foo
    ^1 ^2 ^3=bar ^4 ^5

    Больше информации по регулярным выражением в PHP вы можете узнать по ссылке ниже:
    http://hk2.php.net/manual/ru/function.preg-replace.php
    Информацию по регулярным выражением можно получить по ссылке ниже:
    http://www.regular-expressions.info
     
    landlord нравится это.
  9. Romans

    Romans Administrator Команда форума

    Сообщения:
    1.339
    Симпатии:
    698