Новости Joomla

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

👩‍💻 Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод triggerEvent(), с помощью которого раньше вызывались события для плагинов. Теперь чтобы в своём коде вызвать событие для плагина и получить от него результаты нужно:- создать объект класса события- передать в него параметры

use Joomla\CMS\Event\AbstractEvent;use Joomla\CMS\Factory;use Joomla\CMS\Plugin\PluginHelper;// Грузим плагины нужных группPluginHelper::importPlugin('system');// Создаём объект события$event = AbstractEvent::create('onAfterInitUniverse', [    'subject' => $this,    'data'    => $data, // какие-то данные    'article' => $article, // ещё материал вдовесок    'product' => $product, // и товаров подвезли]);// Триггерим событиеFactory::getApplication()->getDispatcher()->dispatch(    $event->getName(), // Тут можно строку передать 'onAfterInitUniverse'    $event);// Получаем результаты// В случае с AbstractEvent это может быть не 'result',// а что-то ещё - куда сами отдадите данные.// 2-й аргумент - значение по умолчанию, // если не получены результаты$results = $event->getArgument('result', []);
Плюсы такого подхода - вам не нужно запоминать порядок аргументов и проверять их наличие. Если вы написали свой класс события, то в плагине можно получать аргументы с помощью методов $event->getArticle(), $event->getData(), $event->getProduct() и подобными - реализуете сами под свои нужды. Если такой класс события написали, то создаёте экземпляр своего класса события и укажите его явно в аргументе eventClass
use Joomla\Component\MyComponent\Administrator\Event\MyCoolEvent;$event = MyCoolEvent::create('onAfterInitUniverse', [    'subject'    => $this,    'eventClass' => MyCoolEvent::class, // ваш класс события    'data'       => $data, // какие-то данные    'article'    => $article, // ещё материал вдовесок    'product'    => $product, // и товаров подвезли]);
Ожидаемо, что класс вашего события будет расширять AbsractEvent или другие классы событий Joomla.🙁 Есть неприятный нюанс - нельзя просто так вызывать событие и ничего не передать в аргументы. Аргумент subject обязательный. Но если вы всё-таки не хотите туда ничего передавать - передайте туда пустой stdClass или объект Joomla\registry\Registry.
@joomlafeed#joomla #php #webdev

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

Joker

  • Захожу иногда
  • 235
  • 3 / 0
Ребят, помогите, может ссылкой может советом или примером.

Вопрос по болшей степени по jQuery
пишу небольшой компонент в котором есть

<a onclick="function_1()"> тест</a>

в function_1()  идет обращение к php файлу и загрузка результата в определенный div

возвращает он форму
 
Цитировать
  <form class="form-horizontal" id="setting_form" action="/update_user.php" method="post" role="form">
    <div class="form-group">
    <label for="accuracy" class="col-sm-6 control-label">Точность определения координат</label>
    <div class="col-sm-6">
    <label class="radio-inline">
        <input type="radio" name="accuracy" <?php if($accuracy==1){echo 'checked="checked"';}?> value="1"> Точно
      </label>
      <label class="radio-inline">
        <input type="radio" name="accuracy" <?php if($accuracy==0){echo 'checked="checked"';}?> value="0"> Менее точно
      </label>
    </div>
  </div>
</form>

те изначально данной формы в нач. странице нет. она подгружается при вызове ф-и.

вот как мне вызвать  обработчик  на кнопку submit формы и все значения передать на файл сохранения результатов?

ведь изначально элементов нет не было на странице.

*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Jquery обращение к элементам
« Ответ #1 : 28.08.2014, 16:53:26 »
А разве jQuery не пофиг, был ли элемент на странице или нет?
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Re: Jquery обращение к элементам
« Ответ #2 : 28.08.2014, 16:58:24 »
если я правильно понял, то нужно использовать "on", тогда метод будет поддерживать динамические элементы
пример
Код
$('body').on('click', 'button', function(){
....
})
*

Joker

  • Захожу иногда
  • 235
  • 3 / 0
Re: Jquery обращение к элементам
« Ответ #3 : 28.08.2014, 17:08:24 »
если я правильно понял, то нужно использовать "on", тогда метод будет поддерживать динамические элементы
пример
Код
$('body').on('click', 'button', function(){
....
})

да вы совершенно верно поняли,  я как раз читал про него. но вопрос у меня в том что с "on" я перехватываю событие нажатие на кнопку, а вот как мне получить значения из формы?

console.log($( "#setting_form" ).serialize());     
пусто
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Re: Jquery обращение к элементам
« Ответ #4 : 28.08.2014, 17:23:41 »
я не понял где пишется этот console.log :)
попробовать можно так
Код
$('body').on('click', 'button', function(){
console.log($(this).parents('form').serialize());
})
и в форме в топике button я не увидел)
*

