Новости 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 Гость просматривают эту тему.
  • 38 Ответов
  • 2814 Просмотров
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Код
Все доброе время суток, есть скрипт от робокассы с обработчиками. Вот пытаюсь его немного обернуть в модуль. И застрял на обработчиках ресзультатов. как верно обьявить переменную пароля которая у меня к примеру в XML обозначена как 
[code]<field name="mrh_pass1" type="text" size= "70"  label="ROBOKASSA_M_PASS"



                        description="ROBOKASSA_M_PASS" />
Пытаюсь пароль сменить чтоб он выводился с модуля а не просто паролем

В оригинале начинается скрипт с проверки пароля мерчанта:
$pass1 = "1234567890q";     я же пишу чтоб выводить его с параметров модуля

$pass1 = '<?php echo $mrh_pass1; ?>';   но он не видит пароль, тоесть пароль не передается с параметров модуля

Как его правельно обьявить...

Если обьявляю так:

<?
$mrh_pass1 = $params->get('mrh_pass1');
// регистрационная информация (пароль #1)
// registration info (password #1)


$pass1 = '<?php echo $mrh_pass1; ?>';

Получаю ошибку:

Fatal error: Call to a member function get() on a non-object in
[code<?

// регистрационная информация (пароль #1)
// registration info (password #1)
$pass1 = '<?php echo $mrh_pass1; ?>';
// чтение параметров
// read parameters
$out_summ = $_POST["OutSum"];
$inv_id = $_POST["InvId"];
$shp_art = $_POST["Shp_Art"];
$crc = $_POST["SignatureValue"];

$crc = strtoupper($crc);

$my_crc = strtoupper(md5("$out_summ:$inv_id:$pass1:Shp_Art=$shp_art"));

// проверка корректности подписи
// check signature
if ($my_crc != $crc)
{
  echo "bad sign\n";
  exit();
}

echo "YES";
?>

<?php



?>][/code]
« Последнее редактирование: 23.12.2014, 07:55:09 от jservice »
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Re: ОбЪявить переменную в модуле
« Ответ #1 : 23.12.2014, 07:49:06 »
Что не кто не знает...
*

midav

  • Давно я тут
  • 926
  • 115 / 1
Re: ОбЪявить переменную в модуле
« Ответ #2 : 23.12.2014, 09:49:13 »
А переменная params объявлена ?
Ответы на вопросы по CSS . Откройте для себя Firebug
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Re: ОбЪявить переменную в модуле
« Ответ #3 : 23.12.2014, 09:57:29 »
Объявлена... но че то не видит его

вот скрипт результа

Код

<?

// регистрационная информация (пароль #2)
// registration info (password #2)
$mrh_pass2 = $params->get('mrh_pass2');

$mrh_pass2 = "<?php echo $mrh_pass2; ?>";


$out_summ = $_POST["OutSum"];
$inv_id = $_POST["InvId"];
$shp_art = $_POST["Shp_Art"];
$crc = $_POST["SignatureValue"];


$crc = strtoupper($crc);

$my_crc = strtoupper(md5("$out_summ:$inv_id:$mrh_pass2:Shp_Art=$shp_art"));

// проверка корректности подписи
// check signature
if ($my_crc !=$crc)
{
  echo "bad sign\n";
  exit();
}

// признак успешно проведенной операции
echo "OK$inv_id\n";



mail(
"<?php echo $milo; ?>",
"Заказ был оплачен",
"Клиент оплатил на ".intval($_POST['OutSum'])." рублей",
$headers
);
?>

*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Re: ОбЪявить переменную в модуле
« Ответ #4 : 23.12.2014, 10:09:01 »
мистика какая то ... Объявляю но как об стенку...

Код
<?php

$mrh_pass2 = $params->get('mrh_pass2');


       

?>

Что может быть не так... Подскажите кто знает.
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Re: ОбЪявить переменную в модуле
« Ответ #5 : 23.12.2014, 14:02:56 »
мистика какая то ... Объявляю но как об стенку...
что объявляю, где объявляю? гадать будет?
хоть бы написали в каком файле это все делается
а так var_dump($params) в помощь, уверен что там будет null
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Re: ОбЪявить переменную в модуле
« Ответ #6 : 23.12.2014, 14:12:53 »
Да null,

скрипт оббработчиков робокассы запихиваю в модуль вот на результ не как не получается прописать в нем переменые на вывод параметров с XML, второй день топчусь не пойму почему не видит


вот скрипт : result.php

Код



<?php

$mrh_pass2 ="пароль";

$out_summ = $_POST["OutSum"];
$inv_id = $_POST["InvId"];
$shp_art = $_POST["Shp_Art"];
$crc = $_POST["SignatureValue"];


