Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Создание модуля для системы OpenCart 1.х.

Лекция



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

Для OpenCart версий 2.х есть другая статья.

Для того что бы создать модуль, нам необходимо как минимум 6 файлов. Пускай наш новый модуль будет иметь название «myModul» и для его работы нам понадобятся следующие файлы:

  1. файл представления модуля:

    1

    catalog\view\theme\default\template\module\myModul.tpl

  2. контроллер модуля:

    1

    catalog\controller\module\myModul.php

  3. языковой файл:

    1

    catalog\language\russian\module\myModul.php

  4. файл представления модуля для админпанели:

    1

    admin\view\template\module\myModul.tpl

  5. контроллер модуля для админпанели:

    1

    admin\controller\module\myModul.php

  6. языковой файл модуля для админпанели:

    1

    admin\language\russian\module\myModul.php

Создавать мы их будем в порядке нумерации.

1. Файл представления

Создадим catalog\view\theme\default\template\module\myModul.tpl, и наполним его следующим содержимым:

1

2

3

4

5

6

код модуля

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

Если оставить данный код без изменений, то наш модуль будет выглядеть так:

Создание  модуля для системы OpenCart 1.х.

2. Контроллер модуля

Аналогично, создаем catalog\controller\module\myModul.php и наполняем его следующим минимум:

1

2

3

4

5

6

7

8

9

10

11

12

13

class ControllerModuleMyModul extends Controller {

protected function index() {

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

$this->template = $this->config->get('config_template') . '/template/module/myModul.tpl';

} else {

$this->template = 'default/template/module/myModul.tpl';

}

$this->render();

}

}

?>

Заметьте название класса «ControllerModuleMyModul» это строка «ControllerModule» плюс «имя модуля с большой буквы». В контроллере мы как минимум должны, указать какой файл представления будет отвечать за вывод информации. Но данный контроллер не функционален, это всего лишь заготовка. Функционалом он будет заполняться в зависимости от потребностей модуля.

Как пример, в нем вы можете подключать модель:

1

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

и далее вызывать ее методы.

Также можно подключать языковой файл:

1

$this->language->load('module/имя_языкового_файла');

и объявлять переменные:

1

$this->data['имя_переменной'] = $this->language->get('имя_переменной_из_яз_файла');

Данная переменная будет видна в шаблоне myModul.tpl.

3. Языковой файл

Создаем catalog\language\russian\module\myModul.php и наполняем его следующим содержимым:

1

2

3

$_['имя_переменной'] = 'значение переменной';

?>

Мы можем работать с данной переменной, только в том случае если в контроллере объявим:

1

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

обращаться к ней следует так

1

$this->language->get('имя_переменной');

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

Создание  модуля для системы OpenCart 1.х.

4. Файл представления модуля для админпанели

Создаем admin\view\template\module\myModul.tpl и наполняем его следующим содержимым:

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

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

Создание  модуля для системы OpenCart 1.х.

Данный код был взят из файла представления для модуля «Информация» (admin\view\template\module\information.tpl), я заменил только «information» на «myModul».

Данный код отображает следующие возможности в админпанели по настройки модуля:

Создание  модуля для системы OpenCart 1.х.

Файл представления для админпанели, вы можете наполнить своим содержимым. Об этом говорит сайт https://intellect.icu . Я представил этот пример только из-за того, что он хорошо предоставляет минимальные настройки для модуля (т.е. выбор схемы и положения модуля).

5. Контролер модуля для админпанели

Создаем admin\controller\module\myModul.php и наполняем его содержимым контроллера модуля которого мы брали в качестве образца.

