Создаем модуль в OpenCart

 

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

Ничего лишнего, итак приступим …

organizational_unit

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

  1. файл представления модуля:
  2. контроллер модуля:
  3. языковой файл:
  4. файл представления модуля для админпанели:
  5. контроллер модуля для админпанели:
  6. языковой файл модуля для админпанели:

     

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

 

 

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

 

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

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

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

1

 

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

 

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

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

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

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

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

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

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

 

 

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

 

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

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

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

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

2

 

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

 

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

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

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

3

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

 

 

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

 

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

Например, наполним его содержимым контроллера модуля «Информация» (controller\module\information.php).

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

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

 

 

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

 

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

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

 

Итог

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

 


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

 

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

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

 

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

module_my_options

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

 

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

 

 

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

 

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

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

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

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

 

 

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

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

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

 

 

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

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

 

module_my_options_example

 

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

 

 

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

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

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

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

 

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

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

 

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

 

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

 

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

<form action=»<?php echo $action; ?>» method=»post» enctype=»multipart/form-data» id=»form»>

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

 

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

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

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

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

module_my_options

 

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

 

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

 

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

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

 

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

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

 

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

 

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

 

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

 

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

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

 

 




Буду признателен если вы поделитесь данным постом

Комментарии
  1. Артур пишет:

    Здравствуйте, применим ли этот модуль для создания своего способа заказа и оплаты в место тех что по умолчанию в опенкарт, при этом что-бы те что по умолчанию отключить — как можно реализовать это?
    Пример, всё просто чтоб было
    1) В оформлении заказа
    Шаг 5: Способ оплаты
    Выберите способ оплаты для этого заказа:

    — чтоб просто можно было добавить текст

    GMT
    Unistream
    Money Gram
    Westernunion
    Вэб-мани электронная валюта

    и чтобы клиент выбрал подходящий вариант,
    То что по умолчанию всё усложняет.
    2) Тоже самое и с доставкой, сейчас стоит
    Шаг 4: Способ доставки
    Выберите удобный способ доставки для этого заказа:
    Фиксированная стоимость доставки 55.00 р
    что-бы можно было это отключить и добавить
    свои варианты типа
    EMS
    DHL
    IsPost

    без всяких там Фиксированных стоимостей доставки
    Подскажите пожалуйста

  2. admin пишет:

    Корзина в OpenCart это больная тема)

    Если вы хотите изменять корзину сами, то рекомендую первым делом забыть о модулях и сконцентрироваться, на стандартной корзине. Изучите и редактируйте её до тех пор, пока не будет получен результат. А потом уже задумывайтесь о том как вынести все это в отдельный модуль.

    Теперь конкретнее …

    Решая данную задачу, можно двигаться по одному из пути:

    1. Как я уже говорил править уже существующую корзину, если мне не изменяет память, то вам придется работать с директорией «catalog\view\theme\nimfa\template\checkout», в ней располагается файлы «представления», которые отвечают за внешний вид корзины. И с директорией «catalog\controller\checkout», в которой лежат файлы «контроллеры», они отвечают за логику работы корзины.

    2. Если вам нужно изменить только содержимое шага №5 (выбор способа оплаты) и шага №4 (выбор способа доставки), а остальные шаги останутся не именными, то наверное лучше поискать готовые модули. Модуль для добавление способа оплаты (единственное что бросилось в глаза это модуль «Робокасса» и «Интеркасса», попробуйте посмотрите). Модуль для добавление доставки, видел только что-то для EMS. Вообщем погуглите.

    3. Если вы хотите сделать корзину которая сильно будет отличаться от стандартной (например пропущены некоторые шаги или их вообще нет и все выводиться сразу), то лучше потереть стандартную корзину OpenCart и начать делать все с нуля.. Это не так сложно как может показаться, я шел именно по этому пути.

    Я делал корзину которая работает по следующему принципу:
    Покупатель сначала вводит данные о себе: имя, телефон или e-mail, далее выбирает оформлять доставку или нет. Если да, то вводит город, до которого надо доставить, тем самым отправляется запрос в СДЭК (транспортная компания), СДЭК отсылает ответ со стоимостью доставки. Для пользователя все происходит быстро, он просто пишет до куда и ему в корзину добавляется стоимость доставки. Далее пользователь нажимает «оформить заказ», и попадает на сайт платежной системы «монета.ру», там выбирает способ оплаты (способов много, начиная с веб-мани и заканчивая оплаты с помощью смс). Оплачивает с помощью выбранного способа и попадает обратно в магазин, где ему выводиться номер заказа. Тем самым магазин отправляет в СДЭК данные на доставку, в какой город и список товара. Вообщем все работает автоматически, для пользователя все выглядит просто.

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

  3. Артур пишет:

    Пока осмысливаю то что вы написали, дайте ссылку, и спасибо за то что, откликнулись на мой комментарий,
    всё мучаюсь с этим и не могу решить не как. Понимаете вся проблема в том что я с Израиля а модули оплаты и доставки пишутся почти все в основном людьми с России
    , они же не могут знать как это осуществляется в
    Израиле и это меня вводит в сложности как и что
    выбрать а знаю только вышеперечисленные методы оплаты и доставки с Израиля..

  4. admin пишет:

    На вашу почту я выслал ссылку на сайт с корзиной.

    Если вас устраивает дизайн данной корзины и вы хотите похожую, но адаптированую под себя. То сперва,
    вам нужно найти «местную» популярную систему оплаты, в которой будет доступны нужные вам способы оплаты (GMT, Unistream, Money Gram, Westernunion, …), как у нас «монета.ру» или как в мире «paypal». Я смогу помочь в привязки корзины к системе оплаты. С доставкой труднее, я опять же привязывал все к одной транспортной компании, а она уже разбиралась сама как доставлять. Напрямую с EMS, DHL, IsPost дело не имел.

  5. Артур пишет:

    Глянул сайт и мне очень понравилось, если можно оформление как-то убрать и в статье — доставка и оплата всё описать, то и проблема решена, нечего дополнительного даже не нужно потому как способы — те что я хочу
    у них на сайтах всё описано уже, увидел что деньги
    зашли от клиента, и отправил уведомление что статус заказа изменился что-то типа упаковывается и ещё раз изменить статус на отправлено
    пройдите по ссылке(ссылка сервиса) чтобы проследить
    где товар сейчас

  6. admin пишет:

    Оформление (т.е. цвета, относительное положение) изменить дело 10 минут, добавить текст-описание тоже не проблема

  7. Александр пишет:

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

    Убедительная просьба к автору статьи. Если вы и правда хотите кому то подсказать как работать с данной системой, то покажите и распишите полностью все что нужно для создания модуля. Почему обязательно чтоб была подключена модель $this->load->model(‘setting/setting’); и для чего она нужна. А лучше всего покажите людям как создать простенький модкль, которого нет в базовом функционале OPENCART и тогда будет понятно что к чему, а главное распишите. А в данной статье вы просто раскрыли принцып MVC но не объяснили как создать модуль. А копировать чужие файлы со знанием принцыпа MVC легко разобраться в любой платформе.

  8. okyrok пишет:

    Создал в catalog/controller/module/MYMODULE.php. Написал туда exit();
    Но на сайте ничего не поменялось, какую именно переменную мне надо создать в admin/controller/module/MYMODULE.php

    что бы была какая-то реакция??

  9. admin пишет:

    Добрый день. по-моему странно что-то ожидать от функции exit();

    Попробуйте создать переменную в контроллере по образцу

    $this->data[‘имя_перемен_видимой_для_представления’]=»Значения переменной»;

    А в представление модуля (catalog\view\theme\имя_шаблона\template\module\MYMODULE.tpl) добавьте:

    < ?php echo $имя_перемен_видимой_для_представления ?>

  10. Вася пишет:

    В чем может быть проблема, блоки дублируется 4 раза

  11. Борис пишет:

    здравствуйте! а Вы могли бы и мне на почту скинуть ссылку на сайт с переделанной корзиной?

  12. Виктор пишет:

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

  13. admin пишет:

    Добрый день Виктор. В панель администратора OpenCart вы заходите как админ? (логин admin?)

    Если да, попробуйте сделать следующее, зайдите в Система -> Пользователи, выберите «Группа пользователей». Далее выбираете «Top Administrator», где «Разрешен просмотр» жмите «выделить все» и также где «Разрешено внесение изменений» жмите «выделить все». Далее «Сохранить». Попробуйте теперь.

  14. Виктор пишет:

    Спасибо за ответ! Это я пробовал в первую очередь, там никаких новых чекбоксов не появилось. Видимо, что-то не так сделал, буду искать ошибку.

  15. admin пишет:

    Спасибо что читаете мой блог)

    Виктор, честно говоря странная проблема. Другие модули вы можете настраивать?

  16. Виктор пишет:

    Да, у меня полный доступ ко всему, все галки стоят, «Главный администратор». Скорее всего, где-то мелкая ошибка при копи-пасте. Завтра перепроверю все еще раз.

    И вам спасибо за блог. Честно говоря, информации по OpenCart минимум, и та — на английском. И даже на английском ничего толкового не находится.

  17. admin пишет:

    По OpenCart в рунете я вообще ничего толкового не нашел, когда обучался работать на нем. Это вынудило меня сесть и написать самому.

  18. Виктор пишет:

    Сделал все по новой (все честно скопировал), теперь в админке модуль виден, подключился, работает. Но непонятно, где должна инициализироваться переменная. В контроллер в функцию index прописал $this->language->load(‘module/myModul’); А при выводе на страницу выдает, что переменная $heading_title не определена. Добавил в контроллер строку $this->data[‘heading_title’] = $this->language->get(‘heading_title’); — тот же результат. В языковом файле прописал $_[‘heading_title’] = ‘myModul’; — ничего не меняется.

    В общем, может, я невнимательно читаю, но мне не очевидно, какой файл для чего используется, где нужно объявлять переменные и как ими пользоваться. В английском «Руководстве» все объяснено примерно так: Вид модуля описывает его представление, Контроллер является контроллером модуля, а Модель — его моделью, и кроме того, есть еще языковое представление, которое обеспечивает вывод модуля на нужном языке.

    Вот, если бы я был разработчиком, я бы написал примерно так: Контроллер — это та штука, где следует объявлять переменные, Модель — это то место, где описываются методы (функции), а view — это шаблон вывода, в котором можно использовать свойства и методы.

  19. admin пишет:

    Добрый день Виктор.

    По поводу файлов, который за что отвечает. Непонимание у вас потому, что вы не знакомы с шаблоном MVC. Это такая архитектура программного обеспечения, разработчики OpenCart при разработке своей CMS решили использовать MVC. Почитайте в интернете про данную архитектуру (на википедии есть статья) и у вас придет понимание, что такое контроллер, представление и модель.

  20. Виктор пишет:

    Спасибо, статью в Википедии прочитал. Но она ни грамма не прибавила к тому, что я до этого понимал. Из того, что «вся бизнес-логика содержится в модели», а «контроллер выполняет исключительно функцию связующего звена» никак не родилось знание о том, где нужно объявлять переменные, чтобы это не вредило тонкой душевной организации концепции MVC, которую никто не может объяснить один раз русским по белому. То, что получение данных, их обработку и вывод на экран нужно разделять, это любому человеку и без всякой концепции было понятно, а большего про эту концепцию никто не пишет. Ссылка на видеоуроки в конце статьи в вики, возможно, окажется полезнее, но я ее на работе не могу посмотреть.

    Продолжая исследовать CMS методом тыка, вывел-таки модуль на своей странице. Но в чем проблема была, пока не понял. Похоже в том, что у меня render() шел до объявления переменной:)

  21. admin пишет:

    Давайте Виктор по порядку. Переменные вы объявляете в контроллерах OpenCart (массив data[]), значения для переменных почти всегда берется из моделей (например информация о продукте по его ID). Иногда, данные берутся из языковых файлов (папка language).
    О том, как изымать данные, знают только модели, в них происходит обращение к MySQL. К каким переменным, какие данные пристыковать, знает контроллер (что то вроде коммутатора). Представление знает только те данные, которые ему предоставляет контроллер, он отвечает за то, как их выводить.

    Получается цепочка Модель -> Контроллер -> Представление.

    Переменные, желательно объявлять в контроллерах. Остается вопрос, откуда браться данные для своей переменной. Если новая переменная «ваш костыль» и данные для неё, не так сложны что-бы создавать для неё свою модель, я считаю вполне допустимо формировать их в теле контроллера.

  22. Leo пишет:

    Спасибо за данный гайд, но прошу более внимательно следить за правильностью кода.
    Пытаюсь написать модуль по примеру из данной статьи,
    к сожалению нашёл несколько ошибок где автор неправильно переписывает код исходного контроллера.
    пример: здесь в контроллере admin/controller/module/myModul.php написано
    $this->load->language(‘module/myModul’);
    а в оригинале
    $this->language->load(‘module/information’);

    так же в самом начале где автор описывает подключения темплейта к пользовательскому контроллеру он указывает
    ‘/template/module/test.tpl’
    вместо
    ‘/template/module/myModule.tpl’
    и молчу про забыте кавычки в некоторых местах при обращении к элементам массива или объекта.

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

  23. admin пишет:

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

    1. Я исправил опечатку «/template/module/test.tpl».
    2. В контроллере админки «admin/controller/module/myModul.php» ошибки нет, обращение к языковому файлу «$this->load->language(‘module/myModul’);» осознанно. Внизу, под исходным кодом написано, что в отличие от оригинального контроллера, этот контроллер отличается тем, что я заменил все обращения к «information» на «myModul». Языковой файл для нашего модуля у нас свой.

    «но свой модуль в списке доступных модулей так и не вижу»
    Я могу предположить, что в последних версиях OpenCart, возможны есть некие изменения из-за которых возникают данные проблемы. Попробуйте взять в качестве образца свой модуль information, отпишитесь пожалуйста о результатах.

  24. Виктор пишет:

    Большое вам спасибо. Я с вашей помощью обнаружил, что в интернете по теме MVC действительно стало существенно больше информации в последнее время. Изучаю.
    Я с OpenCart достаточно давно общаюсь, как пользователь, ну и шкурки на нее натягиваю по мере сил. Думал — чего там знать, все наглядно. А тут вот возникла необходимость поменять странное поведение модуля banner при сортировке, поэтому и приходится углубляться в тему.

  25. admin пишет:

    Всегда пожалуйста! Буду рад вас видеть на моем блоге =)

  26. Leo пишет:

    Я имел ввиду не языковой файл, а порядок load->language и language->load
    мой вариант модуля заработал, я тоже не безгрешен 🙂
    так как я использую camelCase при написании переменных то соответственно $_[‘heading_title’] заменил на $_[‘headingTitle’] чего не следовало делать, по тому что при построении списка модулей используется именно этот параметр модуля для получения его имени, а если его не находит — то новому модулю проставляется имя предыдущего модуля из текущего цикла.

  27. admin пишет:

    Важное замечание, спасибо Leo. Я выделил жирным шрифтом, важный момент в вашем комментарии. Возможно это кому-то поможет.

  28. Leo пишет:

    Виктор. По поводу MVC модели я сам одно время не мог понять принцип пока мне не показали напару моментов, я всегда думал — как это «управление передаётся» например от контроллера к виду.
    можно начать с адресной строки
    http://sitename/admin/index.php?route=module/my_modul&token=e17957137112fceab2ae00aa9af88391
    На данном примере мы видим что мы обращаемся к «разделу» module и контроллеру my_module, далее идёт токен сессии который используется для авторизации
    Так как здесь не указан экшен — то по умолчанию идёт обращение к экшену(функции) index класса myModule.
    внутри этого экшена мы подключаем языковые файлы, модели и работаем с логикой. к подключенной модели мы обращаемся если нам нужно получить что-то из базы, обращением в данном случае называется обычный вызов метода соответствующего(подключенного) класса.
    Далее мы формируем массив $this->data через который будут переданы виду переменные например $this->data[‘heading_title’] = $this->language->get(‘heading_title’); эта переменная будет видна в виде как $heading_title
    передача данных виду и «передача управления» — то есть когда происходит работа с нашим шаблоном *.tpl который мы указали здесь ($this->template = ‘module/oc_parser.tpl’;) и строится страница. происходит в момент выполнения команды $this->response->setOutput($this->render());

    надеюсь что теперь вам будет более понятен сам принцип работы с mvc моделью в данной cms.

  29. Алексей пишет:

    Доброго времени суток! Подскажите пожалуйста как сделать вместо описании товара, сделать таблицу виде прайса с кнопкой купить…Что-то типа datatable
    Благодарю за ответ!

  30. admin пишет:

    Добрый день Алексей. У товара одна цена (ну максимум две, без скидки и со скидкой). Что за прайс вы имеете ввиду?

  31. Евгений пишет:

    Здравствуйте, спасибо за подробный мануал, вообще Ваш блог очень помогает в освоении opencart)
    Подскажите, как я могу передать значение переменной из одной функции в другую в контроллере модуля. (т.е. в catalog\controller\module\имя_модуля.php).

    <?php
    class ControllerModuleCallMe extends Controller {
    protected function index($setting) {
    $setting["param1"]; // Эту переменную нужно передать в функцию sendEmail()
    }

    public function sendEmail() {
    echo $setting["param1"];
    }
    }

    Таких переменных несколько, все нужно передать, пробовал return, но не работает. В php новичок 🙂

  32. admin пишет:

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

    Т.е. в любом месте контроллера вы объявляете вашу функцию :

    public function sendEmail(int $param1) {
    echo $param1;
    }

    А в теле

    protected function index($setting) {
    $param1=$setting[«param1»]; // Эту переменную нужно передать в функцию sendEmail()
    sendEmail($param1);
    }

    Поближе познакомиться с функциями в PHP вы можете тут (раздел 9)

  33. Артём пишет:

    Здравствуйте.

    Вставил в 6 файлов ваш код. Но при установке, удалении модуля в админке http://…/admin/index.php?route=extension/module/uninstall&token=e947dc5ee4b2396df4abfafff9ca10d1&extension=MyModul выкидывает Ошибку-500!
    Ошибка HTTP 500 (Internal Server Error): При попытке сервера выполнить запрос возникла неожиданная ситуация.

  34. admin пишет:

    Добрый день Артем, проверьте совпадает ли имя вашего модуля с именем класса в контролере. Например как у меня
    модуль — myModul.php, myModul.tpl
    имя класса в контроллере — ControllerModuleMyModul

    P.S. Если нужно срочно отключить модуль, а добраться до админки не получается, я могу посмотреть как это сделать в БД.

  35. Pescha пишет:

    Добрый день. Делаю свой модуль. По вашей статье всё получается (ну может с напильником, но получается). А то, что мне нужно, сделать не могу. Как бы мне с Вами пообщаться?

  36. admin пишет:

    Добрый день Pescha!

    Я могу вам оказывать консультации по ICQ, в обед по Москве я вам напишу на электронную почту и мы договоримся о стоимости.

  37. Игорь пишет:

    Дружище да ты рулишь.
    Хоть один выложил подробную инфу о создании модулей
    Респект и с меня несколько ссылок

  38. Евгения пишет:

    Спасибо за подробное описание! Реально, оч полезная статья!!!
    Скажите, а как в модуль добавить строки с тегами (например, h1)?

  39. admin пишет:

    Добрый день Евгения! Спасибо что посетили мой сайт.

    Если вы хотите добавить что нибудь своё в модуль, вам достаточно подправить файл представления
    » catalog\view\theme\default\template\module\myModul.tpl »

    В него вы можете добавить любой тег с любым содержимым.

  40. Алексей пишет:

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

  41. admin пишет:

    Я отправил вам письмо на электронку

  42. Тимур пишет:

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

  43. admin пишет:

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

  44. Евгений пишет:

    Здравствуйте. а как в место input type text поставить текстовую область с возможностью редактирования html?
    Ваша работа просто прелесть, спасибо большое.

  45. admin пишет:

    Добрый день Евгений, не совсем понял, область для редактирования html текущей страницы?

  46. Марта пишет:

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

  47. admin пишет:

    Добрый день Марта!

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

  48. Артем пишет:

    Добрый день!
    Если делать по вашему рецепту, то при попытке редактировать модуль выдает исключение Fatal error: Call to undefined method ControllerModuleMyModul::render() in /var/www/html/upload/admin/controller/module/myModul.php on line 83

    Спасибо заранее!

  49. Модули Opencart 2 пишет:

    Спасибо большое!

  50. Елена пишет:

    Добрый день!
    Вчера вечером написала Вам через контактную форму вопрос по обмену данными. Подскажите, пожалуйста, получили ли мой вопрос?
    Заранее благодарю. С уважением)

  51. admin пишет:

    Добрый день Елена!

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

  52. Игорь пишет:

    Добрый день. Сделал по вашему примеру модуль. но при включении его на определенной странице — эта страница неотображается. В чем может быть причина?

  53. admin пишет:

    Добрый день Игорь.

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

  54. Димка пишет:

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

  55. admin пишет:

    Здравствуйте Дмитрий.
    Смотрите по аналогии как это реализовано в других контроллерах, от версии к версии в OpenCart, доступ к настройкам мы осуществляется по разному.

    P.S. Если мне память не изменят, то за настройки отвечает массив setting, поищите, что то похожее.

  56. Павел пишет:

    Здравствуйте!
    Столкнулся с проблемой, которую не получается решить, поиск результатов не даёт.
    Итак, нужно динамически сформировать заказ в корзине. То есть: послать какой-то запрос серверу, по которому будет сформирован заказ с переданными в запросе данными. Подчеркиваю — НЕ с данными из базы товаров, а именно с теми, что будут переданы серверу.
    Чтобы было легче понять вопрос: существует калькулятор расчёта заказа. Нужно, после всех введённых заказчиком данных сформировать заказ в корзине.

  57. admin пишет:

    Павел я вам ответил на e-mail.


Отдых на Мальдивах по Горящему туру из Санкт-Петербурга

Ваш комментарий


Ответ в цифрах

 
© s-engineer.ru, 2012-2017 | Все права защищены