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

Тема в разделе "Руководство Разработчика", создана пользователем Romans, 11 апр 2014.

  1. Romans

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

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

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

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

    назад к Содержанию
     
    Последнее редактирование: 9 сен 2014
    Mixa_007 и Albert нравится это.
  2. Romans

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

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

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

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

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

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

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

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

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

    Ниже показана базовая структура директорий, для нашего первого модуля. Для примера мы взяли модуль google_hangouts
    base-structure-module.png

    Обратите внимание! Выше указанная структура и ниже примеры описаны для OpenCart версии ниже 2.3
    Для версии 2.3 и выше, структура немного изменилась, т.е все модули и расширения перенесены в директорию extension.
    Т.е появилась еще одна вложенность, не забывайте про это при создании модулей для версии 2.3 и выше.
     
    Последнее редактирование: 16 дек 2016
    Mixa_007, iamdeniszotov и Albert нравится это.
  4. Romans

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

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

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

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

    Controller

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

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

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

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

    В панели администратора URL выглядит следующим образом
    пример: /admin/index.php?route=module/google_hangouts&token
    При обращении к модулю, добавляется токен для безопасности сессии (данное правило с токеном, действительно только для модулей в панели администратора).

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

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

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

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

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

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

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

    В результате вызова метода index, контроллер загрузит языковые файлы и его переменные
    PHP:
    $this->load->language('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('module/google_hangouts'$data));
    PHP:
    $this->response->setOutput($this->load->view('module/google_hangouts.tpl'$data));


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

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

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


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

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

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


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

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

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

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

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

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

    Стоит отметить, что в модуле витрины, Вам будут предоставлен доступ к параметрам модуля, как через объект контроллера, так и через переменную $settings, которая передается в модуль, при помощи метода index($settings) контроллера. А также у Вас есть возможность контролировать отображение модуля, основываясь на параметры настройки.
     
    Последнее редактирование: 16 дек 2016
    SergeTkach и Albert нравится это.
  6. Romans

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

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

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

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

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

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

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

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

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

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

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

    Пример $data['entry_code'] будет доступен в шаблоне tpl как $entry_code


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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

    - upload
    - install.sql
    - install.php
    - install.xml

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

    install.sql
    Файл sql запроса для выполнения запроса к базе данных ;

    install.php
    Содержит PHP код который необходимо выполнить при устаовке расширения .

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


    Документация по 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">
    В версии ниже 2.1 в качестве разделителя использовалась запятая.
    Код:
    <file path="system/engine/action.php,system/engine/loader.php,system/library/config.php,system/library/*.php">
    Обратите внимание, что ниже указанный способ не работает в версиях 2.0.2.0 - 2.0.3.1
    Код:
    <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




     
    Последнее редактирование: 6 ноя 2015
    paulittop, a2media, nostradam и 2 другим нравится это.
  9. Romans

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

    Сообщения:
    1.342
    Симпатии:
    702