Joker

  • Захожу иногда
  • 235
  • 3 / 0
Re: Jquery обращение к элементам
« Ответ #5 : 28.08.2014, 17:32:52 »
приведу полный перечень


файл Index.php
в нем идет :

Код
            
<a href="#" data-toggle="modal" data-target="#setting" onclick="setting_user()">Настройки наблюдения</a>

<div class="modal fade" id="setting" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-body">
    </div>
</div>

<script type="text/javascript">
// ф-я кот подгружает в div форму
function setting_user(){
     var child_id    = $('input#child_id').val();
     $.post( "/setting_user.php",{child_id:child_id,user_id: "<? echo $uid; ?>", password:"<? echo $password; ?>"},function(data){$("#setting .modal-body").html(data)});
  return false;
}

// обработка клика сохранения
$( "#save_setting" ).on( "click", function() {
console.log($( "#setting_form" ).serialize());
    $.post( "update_user.php",$( "#setting_form" ).serialize(),function(data){    alert('Изменения сохранены');});
});
</script>


файл погрузки формы редактирования настроек setting_user.php

Код
SQL запрос .....
и вывод формы
<form class="form-horizontal" id="setting_form" action="/update_user.php" method="post" role="form">
<?
       $t_gps   = intval($result['t_gps']); // t_gps - сколько GPS будет пытаться поймать координаты
       $p_wifi  = intval($result['p_wifi']); // p_wifi - период запросов координат по WI-Fi
       $p_gps   = intval($result['p_gps']); // p_gps - период запроса координат по GPS
       $p_send  = intval($result['p_send']); // p_send - период отправки пакетов на сервер
       $p_restart= intval($result['p_restart']); // p_restart - период перезапуска сервиса
?>
      <h4>Настройки Android <span class=" glyphicon glyphicon-phone"></span>: <?php echo  $result['name'].'('.$result['EMIE'].')'?></h4>

        <div class="form-group">
          <label for="inputEmail3" class="col-sm-7 control-label">сколько GPS будет пытаться поймать координаты </label>
          <div class="col-sm-3">
            <input type="text" class="form-control" value="<?php echo $t_gps?>" placeholder="120">
          </div>
          <div class="col-sm-3">120 сек</div>
        </div>
        <div class="form-group">
          <div class="col-sm-offset-2 col-sm-12">
            <button type="submit" id="save_setting"  class="btn btn-default">Изменить</button>
          </div>
        </div>
      </form>

вот как раз не могу разобраться как сделать

$( "#save_setting" ).on( "click", function() {
console.log($( "#setting_form" ).serialize());
    $.post( "update_user.php",$( "#setting_form" ).serialize(),function(data){    alert('Изменения сохранены');});
alert( $( this ).text() );
});


