Введение в MVC-L

OpenCart является одной из самых простых MVC структурированных платформ. Она отлично подходит для разработчиков, желающих разобраться в работе веб-фреймворков, написанных на PHP. OpenCart позволит вам изучить MVC Framework, написанный с использованием широко распространенных технологий: PHP, MySQL и HTML. В этом руководстве описаны основы HTML, CSS, JavaScript, PHP (включая классы и наследование), и MySQL, а также то, как они используются в системе OpenCart.

 

MVC(L)

OpenCart разработан, основываясь на принципах паттерна MVC. Составляющие шаблона MVC (Model View Controller) в реализации Opencart описаны ниже.

 

M - Model (Модель)

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

 

V - View (Представление)

View отвечает за отображение информации. В нем должно содержаться как можно меньше логики, которую, по возможности, нужно выносить в Model и Controller. Это подразумевает простые и понятные шаблоны для вывода информации. Делая редизайн магазина, вы меняете компонент View , в то время, как Model, Controller и Language остаются без изменений. Шаблоны в OpenCart имеют расширение .tpl

 

C - Controller (Контроллер)

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

 

 

L - Language (Язык)

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

 

Структура директорий

Основа структуры директорий состоит из двух важных компонентов системы OpenCart - интерфейсов витрины и панели управления, которые представлены отдельными папками, расположенными в верхнем уровне установки OpenCart. Данные интерфейса витрины расположены в папке под названием catalog/, панели управления - admin/. Выполняя модификацию данных в одной из папок, следите за тем, чтобы данные другой не были изменены.

В каждой из папок catalog/folder и admin/folder, вы сможете найти папки, содержащие компоненты MVC(L): Model, View, Controller и Language. На ряду с ними расположены и другие папки, включенные в базовой установку OpenCart.

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

Папка image содержит все изображения, когда-либо загруженные с помощью Менеджера изображений. Это могут быть изображения товара, дополнительные изображения, а также кешированные версии картинок с измененным размером.

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

 

Разработка модулей

Лучший способ разобраться в работе системы OpenCart - написать собственный модуль. Как и вся система OpenCart, новый модуль должен быть реализован с помощью шаблона проектирования MVCL. Данное руководство детально описывает создания модуля для витрины и панели управления, используя компоненты MVC-L. Самый простой способ создать модуль - это загрузить каркас DIY Module Builder с HostJars. Данный модуль содержит готовую структуру директорий, файлы и инструкцию о том, как создать свой собственный модуль. Данное руководство является теоретическим.

 

Базовая структура директорий

Базовая файловая структура вашего модуля делится на две основные составляющие: catalog и admin. Содержимое каждой из данных папок соответствует требованиям MVC-L фрэмворков, с учетом различий в настройках функциональности витрины и панели управления. Настройка работы вашего модуля и его взаимодействие с пользователем происходить в панели администратора интернет-магазина. Соответственно, файлы в папке admin/ будут отвечать за настройки модуля, за способ его отображение в панели администратора, за установку/удаление модуля и т.д. А файлы папки catalog/ отвечают за отображение и работу модуля на витрине интернет-магазина.

 

Developing

 

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

 

 

Функциональность модуля в админке

Используя, созданный вами модуль, выбрать схему страницы для его отображения, установить доступность на витрине, либо же отредактировать иные опции, владелец интернет-магазина сможет в панели администратора. Как разработчику модуля, вам необходимо создать страницу администрирования, где модуль может быть отредактирован, а параметры конфигурации добавлены или корректировались. Все административные файлы необходимо разместить в папке admin/folder:

  • controller
  • view
  • language
  • model

Любой создаваемый модуль, требует наличия хотя бы одного файла в папках view и controller, и более одного в папках model и language. Обычно все файлы имеют одинаковые названия, кроме файлов папки view, которые отличаются наличие суффикса (.tpl). Предлагаем сделать краткий обзор содержимого каждой из папок.

 

Modulesfolder

 

 

Controller

