Новости Joomla

Quantum Manager нужен сообществу, а автору нужна ваша поддержка!

Quantum Manager нужен сообществу, а автору нужна ваша поддержка!Файловый менеджер Quantum — одно...

Файловый менеджер Quantum — одно из самых популярных решений для Joomla, созданное разработчиком из сообщества Joomla, Дмитрием Цымбалом (@tsymbalmitia). Он делает Quantum удобным, безопасным и современным, обновляет его, исправляет уязвимости и отвечает пользователям — всё это в свободное от основной работы время.

Теперь настал момент для следующего шага: развитие проекта требует больше времени и ресурсов.

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

johnsnow91

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

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

sivers

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

johnsnow91

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

sivers

  • Живу я здесь
  • 2595
  • 360 / 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.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

johnsnow91

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

sivers

  • Живу я здесь
  • 2595
  • 360 / 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 »
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

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

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

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

Вставка видео со своего сервера через media manager

Автор goga_pgasovav

Ответов: 2
Просмотров: 1525
Последний ответ 27.03.2025, 14:51:43
от Akeksandr
Проблема вебвизором в Яндекс метрике при использовании плагина jch optimize

Автор polezniy

Ответов: 32
Просмотров: 5012
Последний ответ 01.03.2024, 10:26:31
от Vastriet
Получить текущий номер страницы плагина "Разрыв страницы" (pagebreak)

Автор sertlan

Ответов: 1
Просмотров: 892
Последний ответ 12.06.2023, 18:14:09
от sertlan
Администрирую и редактирую сайт на CMS Joomla. Вопросы про настройки CMS

Автор admi5575

Ответов: 4
Просмотров: 1044
Последний ответ 10.05.2023, 09:02:29
от admi5575
ajax загрузка компонента на странице материала К2

Автор Divn

Ответов: 0
Просмотров: 1001
Последний ответ 13.01.2023, 15:05:52
от Divn