Создание модуля OpenCart 2.х (OCMOD)

Лекция



Привет, Вы узнаете о том , что такое создание модуля opencart, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое создание модуля opencart, ocmod, opencart , настоятельно рекомендую прочитать все из категории Системы управления контентом CMS.

Расширения в OpenCart 2.х (до версии 2.3) это новые возможности, позволяющие создавать модули с возможностью безопасного изменения файлов шаблона, системы и сторонних модулей.

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

Для создания модуля для OpenCart до версии 2.х нужно сделать 6-ть файлов:

  1. файл представления модуля: catalog\view\theme\default\template\module\myModul.tpl
  2. контроллер модуля: catalog\controller\module\myModul.php
  3. языковой файл: catalog\language\russian\module\myModul.php
  4. файл представления модуля для панели администратора: admin\view\template\module\myModul.tpl
  5. контроллер модуля для панели администратора: admin\controller\module\myModul.php
  6. языковой файл модуля для панели администратора: admin\language\russian\module\myModul.php

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

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

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

Расширение в OpenCart 2.х это PHP, SQL и XML файлы в zip архиве, с именем имя_модуля.ocmod.zip.

Расширение состоит из:

  • upload (директория)- Директория в которой расположены файлы, они будут загружены в корень директории OpenCart
  • install.sql (файл)-Файл sql запроса, который будет выполнен при установке расширения
  • install.php (файл)- PHP скрипт, который выполниться при установке расширения
  • install.xml (файл)-XML файл модификатор (что это такое, об этом позже)

Наличие полного набора вышеуказанных файлов в расширение не обязательно, т.е. не обязательно иметь PHP, SQL и XML файлы в модуле. Рассмотрим два крайних варианта, из чего может состоять расширение:

  1. Расширение может состоять только из директории upload в архиве. В этом случае, расширение представляет собой «класический» модуль в OpenCart до версий 2.х, т.е. просто файлы, который скопируются в корень системы.
  2. Расширение может состоять из одного файла install.xml. В этом случае, файл должен иметь имя имя_модуля.ocmod.xml, загружается он в панель управления в «чистом» виде, не в архиве.

Вариант №1 — расширение состоит только из директории upload

Внутри директории, мы создадим 6 файлов как в статье «создаем модуль в OpenCart для 1.x », но с поправками для OpenCart 2.х.

1. Языковой файл: catalog\language\russian\module\mymodul.php

1

2

<?php

$_['heading_title'] = 'Заголовок модуля';

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

2. Контроллер: catalog\controller\module\mymodul.php

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

<?php

class ControllerModulemymodul extends Controller {

public function index() {

$this->load->language('module/mymodul'); //подключаем любой языковой файл

$data['heading_title'] = $this->language->get('heading_title'); //объявляем переменную heading_title с данными из языкового файла

$data['content']="Ваш контент"; //можно задать данные, сразу в контроллере

$this->load->model('catalog/product'); //подключаем любую модель из OpenCart

$data['product_info']=$this->model_catalog_product->getProduct(42); //используем метод подключенной модели, например getProduct(42) – информация о продукте id 42

//стандартная процедура для контроллеров OpenCart, выбираем файл представления модуля для вывода данных

if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/mymodul.tpl')) {

return $this->load->view($this->config->get('config_template') . '/template/module/mymodul.tpl', $data);

} else {

return $this->load->view('default/template/module/mymodul.tpl', $data);

}

}

}?>

Первое, на что стоит обратить внимание, на имя класса «ControllerModulemymodul», первая часть «ControllerModule» стандартная, вторая «mymodul» это имя вашего модуля. В каждом файле нужно придерживаться одного имени.

В контроллере, с помощью массива $data[‘имя’] объявляют переменные, которые будут видны в файле представления модуля. Как правило, это данные (текст) полученные из языкового файла или данные полученные из моделей.

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

1

$this->load->language('директория/файл');

Где

  • «директория» это имя директории, где находится языковой файл (обычно лежат в catalog/language/russian и в catalog/language/english)
  • «файл» это имя языкового файла без «.php»

Также в контролере модуля, можно сразу задать какие либо данные, используя

1

$data[‘имя’]= «моя строка»

Но это не рекомендуется, т.к. данные желательно хранить в БД или в языковых файлах, а не в контроллерах.

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