Первый файл, который вам необходимо создать - это файл страницы интерфейса панели управления вашего модуля. OpenCart идентифицирует существующие модули автоматически, считывая данные файла admin/controller/module. Любые модули, расположенные в данной папке, будут автоматически показаны на страницах Модули и Пользователи. Данный файл вы можете назвать, например так, my_module.php.

Файл controller - место, куда вы сможете загрузить языковые файлы для преобразования текста в переменные, которые будут использоваться в файле шаблона. На схеме выше, можно увидеть то, как переменная $ _ ['текст'], обработанная в контроллере, отправляется во view, как $text. Здесь же, вы можете применить файлы многоуровневой модели и их классовые функции, включая файл модели вашего модуля, при условии его наличия. Подробнее о загрузке файлов в контроллер, читайте в разделе Загрузка файлов в контроллер.

Также, вам будет доступна установочная функция(). Данная функция активируется нажатием на ссылку установки модуля на странице Дополнения > Модули. Точно также, вы сможете использовать деинсталляционную функцию(). Указанные выше функции, могут быть использованы для создания либо удаления любых структур (например, таблиц базы данных или настроек конфигурации), требуемых модулем. Создав функцию деинсталляции вы сможете подчищать изменения, совершенные вашим модулем. Подробнее о коде установки и удалении модуля, читайте в разделе Установка/ деинсталляция модуля.

 

Доступ через URL

Controller - это единственный файл MVC-L, доступ к которому можно получить через URL в системе OpenCart. В панели администратора URL будет выглядеть следующим образом: /admin/index.php?route=module/my_module&token. В папке admin к URL добавлен маркер, тогда как в папке catalog его не будет. В результате чего, файл controller будет обладать индексной функцией(). Она выражена общественно доступной “страницей”, загружаемой с помощью URL, которая отображает нажатие кнопки редактирования и, где представлены формы view. Представленные данные будут обработаны с помощью данной функции и сохранены в “настройках” таблицы базы данных через объект конфигурации контроллера.

 

View

Вторым, не менее важным, файлом для работы в панели администратора является файл View. Его создают в папке admin/view/template/module, с добавлением суффикса .tpl, который является стандартным для файлов view в Opencart. В данном файле создаются формы для заполнения и подтверждения пользователем. Они представлены индексной функцией контроллера. Самый простой способ создать собственный view файл - это скопировать содержимое подобного view файла и отредактировать поля формы в соответствии с параметрами конфигурации вашего модуля. Свой view файл вы можете назвать, например, my_module.tpl. Здесь, вы сможете получить доступ к тексту формы на языке, который был сохранен файлом контроллера, как переменная PHP. Подробнее, читайте в разделе Загрузка файлов в контроллер.

 

Model

Довольно редко модуль требует наличие файла model для панели управления. Однако, если ваш модуль, при создания данных определенного формата, опирается на собственную таблицу базы данных или пользовательский запрос, без сомнений создавайте файл model. Например, файл model уместен при создании модуля счетчика посетителей, где каждый посетитель сохраняется в таблице базы данных с IP-адресом и общим количеством посещений. В данном случаи, вы можете создать файл model с функцией определения и создания дополнительной таблицы в базе данных OpenCart. Файл model будет расположен в папке admin/model/module. Его вы можете назвать также, как и файлы controller и language: my_module.php.

 

 

Функциональность модуля на витрине

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

Основное отличие модуля интерфейса витрины, то, что ваш view файл будет расположен в папке catalog/view/theme/<themename>/template/module. Более глубокая структура папок обоснована наличием тем. Интернет-магазин OpenCart содержит огромное количество тем интерфейса витрины, и при этом всего один шаблон для панели администратора.

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

 

Установка/Удаление модуля

Рекомендуется, чтобы разработчики включали в создаваемый модуль функции установки и удаления в файле controller. Для использования данных функций необходимо загрузить определенные model файлы для безошибочных установки/удаления.О том, как загружать файлы в контроллер,читайте раздел Загрузка файлов в контроллер.

 