$crc = strtoupper($crc);

$my_crc = strtoupper(md5("$out_summ:$inv_id:$mrh_pass2:Shp_Art=$shp_art"));

// проверка корректности подписи
// check signature
if ($my_crc !=$crc)
{
  echo "bad sign\n";
  exit();
}

// признак успешно проведенной операции
echo "OK$inv_id\n";

?>
         
во второй строке нужно пароль выводить не с этого скрипта а с параметров модуля
вот пытаюсь вывести параметры модуля
Код



<?php
$mrh_pass2 ="<?php echo $mrh_pass2; ?>";

$out_summ = $_POST["OutSum"];
$inv_id = $_POST["InvId"];
$shp_art = $_POST["Shp_Art"];
$crc = $_POST["SignatureValue"];


$crc = strtoupper($crc);

$my_crc = strtoupper(md5("$out_summ:$inv_id:$mrh_pass2:Shp_Art=$shp_art"));

// проверка корректности подписи
// check signature
if ($my_crc !=$crc)
{
  echo "bad sign\n";
  exit();
}

// признак успешно проведенной операции
echo "OK$inv_id\n";

?>
         
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Re: ОбЪявить переменную в модуле
« Ответ #7 : 23.12.2014, 14:27:04 »
в mod_robokassa.php нормально все выводится, а в результ не могу передать параметры

Код
   

<?php

     $mrh_login = $params->get('login');
     $out_summ = $params->get('out_summ');
     $inv_id = $params->get('inv_id');
     $milo = $params->get('milo');
     $shp_art = $params->get('shp_art');
     $mrh_pass2 = $params->get('mrh_pass2');
     $mrh_pass1 = $params->get('mrh_pass1');

     $submit_text = $params->get('submit_text');
   

?>


<?php

$crc  = md5("$mrh_login:$out_summ:$inv_id:$mrh_pass1:Shp_Art=$shp_art");

?>




<form action='http://test.robokassa.ru/Index.aspx' method=POST>
 
      <input type=hidden name=MrchLogin value="<?php echo $mrh_login; ?>"/>
     <input type=hidden name=OutSum value="<?php echo $out_summ; ?>"/>
      <input type=hidden name=InvId value="<?php echo $inv_id; ?>"/>
      <input type=hidden name=Desc value="<?php echo $inv_desc; ?>"/>
      <input type=hidden name=SignatureValue value="<?php echo $crc; ?>"/>
      <input type=hidden name=Shp_Art value="<?php echo $shp_art; ?>"/>
<input type=hidden name=IncCurrLabel value="<?php $in_curr; ?>"/>
      <input type=hidden name=Culture value="<?php $culture = "ru"; ?>"/>
     <div class ="heights"></div>
                    <input type="submit"  class="btn" value="<?php echo $submit_text; ?>" />
</form>






*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: ОбЪявить переменную в модуле
« Ответ #8 : 23.12.2014, 14:32:33 »
Ну а как по Вашему пароль передастся сторонний файл? С неба что ли туда упадет? И $params доступны только из под модуля.
Тащите из базы параметры модуля, они хранятся в поле params модкля, таблица extensions. А лучше вообще нативно в самом модуле все сделать...
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Re: ОбЪявить переменную в модуле
« Ответ #9 : 23.12.2014, 14:37:24 »
но они же есть в mod_robokassa.php или я что то не так понимаю.Почему в mod_robokassa.php работают а в другой скрипт их не получается вывести тот же пароль объвлен в mod_robokassa.php
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Re: ОбЪявить переменную в модуле
« Ответ #10 : 23.12.2014, 14:52:34 »
но они же есть в mod_robokassa.php или я что то не так понимаю.Почему в mod_robokassa.php работают а в другой скрипт их не получается вывести тот же пароль объвлен в mod_robokassa.php

Тащите из базы параметры модуля, они хранятся в поле params модкля, таблица extensions. А лучше вообще нативно в самом модуле все сделать...
, они хранятся в поле params модкля, таблица extensions.
[/quote]

Нету параметров в бд для этого модуля только все что с параметров это []

А как нативно не кините ссылочку на пример...
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Re: ОбЪявить переменную в модуле
« Ответ #11 : 23.12.2014, 14:59:52 »
Нативно это типа управление модулем через админку, так оно так и есть если я правельно понимаю слово нативно

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

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Re: ОбЪявить переменную в модуле
« Ответ #12 : 23.12.2014, 15:05:12 »
но они же есть в mod_robokassa.php или я что то не так понимаю.Почему в mod_robokassa.php работают а в другой скрипт их не получается вывести тот же пароль объвлен в mod_robokassa.php
потому что это другой скрипт :)

