0 Пользователей и 1 Гость просматривают эту тему.
  • 7 Ответов
  • 338 Просмотров
*

johnsnow91

  • Новичок
  • 6
  • 0 / 0
Добрый день! Я только начал разрабатывать плагин для Joomla и сложновато разобраться со структурой. В самой популярной статье по разработке на оф. сайте нет этой информации.

Мне необходимо добавить на страницу настроек плагина для способа доставки javascript и подключить AJAX. Как это можно сделать, если все настройки через XML работают? Есть какой-то специальный файл для подключения?
*

sivers

  • Завсегдатай
  • 1361
  • 179 / 0
Либо интегрировать тем же плагином (если он системный или контентный), или создавать свой тип поля, в котором будет реализовано подключение скрипта.
Второй способ не для новичка. Почитать можно тут:
http://joomla-book.ru/development/standard-parameter-types/creating-your-field-type
На связи в телеге @sivers
*

johnsnow91

  • Новичок
  • 6
  • 0 / 0
спасибо! Я для себя второй способ выбрал, но можете пояснить, как бы можно было добавить в первом способе скрипт так, чтобы он именно в настройках появился?
*

sivers

  • Завсегдатай
  • 1361
  • 179 / 0
но можете пояснить, как бы можно было добавить в первом способе скрипт так, чтобы он именно в настройках появился?
Конечно. В случае, если плагин принадлежит группе Content, достаточно использовать обработчик события onContentPrepareForm:
https://docs.joomla.org/Plugin/Events/Content#onContentPrepareForm
Он вызывается в момент подготовки формы к выводу на странице. А редактирование любого элемента, модуля, пункта меню, плагина - это ведь форма. В этом обработчике проверяете, что сейчас редактируется форма именно вашего плагина и подключаете свои скрипты стандартно через $doc->addScript().
Если же плагин системной группы, то подключить скрипт можно в обработчике события onBeforeCompileHead (подготовка к сборке <head>):
https://docs.joomla.org/Plugin/Events/System#onBeforeCompileHead
Только здесь вам придется проанализировать либо адресную строку, либо переданные в адресе параметры, чтоб узнать, что сейчас редактируется именно ваш плагин - ИД есть в конфиге конструктора плагина, все остальное из параметров ?option=com_plugins&view=plugin&layout=edit&extension_id=10022.
На связи в телеге @sivers
*

johnsnow91

  • Новичок
  • 6
  • 0 / 0
@sivers, Спасибо за развернутый ответ! Похоже, что мне придется оба метода использовать. А что делать после того, как уже определил что это страница настроек?
К примеру, вот я распарсил гет-параметры и определил, что это страница - настройки моего плагина:
Код
public function onBeforeCompileHead(){
        $head = JFactory::getDocument()->getHeadData();
        $getParams = new JInput($_GET);
.....
    }
нужно как-то передать скрипт, который, к примеру, лежит в папке с плагином. Как мне это сделать? Есть какой-то метод? Не могу в документации накопать ничего про подключение javascript.
Если с контентом всё понятно, это можно в шаблоне сделать, то в случае с такими файлами, не могу понять, как тут бэк и фронт взаимодействуют... Извиняюсь за, возможно, глупые вопросы, но мне просто на голову свалили задачу не разбираясь, видел я хоть раз Joomla внутри или нет.
*

sivers

  • Завсегдатай
  • 1361
  • 179 / 0
Как мне это сделать?
Да все стандартно в жумле:
Код
        $app = JFactory::getApplication();
        $doc = $app->getDocument();
        $doc->addScript('/js/myPluginScript.js');
Если у вас жс лежит в папке плагина, то все точно так же, только надо вычислить путь к папке плагина от корня сайта:
Код
...
$path = str_replace(JPATH_SITE, '', __DIR__);
$doc->addScript($path.'/myPluginScript.js');
Обычно пользуюсь первым вариантом, чтоб не палить лишний раз имя плагина и джумлу в исходном коде сайта. Но, если хочется сделать полноценный плагин, чтоб все его файлы были в нем, то можно второй вариант размещения жс.

ПС
Вместо $getParams = new JInput($_GET); можно использовать $option = $app->input->getCmd('option', ''); $id = $app->input->getInt('extension_id', 0); и т.д.
« Последнее редактирование: 22.05.2020, 16:34:37 от sivers »
На связи в телеге @sivers
*

johnsnow91

  • Новичок
  • 6
  • 0 / 0
Огромное спасибо!
Я вытащил символьный код плагина вот такой конструкцией:
$this->getVmPluginMethod($app->input->getCmd('cid')[0])->shipment_element  и проверил на соответствие, теперь скрипт подключается только на странице доставки.
Вот такой результат получился:
В основном классе плагина добавил метод:
Код
public function onBeforeCompileHead(){
        $app = new Application\CMSApplication();
        if($this->getVmPluginMethod($app->input->getCmd('cid')[0])->shipment_element == 'код плагина' &&
        $app->input->getCmd('view') == 'shipmentmethod' && $app->input->getCmd('task') == 'edit'){
            JHtml::_('jquery.framework');
            JHtml::script( JURI::root().'путь к файлу js в папке плагина');
        }
    }
Внутри файла js весь Jquery код придется писать через jQuery, видимо, из-а их фреймворка.
Пока ещё не определился, делать ли свой тип поля или на яваскрипте кнопку добавлять, посмотрю, как пойдет дальше работа.
Ещё раз, огромное спасибо за помощь! Без Вас бы точно не справился!
*

sivers

  • Завсегдатай
  • 1361
  • 179 / 0
Пожалуйста.
Но лучше перепишите ваше условие вот так:
Код
if($app->input->getCmd('view') == 'shipmentmethod' && $app->input->getCmd('task') == 'edit' && $this->getVmPluginMethod($app->input->getCmd('cid')[0])->shipment_element == 'код плагина'){
В этом случае, если view и task не совпадут, то дальнейшая проверка с getVmPluginMethod вообще выполняться не будет. Она ведь что-то из БД читает? Т.е. вы при каждом заходе на любую страницу читаете это из БД ради проверки. Если поменять местами, то такого не будет происходить.

При перемене мест слагаемых сумма меняется таки )
На связи в телеге @sivers
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Список материалов категории, как добавить колонку?

Автор Abell007

Ответов: 1
Просмотров: 70
Последний ответ 08.08.2020, 13:17:16
от AlexB
Как автоматически добавить +100 просмотров ко всем категориям и статьям? PHP

Автор R31rus

Ответов: 9
Просмотров: 110
Последний ответ 05.08.2020, 16:19:56
от NewUsers
Как правильно добавить ссылку на иконку для главного экрана смартфона?

Автор Chigolberi

Ответов: 9
Просмотров: 1389
Последний ответ 02.07.2020, 10:04:19
от Chigolberi
Обновление плагина Joomla - оповещение

Автор pavelrer

Ответов: 3
Просмотров: 123
Последний ответ 19.06.2020, 16:03:44
от NewUsers
Добавить дате +1 месяц

Автор lgmax

Ответов: 2
Просмотров: 183
Последний ответ 16.06.2020, 15:01:31
от lgmax