Установка

Первое, что мы будем настраивать в пределах функции установка - это отзывы на любую функцию файла model, где создаются таблицы базы данных. Во-вторых, мы хотим, чтобы модуль был включен в стандартную установку OpenCart. Таким образом, функция установка должна выглядеть следующим образом:

 

Install2.png

 

Удаление

Функция удаления должна соответствовать следующему коду:


Uninstall2.png


Создав таблицу в БД и функцию установки в файле model, также необходимо загрузить и другую функцию в файл model, которая удалит таблицу при деинсталляции модуля. Кроме того, необходимо отключить модуль после его удаления.

 

 

Разработка новых каналов продвижения

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

 

Функциональность каналов продвижения в панели управления

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

Все административные файлы необходимо разместить в папке admin/folder:

  • controller
  • view
  • language
  • model

Любой создаваемый канал продвижения, требует наличия хотя бы одного файла в папках view и controller, и более одного в папках model и language. Обычно все файлы имеют одинаковые названия, кроме файлов папки view, которые отличаются наличие суффикса (.tpl). Предлагаем сделать краткий обзор содержимого каждой из папок.

 

 

Controller

Первый файл, который вам необходимо создать - это файл страницы интерфейса панели управления вашего канала продвижения. OpenCart идентифицирует существующие каналы автоматически, считывая данные файла admin/controller/feeds. Любые каналы, расположенные в данной папке, будут автоматически показаны на страницах Каналы продвижения и Пользовательское соглашение. Свой файл вы можете назвать, например так, my_feed.php. Файл controller имеет индексную функцию(). Она выражена общественно доступной “страницей”, которая отображает нажатие кнопки редактирования и, где представлены формы view. Представленные данные будут обработаны с помощью данной функции и сохранены в “настройках” таблицы базы данных через объект конфигурации контроллера. Также, файл controller имеет установочную. функцию(). Данная функция активируется нажатием на ссылку установки канала на странице Дополнения > Каналы продвижения. Точно также, вы сможете использовать деинсталляционную функцию(). Указанные выше функции, могут быть использованы для создания либо удаления любых структур (например, таблиц базы данных или настроек конфигурации), запрашиваемых каналом продвижения. Создав функцию деинсталляции вы сможете подчищать изменения, произведенные, созданным вами, каналом.

 

 

View

Вторым, не менее важным, файлом для работы в панели администратора является файл View. Его создают в папке admin/view/template/feed, с добавлением суффикса .tpl, который является стандартным для файлов view в Opencart. В данном файле создаются формы для заполнения и подтверждения пользователем. Они представлены индексной функцией контроллера. Самый простой способ создать собственный view файл - это скопировать содержимое подобного view файла и отредактировать поля формы в соответствии с параметрами конфигурации вашего канала. Свой view файл вы можете назвать, например, my_feed.tpl.

 

Language

Третий файл, который который обычно создается для любого канала - это языковой файл. Вам необходим только один язык, совместимый с создаваемым каналом. Расположение языкового файла находится здесь: admin/language/<language name>/feed. Он содержит ассоциативный рад PHP, именуемый $_, который состоит из имени, в качестве ключа, и перевода, в качестве значение. Назвать файл вы можете также, как и файлы controller и model - my_feed.php.

 

 

Model

Довольно редко канал продвижения требует наличие файла model для панели управления. Однако, если ваш канал при создания данных определенного формата опирается на собственную таблицу базы данных или пользовательский запрос, без сомнений создавайте файл model. Например, файл model уместен при создании канала счетчика посетителей, где каждый посетитель сохраняется в таблице базы данных с IP-адресом и общим количеством посещений. В данном случаи, вы можете создать файл model с функцией определения и создания дополнительной таблицы в базе данных OpenCart. Файл model будет расположен в папке admin/model/feed. Его вы можете назвать также, как и файлы controller и language: my_feed.php.

 

 

Функциональность каналов продвижения на витрине