Вообще такие вещи желательно делать через компонент, а не модуль

Но как вариант можно и через модуль
в качестве callback URL указать тот же URL, где опубликован этот модуль
в форму
Цитировать
<form action='http://test.robokassa.ru/Index.aspx' method=POST>
добавить дополнительный параметр
в том же mod_robokassa.php проверять этот параметр и в зависимости от него чего-то там делать
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: ОбЪявить переменную в модуле
« Ответ #13 : 23.12.2014, 15:47:09 »
У Вас мухи с котлетами. Joomla работает в собственном окружении, она ничего не знает о Вашем скрипте.

Цитировать
Параметры заносятся в модуле через панель управления
Цитировать
Нету параметров в бд для этого модуля только все что с параметров это []
Хмм, странно. Где же модуль тогда хранит эти параметры?
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Re: ОбЪявить переменную в модуле
« Ответ #14 : 24.12.2014, 10:00:45 »
А как же обьявить тогда параметры модуля в скрипте в той же папке модуля. Не как не получается обработчики засунуть в один файл модуля, а если обработчик отдельно то не видит параметров.Жесть.
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Re: ОбЪявить переменную в модуле
« Ответ #15 : 24.12.2014, 12:09:58 »
А как же обьявить тогда параметры модуля в скрипте в той же папке модуля. Не как не получается обработчики засунуть в один файл модуля, а если обработчик отдельно то не видит параметров.Жесть.
У Вас мухи с котлетами. Joomla работает в собственном окружении, она ничего не знает о Вашем скрипте.
Хмм, странно. Где же модуль тогда хранит эти параметры?
У Вас мухи с котлетами. Joomla работает в собственном окружении, она ничего не знает о Вашем скрипте.
Хмм, странно. Где же модуль тогда хранит эти параметры?

Нашел строку с параметрами модуля в бд, вчера через мускуль смотрел не увидел. Есть параметры модуля в бд. Не подскажет примерчик как сделать вывод данных.Хотя бы строчку для примера.
Вот параметры :
 'Module RoboKassa', '', '', 1, 'top-a', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_robokassa', 1, 1, '{"pole1":"","pole2":"","pole3":"","pole4":"","pole5":"","pole6":"","pole7":"","pole8":"","pole9":"","pole10":"","pole_name11"mrh_login":"login","mrh_pass1":"x199999","mrh_pass2":"x995A5","out_summ":"299","inv_id":"","inv_desc":"
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Re: ОбЪявить переменную в модуле
« Ответ #16 : 24.12.2014, 12:52:18 »
Код
define('_JEXEC', 1);

define('JPATH_BASE', dirname(__FILE__)); // указать путь до корня

require_once (JPATH_BASE . '/includes/defines.php');
require_once (JPATH_BASE . '/includes/framework.php');

$app = JFactory::getApplication('site');

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('params');
$query->from('#__modules');
$query->where('module = ' . $db->quote('mod_robokassa'));
$db->setQuery($query);
$params = $db->loadResult();

$params = json_decode($params);

die( var_dump($params) );

а так это через жопу)
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Re: ОбЪявить переменную в модуле
« Ответ #18 : 24.12.2014, 13:02:44 »
Ругается...

Fatal error: require_once(): Failed opening required '/home/сайт/modules/mod_robokassa/includes/defines.php' (include_path='.:/usr/local/pear') in /home/сайт/modules/mod_robokassa/mod_rxc.php on line 7
« Последнее редактирование: 24.12.2014, 13:21:00 от jservice »
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Re: ОбЪявить переменную в модуле
« Ответ #19 : 24.12.2014, 13:51:00 »
Цитировать
define('JPATH_BASE', dirname(__FILE__)); // указать путь до корня
читать умеем?
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Re: ОбЪявить переменную в модуле
« Ответ #20 : 24.12.2014, 14:35:18 »
Спасибо, читал комментарий, не пойму что за путь указать...типа полный путь на хостинге? И к чему путь?

Туплю я по походу - но не пойму  указать путь до корня  до какого корня?
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Re: ОбЪявить переменную в модуле
« Ответ #21 : 24.12.2014, 19:55:30 »
Разобрался, прописал так :

Код
define('_JEXEC', 1);
define('DS', DIRECTORY_SEPARATOR);
define( 'JPATH_BASE', __DIR__ . '/../../' );
//define('JPATH_BASE', dirname(__FILE__) );//Путь к корню Joomla
 require_once JPATH_BASE . '/includes/defines.php';

require_once JPATH_BASE . '/includes/framework.php';
но теперь ругается видно на метод вывода параметров  

Fatal error: Call to undefined method stdClass::get() in

После того как убрал последнюю строку

die( var_dump($params) );