Например, наполним его содержимым контроллера модуля «Информация» (controller\module\information.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

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

class ControllerModuleMyModul extends Controller {

private $error = array();

public function index() {

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

$this->document->setTitle($this->language->get('heading_title'));

$this->load->model('setting/setting');

if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {

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

$this->session->data['success'] = $this->language->get('text_success');

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

}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

} else {

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

}

$this->data['breadcrumbs'] = array();

$this->data['breadcrumbs'][] = array(

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

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

'separator' => false

);

$this->data['breadcrumbs'][] = array(

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

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

'separator' => ' :: '

);

$this->data['breadcrumbs'][] = array(

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

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

'separator' => ' :: '

);

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

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

$this->data['modules'] = array();

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

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

} elseif ($this->config->get('myModul_module')) {

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

}

$this->load->model('design/layout');

$this->data['layouts'] = $this->model_design_layout->getLayouts();

$this->template = 'module/myModul.tpl';

$this->children = array(

'common/header',

'common/footer'

);

$this->response->setOutput($this->render());

}

private function validate() {

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

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

}

if (!$this->error) {

return true;

} else {

return false;

}

}

}

?>

Единственное что я здесь изменил по отношению к оригинальному файлу, так это то, что произвел замену в имени класса с «ControllerModuleInformation» на «ControllerModuleMyModul» и все упоминания слова «information» заменил на «myModul».

Каков ваш контроллер, будет зависеть от предоставляемого функционала настроек, который предлагает ваш файл представления для админпанели (т.е. «admin\view\template\module\myModul.tpl»).

6. Языковой файл модуля для админпанели

Создаем admin\language\russian\module\myModul.php, наполняем его:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

// Heading

$_['heading_title'] = 'myModul';

// Text

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

$_['text_success'] = 'Настройки модуля обновлены!';

$_['text_content_top'] = 'Верх страницы';

$_['text_content_bottom'] = 'Низ страницы';

$_['text_column_left'] = 'Левая колонка';

$_['text_column_right'] = 'Правая колонка';

// Entry

$_['entry_layout'] = 'Схема:';

$_['entry_position'] = 'Расположение:';

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

$_['entry_sort_order'] = 'Порядок сортировки:';

// Error

$_['error_permission'] = 'У Вас нет прав для управления этим модулем!';

?>

Содержимое данного файла, я опять таки взял из образца для модуля «Информация». Тут главное определиться с содержимым переменных, который использует ваш файл представления для админпанели (admin\view\template\module\myModul.tpl).

Итог

Теперь если вы зайдете в Дополнения->Модули вы обнаружите модуль «myModul», с ним можно работать как с любым другим модулем, его можно установливать/удалять, определять положение на странице и т.п.


Добавлено позже

Со временем у меня возник вопрос :

— А как добавить в настройках моего модуля свои параметры?

Например я хочу что-бы в настройках модуля был «мой параметр»

Создание  модуля для системы OpenCart 1.х.

И он был виден в tpl файле модуля.

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

Механизм работы

Сначала, рассмотрим каков механизм работы

Когда в настройках модуля вы нажимаете на «SAVE” или “Сохранить”, вы тем самым посылаете POSTзапрос в контролер модуля в админки (т. е. в файл www\admin\controller\module\имя_модуля.php). Он принимает его и записывает в БД, а точнее в таблицу «префикс_setting«. Где в отведенной строке для вашего модуля будут сохранены настройки в виде «ключа: значения«.

Поподробнее..

В tpl шаблоне админинки модуля (т. е. в файле www\admin\view\template\module\filterattr.tpl) все настройки которые вы вводите, это значения тегов input, select и т. п., которые находятся в форме:

1

При нажатие на «Сохранить», вы просто посылаете POST запрос на (адрес контроллера модуля в админке, т. е. на файл www\admin\controller\module\имя_модуля.php) с значениями из формы.

Тем самым контроллер модуля в админке принимает этот запрос с помощью функции editSetting(‘имя_модуля’, $this->request->post) модели setting/setting‘.

Кусок кода в контроллере модуля в админки отвечающий за прием POST запросов выглядит так

1

2

3

4

5

6

7

8

9

$this->load->model('setting/setting');