Интерфейс витрины вашего канала выстраивается по принципу того же шаблона, что и интерфейс панели администратора, описанный выше. То, что вы будете добавлять в файлы модуля интерфейса витрины, значительно зависит от выполняемых функций, создаваемого канала. Канал продвижения имеет доступ к любым model файлам, которые уже существуют в OpenCart, и вам не придется создавать новый запросы базы данных, если такой уже существуют. Например, модель catalog/product содержит много полезных запросов при выбора товаров. Использование существующих функций, пожалуй, предпочтительнее, чем изобретение чего-нового.

Основное отличие каналов продвижения витрины, то, что ваш view файл будет расположен в папке catalog/view/theme/<themename>/template/feed. Более глубокая структура папок обоснована наличием тем. Интернет-магазин OpenCart содержит огромное количество тем для интерфейса витрины, и при этом всего один шаблон для панели администратора.

Данная часть канала открывает доступ к параметрам конфигурации, как через объект конфигурации контроллера, так и через переменную $settings, которая передается в канал, при помощи индексной функции контроллера. Также, вы сможете контролировать аспекты отображения витрины на основе данных параметров настройки.

 

 

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

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

 

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

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

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


File1.png


Помните, что в контроллер папки admin, необходимо загружать только языковые файлы для панели управления. Языковые файлы витрины необходимо поместить в контроллер папки catalog. Как только языковой файл был загружен в контроллер, вы сможете сохранить, содержащийся в нем текст в виде php переменной с использованием таблиц $data.

$this->language->get('text') 

захватывает текст из языкового файла, в виде переменной $ _ ['текст'].

 


File2.png


Каждый элемент строки будет преобразован в свои переменную. Например, $data['text'] преобразуется во $text для файла шаблона view. Каждый элемент данных будет преобразован в его собственную переменную. $data ['текст'] станет $text для файла шаблона в представлении. Переменная $text отображается .tpl файлом во view , так:


File3.png

 

Установка заголовка

Следующий код установит текст языкового файла, как заголовок страницы:

File4.png

Захваченный текст переменной $ _ ['heading_title'], сохраняется в языковом файле модуля.


Если вам необходимо сохранить текст в виде сессии php переменной, используйте код

$this->session->data['text'] instead of $this->data['text'].

 

 

 

 

Загрузка файлов model

Загрузка файлов model в файл контроллера позволит вашему модулю использовать встроенные функции OpenCart. Функции файла model взаимодействуют с базой данных магазина и добавляют/получают необходимую информацию для вашего модуля. Рекомендуем использовать данные функции, не совершая лишние запросы в свою БД. Тщательно исследуйте содержимое папок модели, admin и catalog, и выделите для себя файлы наиболее соответствующие функциональности вашего модуля. Например, если ваш модуль требует получения информации о товаре из базы данных магазина, необходимо загрузить файл admin/model/catalog/products.php. Данный файл уже имеет множество полезных, встроенных функций, взаимодействующих с товарами магазина в базе данных.

Используя следующий код, вы сможете загрузить любой model файл, в котроллер вашего модуля, при условии, что он расположен в той же папке admin/catalog, что и сам контроллер.


File5.png

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


File6.png


Нижнее подчеркивание направляет к обозначению файла для model/setting/setting.php. Если ваш model файл, включен в ваш модуль, код будет следовать формату, указанному выше, так как model файл загружается в папку модели.

File7.png

Код выше загрузит my_module.php, сохраненный в admin/model/module/my_module.php.

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

 

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

Файл шаблона модуля, необходимо загрузить в файл view. Для этого, установите $this->template, как показано ниже:

File8.png

 

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

Каталог OpenCart содержит коллекцию файлов библиотеки, к которым можно получить доступ с помощью контроллера обеих из папок (admin/catalog). Эти файлы расположены system/library в корневом каталоге магазина OpenCart. В кодовых примерах, приведенных в пункте загрузка языкового файла, оба кода: 

$this->load->language

и

 $this->document

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

$this->[insert library file name]->function()

 

в классе контроллера.