вот как начинается скрипт сейчас:
Код
<?

define('_JEXEC', 1);
define('DS', DIRECTORY_SEPARATOR);
define( 'JPATH_BASE', __DIR__ . '/../../' );
//define('JPATH_BASE', dirname(__FILE__) );//Путь к корню Joomla
 require_once JPATH_BASE . '/includes/defines.php';

require_once JPATH_BASE . '/includes/framework.php';


$app = JFactory::getApplication('site');

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('params');
$query->from('#__modules');
$query->where('module = ' . $db->quote('mod_robokassa'));
$db->setQuery($query);
$params = $db->loadResult();

$params = json_decode($params);


 
$mail_to = $params->get('mail_to');

Что я не так сделал подскажите если не тяжело
« Последнее редактирование: 24.12.2014, 20:37:09 от jservice »
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: ОбЪявить переменную в модуле
« Ответ #22 : 25.12.2014, 10:28:16 »
$params не объект с методом get()...

http://php.net/manual/ru/function.json-decode.php
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Re: ОбЪявить переменную в модуле
« Ответ #23 : 25.12.2014, 10:33:23 »
Вот что я получаю при запуске скрипта

Код
object(stdClass)#26 (35) { ["pole1"]=> string(0) "" ["pole2"]=> string(0) "" ["pole3"]=> string(0) "" ["pole4"]=> string(0) "" ["pole5"]=> string(0) "" ["pole6"]=> string(0) "" ["pole7"]=> string(0) "" ["pole8"]=> string(0) "" ["pole9"]=> string(0) "" ["pole10"]=> string(0) "" ["pole_name11"]=> string(36) "Название этого поля" ["pole11"]=> string(0) "" ["placeholder11"]=> string(13) "ПРИМЕР:" ["pole12"]=> string(0) "" ["pole13"]=> string(0) "" ["pole14"]=

и сам скрипт

Код
<?

define('_JEXEC', 1);
define('DS', DIRECTORY_SEPARATOR);
define( 'JPATH_BASE', __DIR__ . '/../../' );

 require_once JPATH_BASE . '/includes/defines.php';

require_once JPATH_BASE . '/includes/framework.php';


$app = JFactory::getApplication('site');

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('params');
$query->from('#__modules');
$query->where('module = ' . $db->quote('mod_robokassa'));
$db->setQuery($query);
$params = $db->loadResult();

$params = json_decode($params);
die( var_dump($params) );




 $mail_to = $params->get('mail_to');
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Re: ОбЪявить переменную в модуле
« Ответ #24 : 25.12.2014, 10:37:00 »
получается что параметры вывелись  var_dump($params);  это показывает, но всеровно  не работает
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Re: ОбЪявить переменную в модуле
« Ответ #25 : 25.12.2014, 12:27:31 »
Господа ну подскажите что не так почему не получается запустить скрипт нормально в окружении...
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Re: ОбЪявить переменную в модуле
« Ответ #26 : 25.12.2014, 12:28:27 »
читать умеем?

Читать то умеем но скрипт не работаем
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: ОбЪявить переменную в модуле
« Ответ #27 : 25.12.2014, 14:13:46 »
$params = new JRegistry($params);
$mail_to = $params->get('mail_to');
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Re: ОбЪявить переменную в модуле
« Ответ #28 : 25.12.2014, 14:47:07 »
Работает, очень благодарен за помощ...
*

jservice

  • Захожу иногда
  • 118
  • 1 / 0
Re: ОбЪявить переменную в модуле
« Ответ #29 : 25.12.2014, 14:49:33 »
$params не объект...

http://php.net/manual/ru/function.json-decode.php

Не кидайтесь умными фразами, если не хотите помоч то просто пройдите мимо... От того что вы подсказали мануал мне легче нес тало. А всем остальным реально большое спасибо за помощ.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Подключение сторонних библиотек в модуле J4

Автор denism300

Ответов: 6
Просмотров: 836
Последний ответ 30.12.2022, 19:58:09
от denism300
Рекурсия в модуле

Автор alpha_ru

Ответов: 19
Просмотров: 1874
Последний ответ 20.07.2017, 19:25:11
от passer
Дополнительное поле в модуле

Автор paskal

Ответов: 21
Просмотров: 2623
Последний ответ 27.08.2016, 00:59:55
от robert
Запись в БД из формы в плагине (модуле). Как!

Автор Sergeyy

Ответов: 13
Просмотров: 1591
Последний ответ 13.11.2015, 11:01:18
от Sergeyy
Ошибка 1005 при sql-запросах в своем модуле

Автор dv-cto

Ответов: 2
Просмотров: 1601
Последний ответ 07.02.2015, 21:30:50
от dv-cto