1

$this->load->model('директория/модель');

Где

  • «директория» это имя директории где находится модель (модели располагаются в директории catalog/model)
  • «модель» это имя модели, по сути это имя файла модели без «.php».

Далее, можно использовать методы подключенной модели

1

$results = $this->model_директория_модель->метод_модели(параметры);

P.S. Для того что-бы узнать, какие есть методы у модели, придется смотреть файл модели.

В примере, метод getProduct возвращает массив данных с информацией по продукту, аргумент метода — id номер продукта. Под id 42, в свежем установленном OpenCart-е, должен быть монитор «Apple Cinema 30″».

3. Файл представления: модуля catalog\view\theme\default\template\module\mymodul.tpl

1

2

3

4

5

<?php echo $heading_title; ?>

<br>

<?php echo $content; ?>

<br>

<?php echo $product_info['name']; ?>

Эти минимальный вариант файла представления, я просто вывожу все переменные, которые я объявилв контроллере. В вашем случае, должен быть html код с php.

4. Языковой файл модуля для панели администратора: admin\language\russian\module\mymodul.php

1

2

3

4

5

6

7

8

<?php

// Имя модуля, такой он будет виден на вкладке «модули» в панели управления и внутри настроек модуля

$_['heading_title'] = 'Мой модуль';

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

$_['text_module'] = 'Модули';

$_['text_edit'] = 'Настройки модуля';

$_['entry_status'] = 'Статус';

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

5. Контроллер модуля для панели администратора: admin\controller\module\mymodul.php

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

<?php

class ControllerModulemymodul extends Controller {

private $error = array();

public function index() {

$this->load->language('module/mymodul'); //подключаем наш языковой файл

$this->load->model('setting/setting'); //подключаем модель setting, он позволяет сохранять настройки модуля в БД

if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) { //если мы нажали "Сохранить" в панели, мы сохраняем текущие настройки

$this->model_setting_setting->editSetting('mymodul', $this->request->post);

$this->response->redirect($this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL'));

}

// ваши переменные

$data['heading_title'] = $this->language->get('heading_title');

$data['text_edit'] = $this->language->get('text_edit');

$data['text_enabled'] = $this->language->get('text_enabled');

$data['text_disabled'] = $this->language->get('text_disabled');

$data['entry_status'] = $this->language->get('entry_status');

// если метод validate вернул warning, передадим его представлению

if (isset($this->error['warning'])) {

$data['error_warning'] = $this->error['warning'];

} else {

$data['error_warning'] = '';

}

// далее идет формирование массива breadcrumbs (хлебные крошки)

$data['breadcrumbs'] = array();

$data['breadcrumbs'][] = array(

'text' => $this->language->get('text_home'),

'href' => $this->url->link('common/dashboard', 'token=' . $this->session->data['token'], 'SSL')

);

$data['breadcrumbs'][] = array(

'text' => $this->language->get('text_module'),

'href' => $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL')

);

$data['breadcrumbs'][] = array(

'text' => $this->language->get('heading_title'),

'href' => $this->url->link('module/category', 'token=' . $this->session->data['token'], 'SSL')

);

//ссылки для формы и кнопки "cancel"

$data['action'] = $this->url->link('module/mymodul', 'token=' . $this->session->data['token'], 'SSL');

$data['cancel'] = $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL');

//переменная с статусом модуля

if (isset($this->request->post['mymodul_status'])) {

$data['mymodul_status'] = $this->request->post['mymodul_status'];

} else {

$data['mymodul_status'] = $this->config->get('mymodul_status');

}

//ссылки на контроллеры header,column_left,footer, иначе мы не сможем вывести заголовок, подвал и левое меню в файле представления

$data['header'] = $this->load->controller('common/header');

$data['column_left'] = $this->load->controller('common/column_left');

$data['footer'] = $this->load->controller('common/footer');

//в качестве файла представления модуля для панели администратора использовать файл mymodul.tpl

$this->response->setOutput($this->load->view('module/mymodul.tpl', $data));

}

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

protected function validate() {

if (!$this->user->hasPermission('modify', 'module/category')) {

$this->error['warning'] = $this->language->get('error_permission');

}

return !$this->error;

}

}