*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Re: Jquery обращение к элементам
« Ответ #6 : 28.08.2014, 17:40:58 »
Код
$( "#save_setting" ).on( "click", function() {
это что? :)
Код
$( "body" ).on( "click", "#save_setting button", function() {
*

Joker

  • Захожу иногда
  • 235
  • 3 / 0
Re: Jquery обращение к элементам
« Ответ #7 : 28.08.2014, 17:53:05 »
Код
$( "#save_setting" ).on( "click", function() {
это что? :)
Код
$( "body" ).on( "click", "#save_setting button", function() {

спасибо что поправили. а вот как  получить  console.log($( "#setting_form" ).serialize()); всеравно возращает пусто
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Re: Jquery обращение к элементам
« Ответ #8 : 28.08.2014, 18:01:22 »
я же писал, попробовать заменить на
Код
console.log($(this).parents('form').serialize());
хотя по идее и так должно работать
*

fsv

  • Живу я здесь
  • 2781
  • 411 / 2
Re: Jquery обращение к элементам
« Ответ #9 : 28.08.2014, 20:45:44 »
Код: javascript
$("body").on("click", "#save_setting button", function() {
замените на
Код: javascript
$("body").on("click", "#save_setting", function() {

Цитировать
хотя по идее и так должно работать
формы при загрузке кода еще не было.
попробуйте
Код: javascript
console.log( $("#setting").find('#setting_form').serialize() );

Веб-разработка: заказ. Только новая разработка.
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Re: Jquery обращение к элементам
« Ответ #10 : 28.08.2014, 23:40:08 »
 <input type="radio" name="accuracy" <?php if($accuracy==1){echo 'checked="checked"';}?> value="1"> Точно
      </label>
<label class="radio-inline">
   <input type="radio" name="accuracy" <?php if($accuracy==0){echo 'checked="checked"';}?> value="0"> Менее точно
</label>
выделил жирным и по ходу это ошибка одинаковое имя для полей можно использовать accuracy[]
Далее не старайтесь вешать события на body если есть id. Повесить проинициализировать после ответа можно
Код: javascript
$.post( "update_user.php",
$( "#setting_form" ).serialize(), //  у вас по сути одно поле {accuracy: $('input[name="accuracy"]').val())}
function(){
alert('Изменения сохранены');
$('#save_setting').on('click', function(){
console.log('ClickMe');
});
}
);
*

Joker

  • Захожу иногда
  • 235
  • 3 / 0
Re: Jquery обращение к элементам
« Ответ #11 : 29.08.2014, 05:12:01 »
ребят, я базовыми знаниями Jquery обладаю. но вот понять не могу почему не сробатывает
Код
console.log( $("#setting").find('#setting_form').serialize() );

возвращает пустую строку
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Jquery обращение к элементам
« Ответ #12 : 29.08.2014, 10:35:34 »
ребят, я базовыми знаниями Jquery обладаю. но вот понять не могу почему не сробатывает
Код
console.log( $("#setting").find('#setting_form').serialize() );

возвращает пустую строку
1. Для начала мы не знаем структуры всего документа!
2. Зачем вы в блоке с ID setting ищите форму с id setting_form ?
Просто сразу console.log( $('#setting_form').serialize() );
*

fsv

  • Живу я здесь
  • 2781
  • 411 / 2
Re: Jquery обращение к элементам
« Ответ #13 : 29.08.2014, 14:46:07 »
но вот понять не могу почему не сробатывает
возвращает пустую строку
глупый вопрос: а форма после первого клика в DOM добавляется?
просто в
Цитировать
файл погрузки формы редактирования настроек setting_user.php
не вижу, чтобы HTML формы передавался какой-либо переменной, которую и вернет первый аякс-запрос

Действительно, без сайта с изменениями и полным кодом файлов-обработчиков как-то не очень ясно.
Веб-разработка: заказ. Только новая разработка.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Не работают cookies с jquery

Автор Night_Pilgrim

Ответов: 14
Просмотров: 1547
Последний ответ 06.05.2015, 18:48:56
от Aleks.Denezh
jquery в Joomla

Автор spirit1086

Ответов: 1
Просмотров: 1020
Последний ответ 05.02.2015, 07:32:26
от Arkadiy
Обращение к БД

Автор Beton-Karton

Ответов: 5
Просмотров: 1260
Последний ответ 24.11.2014, 22:32:53
от b2z
Подключить jquery

Автор Noraad

Ответов: 4
Просмотров: 1210
Последний ответ 03.11.2014, 15:30:13
от AlekVolsk
Jquery. $(document).ready(function(){}) в разных браузерах

Автор Виталик

Ответов: 0
Просмотров: 3910
Последний ответ 11.05.2009, 22:44:23
от Виталик