if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {

$this->model_setting_setting->editSetting('имя_модуля', $this->request->post);

$this->session->data['success'] = $this->language->get('text_success');

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

}

Функция «editSetting» принимает параметры из формы и записывает в БД, в таблицу с именем префикс_setting в строку с столбцом group с именем модуля.

Например, для модуля «baner» в phpmyadmin строка с его параметрами будет выглядеть так

Создание  модуля для системы OpenCart 1.х.

Параметры хранятся в столбце value данной строки, для модуля banner они следующие:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

a:1:{

i:0;

a:7:{

s:9:"banner_id";

s:1:"6";

s:5:"width";

s:3:"200";

s:6:"height";

s:3:"182";

s:9:"layout_id";

s:1:"3";

s:8:"position";

s:11:"column_left";

s:6:"status";

s:1:"1";

s:10:"sort_order";

s:1:"3";}

}

Здесь приведен список параметров с значениями, хотя выглядит немного не логичным.

Сначала пишется параметр в кавычках, далее в кавычках его значение. Например параметр “width” имеем значение «200». Итак, где хранятся параметры и как они туда попадают разобрались.

Теперь разберемся как модуль их получает при выводе своего шаблона на страницу

В контроллере модуля (не админском контроллере модуля), т.е. в файле «www\catalog\controller\module\имя_файла.php» всегда присутствует функция

1

2

3

protected function index() {

...

}

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

Когда нам нужно передать параметры из админки модуля в сам модуль, нам нужно указать в качестве аргумента данной функции переменную «$setting», т.е. должно быть:

1

2

3

protected function index($setting) {

}

$setting это массив с ключами, например если вам нужно получить значение параметра “width”, вы обращаетесь к массиву так
$setting[‘width’]

Решение по шагам

1. Добавим в админский tpl шаблон (т. е. в файл www\admin\view\template\module\имя_модуля.tpl) нашего модуля в тело формы

» method=»post» enctype=»multipart/form-data» id=»form»>

следующий тэг:

1

2

3

Где «имямодуля_module [param1]» обязательный формат, здесь “param1” — имя параметра.
value – значение параметра по умолчанию (можно оставить пустым)

Что бы не поехала шапка таблицы настроек в админке, можете добавить столбец в первый

Например такой

1

Мой параметр

Теперь в админка модуля будет выглядеть так

Создание  модуля для системы OpenCart 1.х.

Внизу tpl шаблона, есть JavaScript функция function addModule(), добавьте данную в код, это нужно для того что-бы пользователь мог добавить новый модуль на другие страницы (схемы в терминологии OpenCart).

2. В админском контроллере модуля (т. е. в файле www\admin\controller\module\имя_модуля.php) нужно обязательно добавить следующий код

1

2

3

4

5

6

7

$this->load->model('setting/setting');

if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {

$this->model_setting_setting->editSetting('имя_модуля', $this->request->post);

$this->session->data['success'] = $this->language->get('text_success');

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

}

Он означает что POST запросы для данного модуля нужно обрабатывать и заносить в БД.

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

3. В контролере модуля (т. е. в файле www\catalog\controller\module\имя_модуля.php)

Добавить аргумент $setting в функцию

1

2

3

protected function index() {

...

}

Т.е. должно стать так

1

2

3

protected function index($setting) {

...

}

Далее, в любом месте контроллера добавить

1

$this->data['param1'] = $setting["param1"];

Это позволит, шаблону tpl данного модуля использовать данный параметр, виден он будет под именем «param1».

4. Теперь в tpl шаблоне модуля (т. е. в файле www\catalog\view\theme\default\template\module\filterattr.tpl) мы можем использовать данный параметр как нам нужно, например выведем его значение:

1

Результат будет:

1

123

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

создано: 2018-05-17
обновлено: 2021-03-13
132266



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


Поделиться:

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

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

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

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



Комментарии


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

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

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