В качестве донора я взял контроллер админки модуля категорииadmin\controller\module\category.php, единственное что я заменил:

Имя класса

1

class ControllerModuleCategory extends Controller {

на

1

class ControllerModulemymodul extends Controller {

Имя языкового файла

1

$this->load->language('module/category');

на

1

$this->load->language('module/mymodul');

Имя модуля, в методе редактирования настроек модуля

1

$this->model_setting_setting->editSetting('category', $this->request->post);

на

1

$this->model_setting_setting->editSetting('mymodul', $this->request->post);

Имя представления данного модуля для панели администратора

1

$this->response->setOutput($this->load->view('module/category.tpl', $data));

на

1

$this->response->setOutput($this->load->view('module/mymodul.tpl ', $data));

Имя модуля в определение переменной ‘action’

1

$data['action'] = $this->url->link('module/category', 'token=' . $this->session->data['token'], 'SSL');

на

1

$data['action'] = $this->url->link('module/mymodul', 'token=' . $this->session->data['token'], 'SSL');

Имя параметра в приеме POST/GET сообщений

1

2

3

4

5

6

7

8

9

if (isset($this->request->post['category_status'])) {

$data['category_status'] = $this->request->post['category_status'];

} else {

$data['category_status'] = $this->config->get('category_status');

}

на

1

2

3

4

5

6

7

8

9

if (isset($this->request->post['mymodul_status'])) {

$data['mymodul_status'] = $this->request->post['mymodul_status'];

} else {

$data['mymodul_status'] = $this->config->get('mymodul_status');

}

Имя модуля в методе validate()

1

if (!$this->user->hasPermission('modify', 'module/category')) {

на

1

if (!$this->user->hasPermission('modify', 'module/mymodul ')) {

Контроллер модуля для панели управления, это самая сложная часть. Он состоит из двух методов:

  • index()
  • validate()

Метод index() – принимает POST данные с файла представления модуля в админке (в настройках модуля), за это отвечает код до комментария «//ваши переменные», он обязателен для всех контроллеров.

После комментария «//ваши переменные», идет объявление переменных

  • $data[‘heading_title’],
  • $data[‘text_edit’],
  • $data[‘text_enabled’],
  • $data[‘text_disabled’],
  • $data[‘entry_status’]

Вы можете добавить свои переменные.

Текст берутся из языкового файла «module/mymodul», который был подключен ранее.

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

Далее, идет проверка разрешено-ли пользователю изменять настройки данного модуля (проверка есть ли переменная «warning»), если нет, формируем переменную $data[‘error_warning’] с текстом ошибки. Этот фрагмент кода обязателен.

После чего формируется массив «breadcrumbs», другими словами это «хлебные крошки» для файла представления.

Создание модуля  OpenCart 2.х (OCMOD)

В конце метода index(), выбираем файл представления для вывода данных $data.

Метод index() вызывает метод validate(), он служит для проверки разрешено ли пользователю изменять настройки данного модуля, он обязателен.

6. Файл представления модуля для панели администратора: admin\view\template\module\mymodul.tpl

Донором был — модуль категории (admin\view\template\module\category.tpl), единственное что я сделал:

Заменил в теге <button>

на

Заменил в теге <form>

на

Заменил в теге <select>

на

Хочу обратить внимание, что связка контроллера модуля для админки (пункт 5) и представления модуля для админки (пункт 6) в данном случае, обеспечивают минимальную страницу настройки модуля. в данном случае будет выбор статуса «Включено» или «Отключено».

Для дополнительных полей — опций, нужно смотреть контроллеры и представления других модулей, делайте все по образцу.

Поместим выше созданных 6-есть файлов в соответствующие директории (так, как бы они размещались в системе OpenCart), далее помещаем эти директории в директорию «upload», архивируем ее в zip формат с именем с именем «mymodule.ocmod.zip»

Далее зайдем в панель администрирования, далее «Установка расширений», нажимаем загрузить и выбираем наш zip файл.

Создание модуля  OpenCart 2.х (OCMOD)

Система покажет нам, какие файлы будут загружены. Нажимаем «продолжить«.

Теперь, если перейти на вкладку «Модули», мы увидим наш модуль «Мой модуль».

Создание модуля  OpenCart 2.х (OCMOD)

За имя модуля в панели управления отвечает параметр $_[‘heading_title’] языкового файла «admin\language\russian\module\mymodul.php»

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

Создание модуля  OpenCart 2.х (OCMOD)

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

admin\view\template\module\mymodul.tpl

и контроллер

admin\controller\module\mymodul.php

Действовать также, по аналогии с другими модулями.

Далее нужно выбрать для какого макета (до версии 2.x это называлось «схемы») применить данный модуль. Переходим в «Макеты», выбираем в качестве примера макет главной страницы «Home» -> «Редактировать», нажимаем «Добавить», выбираем «Мой модуль», нажимаем «Сохранить».

Создание модуля  OpenCart 2.х (OCMOD)

Теперь, если мы зайдем на главную страницу, то мы должны увидеть примерно следующие:

Создание модуля  OpenCart 2.х (OCMOD)

На главной, в красной рамке я обвел, то-что вывел наш модуль. Модуль работает.

Вариант №2 — расширение это файл «имя_модуля.ocmod.xml»

Файл «имя_модуля.ocmod.xml» называют «модификатор», согласно нему, происходит создание виртуальных копий файлов, которые требуют изменений. Примерно так написано в переводе на русский в официальной документации. Другими словами, в этом файле написано, что «на лету» нужно добавить или убрать в выбранных файлах, т.е. изменения будут виртуальными, файлы останутся без изменений.

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

Файл «имя_модуля.ocmod.xml» имеет следующую структуру:

 <?xml version="1.0" encoding="utf-8"?>
<modification>
    <name>Modification Default</name>
    <code>mymodule</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" index="1"><![CDATA[
            $data['column_left'] = $this->load->controller('common/column_left');
            ]]></search>
            <add position="replace" offset="1"><![CDATA[
            test123
            ]]></add>
        </operation>
    </file>  
</modification>

Теги name, code, version, author, link носят информационный характер, не буду на них акцентировать внимание.

Нам важен тег file и все его содержимое. Атрибут path указывает путь к изменяемому файлу, также есть возможность использовать маски и множественный выбор сразу несколько файлов (см. php функцию glob, модификаторы используют данную функцию). Тегов file может быть несколько.

Тег operation согласно документации не имеет атрибутов

Тег search, говорит, что нужно найти в вышеуказанном файле. Атрибут trim (true|false) указывает удалятьли пробелы, index – номер найденной позиции (например, по данному search найдутся три строки, так index это выбор с какой именно мы работаем). Атрибут regex (true|false) говорит, будут ли использоваться регулярные выражения при поиске.

В теле <![CDATA[ … ]]> мы указываем, что нам нужно найти, обычно это фрагмент кода.

Тег add говорит, что нужно сделать с найденной строкой, атрибут position описывает:

