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

johnsnow91

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

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

sivers

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

johnsnow91

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

sivers

  • Завсегдатай
  • 1544
  • 213 / 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

  • Завсегдатай
  • 1544
  • 213 / 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

  • Завсегдатай
  • 1544
  • 213 / 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
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как добавить документ pdf c возможностью скачивания на главную страницу сайта?

Автор Yulya_ivanova

Ответов: 1
Просмотров: 71
Последний ответ 28.12.2020, 11:11:05
от Yulya_ivanova
Настройка плагина shlib - Db query cache and programming library

Автор Cedars

Ответов: 4
Просмотров: 391
Последний ответ 15.12.2020, 01:18:55
от wishlight
Добавить свои мета-данные в head

Автор Аня

Ответов: 8
Просмотров: 290
Последний ответ 09.12.2020, 16:24:51
от Аня
Компонент на ajax

Автор antarey

Ответов: 0
Просмотров: 136
Последний ответ 08.12.2020, 10:39:58
от antarey
Вызов определенной функции модели ajax

Автор Dram

Ответов: 16
Просмотров: 136
Последний ответ 26.11.2020, 17:01:55
от Dram