  • replace – заменить;
  • before – вставить до;
  • after – вставить после.

Атрибут trim указывает удалять ли пробелы, offset позволяет перейти на указанное количество строк относительно найденной строки. Значение может быть отрицательное.

В теле <![CDATA[ … ]]> мы прописываем на что мы хотим заменить найденную строку (или что хотим вставить до или после найденной строки).

Создадим пробный модификатор — файл mymodul2.ocmod.xml. Его задача очень простая, модуль «категории» выводит список категорий с количеством позиций в скобках.

Создание модуля  OpenCart 2.х (OCMOD)

Мы хотим, чтобы модуль больше не выводил количество позиций в категориях (т.е. без скобок). Для этого нужно, в контроллере модуля (catalog/controller/module/category.php) 58 строку:

'name' => $category['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''),

заменить на

'name' => $category['name'],

Файл «mymodul2.ocmod.xml» наполним следующим содержимым:
'name' => $category['name'],<?xml version="1.0" encoding="utf-8"?>

<modification>

<name>Категории без количества</name>

<code>mymodule</code>

<version>1.0</version>

<author>s-engineer</author>

<link>s-engineer.ru</link>

<file path="catalog/controller/module/category.php">

<operation>

<search><![CDATA[

'name' => $category['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''),

]]></search>

<add position="replace"><![CDATA[

'name' => $category['name'],

]]></add>

</operation>

</file>

</modification>

Для установки модификатора, как обычно заходим в «установка расширений», нажимаем «загрузить» и выбираем наш xml файл. Теперь наш модификатор установлен, если мы зайдем в «модификаторы», то в списке мы увидим наш модификатор с именем «Категории без количества».

Создание модуля  OpenCart 2.х (OCMOD)

Модификатор включен, но для его запуска, необходимо обновить кэш, для этого жмем кнопку «Обновить» (при каждом включение/выключение модификаторов необходимо обновлять кэш.).

Теперь модуль «категории» выводит список категорий без количества наименований.

Создание модуля  OpenCart 2.х (OCMOD)

Если нам нужно вернуть как было раньше, отключаем модификатор и жмем «Обновить».

Для отладки, думаю вам захочется посмотреть, как выглядит измененный файл. В директории system/storage/modification находятся директории с файлами, это результат работы модификаторов. Наш файл находится по адресу system/storage/modification/catalog/controller/module/category.php. Если мы в него заглянем, то на 58 строке увидим:

Т.е. модификатор сработал, так как мы задумывали.

Итог

Теперь, когда мы рассмотрели два крайних варианта модуля, не составит труда создавать «смешанные» модули, где есть папка upload и файл install.xml. Если вы хотите, чтобы ваш модуль использовал свои таблицы в БД или свои столбцы в уже созданных таблицах, то вы, можете обогатить его, с помощью файла install.sql. Он содержит SQL запрос, который выполнится при установке модуля.

Про install.php могу сказать, что он запускается при установке модуля, пример применения я привести не могу, т.к. не использовал его на практике.

Создание модуля  OpenCart 2.х (OCMOD)

В конце метода index(), выбираем файл представления для вывода данных $data.

Метод index() вызывает метод validate(), он служит для проверки разрешено ли пользователю изменять настройки данного модуля, он обязателен.

6. Файл представления модуля для панели администратора: admin\view\template\module\mymodul.tpl

Донором был — модуль категории (admin\view\template\module\category.tpl), единственное что я сделал:

Заменил в теге <button>

на

Заменил в теге <form>

на

Заменил в теге <select>

на

Хочу обратить внимание, что связка контроллера модуля для админки (пункт 5) и представления модуля для админки (пункт 6) в данном случае, обеспечивают минимальную страницу настройки модуля. Об этом говорит сайт https://intellect.icu . в данном случае будет выбор статуса «Включено» или «Отключено».

Для дополнительных полей — опций, нужно смотреть контроллеры и представления других модулей, делайте все по образцу.

Поместим выше созданных 6-есть файлов в соответствующие директории (так, как бы они размещались в системе OpenCart), далее помещаем эти директории в директорию «upload», архивируем ее в zip формат с именем с именем «mymodule.ocmod.zip»

Далее зайдем в панель администрирования, далее «Установка расширений», нажимаем загрузить и выбираем наш zip файл.

Создание модуля  OpenCart 2.х (OCMOD)

Система покажет нам, какие файлы будут загружены. Нажимаем «продолжить«.

Теперь, если перейти на вкладку «Модули», мы увидим наш модуль «Мой модуль».

Создание модуля  OpenCart 2.х (OCMOD)

За имя модуля в панели управления отвечает параметр $_[‘heading_title’] языкового файла «admin\language\russian\module\mymodul.php»

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

Создание модуля  OpenCart 2.х (OCMOD)

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

и контроллер

Действовать также, по аналогии с другими модулями.

Далее нужно выбрать для какого макета (до версии 2.x это называлось «схемы») применить данный модуль. Переходим в «Макеты», выбираем в качестве примера макет главной страницы «Home» -> «Редактировать», нажимаем «Добавить», выбираем «Мой модуль», нажимаем «Сохранить».

Создание модуля  OpenCart 2.х (OCMOD)

Теперь, если мы зайдем на главную страницу, то мы должны увидеть примерно следующие:

Создание модуля  OpenCart 2.х (OCMOD)

На главной, в красной рамке я обвел, то-что вывел наш модуль. Модуль работает.
Скачать mymodule.ocmod.zip

Вариант №2 — расширение это файл «имя_модуля.ocmod.xml»

Файл «имя_модуля.ocmod.xml» называют «модификатор», согласно нему, происходит создание виртуальных копий файлов, которые требуют изменений. Примерно так написано в переводе на русский в официальной документации. Другими словами, в этом файле написано, что «на лету» нужно добавить или убрать в выбранных файлах, т.е. изменения будут виртуальными, файлы останутся без изменений.

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

Файл «имя_модуля.ocmod.xml» имеет следующую структуру:

Теги name, code, version, author, link носят информационный характер, не буду на них акцентировать внимание.

Нам важен тег file и все его содержимое. Атрибут path указывает путь к изменяемому файлу, также есть возможность использовать маски и множественный выбор сразу несколько файлов (см. php функцию glob, модификаторы используют данную функцию). Тегов file может быть несколько.

Тег operation согласно документации не имеет атрибутов

Тег search, говорит, что нужно найти в вышеуказанном файле. Атрибут trim (true|false) указывает удалятьли пробелы, index – номер найденной позиции (например, по данному search найдутся три строки, так index это выбор с какой именно мы работаем). Атрибут regex (true|false) говорит, будут ли использоваться регулярные выражения при поиске.

В теле <![CDATA[ … ]]> мы указываем, что нам нужно найти, обычно это фрагмент кода.

Тег add говорит, что нужно сделать с найденной строкой, атрибут position описывает:

  • replace – заменить;
  • before – вставить до;
  • after – вставить после.

Атрибут trim указывает удалять ли пробелы, offset позволяет перейти на указанное количество строк относительно найденной строки. Значение может быть отрицательное.

В теле <![CDATA[ … ]]> мы прописываем на что мы хотим заменить найденную строку (или что хотим вставить до или после найденной строки).

Создадим пробный модификатор — файл mymodul2.ocmod.xml. Его задача очень простая, модуль «категории» выводит список категорий с количеством позиций в скобках.

Создание модуля  OpenCart 2.х (OCMOD)

Мы хотим, чтобы модуль больше не выводил количество позиций в категориях (т.е. без скобок). Для этого нужно, в контроллере модуля (catalog/controller/module/category.php) 58 строку:

заменить на

Файл «mymodul2.ocmod.xml» наполним следующим содержимым:

Для установки модификатора, как обычно заходим в «установка расширений», нажимаем «загрузить» и выбираем наш xml файл. Теперь наш модификатор установлен, если мы зайдем в «модификаторы», то в списке мы увидим наш модификатор с именем «Категории без количества».

Создание модуля  OpenCart 2.х (OCMOD)

Модификатор включен, но для его запуска, необходимо обновить кэш, для этого жмем кнопку «Обновить» (при каждом включение/выключение модификаторов необходимо обновлять кэш.).

Теперь модуль «категории» выводит список категорий без количества наименований.

Создание модуля  OpenCart 2.х (OCMOD)

Если нам нужно вернуть как было раньше, отключаем модификатор и жмем «Обновить».

Для отладки, думаю вам захочется посмотреть, как выглядит измененный файл. В директории system/storage/modification находятся директории с файлами, это результат работы модификаторов. Наш файл находится по адресу system/storage/modification/catalog/controller/module/category.php. Если мы в него заглянем, то на 58 строке увидим:

Т.е. модификатор сработал, так как мы задумывали.
Скачать mymodul2.ocmod.xml (пр.кн.мышки сохранить как)

Итог

Теперь, когда мы рассмотрели два крайних варианта модуля, не составит труда создавать «смешанные» модули, где есть папка upload и файл install.xml. Если вы хотите, чтобы ваш модуль использовал свои таблицы в БД или свои столбцы в уже созданных таблицах, то вы, можете обогатить его, с помощью файла install.sql. Он содержит SQL запрос, который выполнится при установке модуля.

Про install.php могу сказать, что он запускается при установке модуля, пример применения я привести не могу, т.к. не использовал его на практике.

Анализ данных, представленных в статье про создание модуля opencart, подтверждает эффективность применения современных технологий для обеспечения инновационного развития и улучшения качества жизни в различных сферах. Надеюсь, что теперь ты понял что такое создание модуля opencart, ocmod, opencart и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Системы управления контентом CMS

создано: 2018-05-17
обновлено: 2021-01-11
1



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии

Joka
02-08-2021
Спасибо за статью Создание модуля OpenCart

Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Системы управления контентом CMS

Термины: Системы управления контентом CMS