Новости 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 Ответов
  • 1304 Просмотров
*

lordics

  • Осваиваюсь на форуме
  • 15
  • 0 / 0
Сеcсии в Joomla 3.x
« : 06.10.2015, 13:36:44 »
День добрый господа программисты.У меня есть тестовая страничка тестирования всяких функции сессии и т.д столкнулся я вот с такой проблемой после авторизации,  вставил код на тестовой страничке $user = &JFactory::getUser(); $id = $user->id; echo $id;
а id пользователя не вывелось в чем может быть причина и где ее искать.. Я только начинающий программист. За ранее огромное спасибо...   
*

NewUsers

  • Живу я здесь
  • 2310
  • 216 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: Сеcсии в Joomla 3.x
« Ответ #1 : 06.10.2015, 13:45:36 »
вставил код на тестовой страничке $user = &JFactory::getUser(); $id = $user->id; echo $id;
а id пользователя не вывелось в чем может быть причина и где ее искать.. Я только начинающий программист. За ранее огромное спасибо...   

Если эта страница ни как не относиться к Joomla, то этот код не будет работать... Подключи этот файл к джумловским файлам с помощью
Код
require_once

что бы выполнить этот код!
Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

lordics

  • Осваиваюсь на форуме
  • 15
  • 0 / 0
Re: Сеcсии в Joomla 3.x
« Ответ #2 : 06.10.2015, 14:01:42 »
а как правильно его подключить вот код моей странички
<?php

defined('_JEXEC') or die;
$user = &JFactory::getUser(); $id = $user->id; echo $id;
?>
*

NewUsers

  • Живу я здесь
  • 2310
  • 216 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: Сеcсии в Joomla 3.x
« Ответ #3 : 06.10.2015, 14:14:52 »
а как правильно его подключить вот код моей странички
<?php

defined('_JEXEC') or die;
$user = &JFactory::getUser(); $id = $user->id; echo $id;
?>

Этот файл надо подключать в джумловских файлах...

К примеру, если мне надо этот файл подключить к модулю формы входа....
Значит открываю файл: mod_login.php (\modules\mod_login)

в любое место добавляю...
Код
require_once __DIR__ . '/file_php.php';
Значит что файл file_php.php должен находится там же где и файл mod_login.php
И в этом файле у меня содержиться код
Код
<?php
defined('_JEXEC') or die;
$user = JFactory::getUser();
echo $user->id;
?>





Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

lordics

  • Осваиваюсь на форуме
  • 15
  • 0 / 0
Re: Сеcсии в Joomla 3.x
« Ответ #4 : 06.10.2015, 14:24:38 »
я Вас правильно понял require_once __DIR__ . '/имя моего файла.php'; я его должен поместить в в папку mod_login
*

NewUsers

  • Живу я здесь
  • 2310
  • 216 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: Сеcсии в Joomla 3.x
« Ответ #5 : 06.10.2015, 14:27:27 »
я Вас правильно понял require_once __DIR__ . '/имя моего файла.php'; я его должен поместить в в папку mod_login

Да. Но что бы не путаться.
Файл который подключается должен быть там же где и файл в котором подключается этот же файл...
"Волшебные" константы
Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

lordics

  • Осваиваюсь на форуме
  • 15
  • 0 / 0
Re: Сеcсии в Joomla 3.x
« Ответ #6 : 06.10.2015, 15:03:11 »
да он вывел id но мне нужно чтоб не в модуле выводился а на другой страничке
и можно ли это все переделать на php сессию допустим в файле тестовом создаем код
<?php
defined('_JEXEC') or die;
session_start();
$user = JFactory::getUser();
$user= $user->id;
$_SESSION['id'] = $user;
?>
и допустим будет материал личные данные и мы вставляем нашу сессию. так как в материалах нельзя вставлять php код я установил дополнительный модуль source при помощи него можно вставлять php кода.
дальше в нашем материале вставим вот такой код
{source}
<?php
session_start();
$res = mysql_query("SELECT *FROM jos_users WHERE id={$_SESSION ['id']} ",$db);
$row = mysql_fetch_array($res)
echo 'Ваш ID:' echo $row[id];
echo 'Ваше Имя:' echo $row[name];
echo 'Ваш email:' echo $row[email];
?>
{/source}
*

NewUsers

  • Живу я здесь
  • 2310
  • 216 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: Сеcсии в Joomla 3.x
« Ответ #7 : 06.10.2015, 15:10:57 »
и можно ли это все переделать на php сессию допустим в файле тестовом создаем код

Я же написал что к примеру!
Эту схему можно использовать где угодно...

и допустим будет материал личные данные и мы вставляем нашу сессию.

Да нафига вообще эта сессия. Что она даст?
Еще раз... И подробнее что надо сделать и где!
По моему примеру получилось вывести id пользователя?
Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

lordics

  • Осваиваюсь на форуме
  • 15
  • 0 / 0
Re: Сеcсии в Joomla 3.x
« Ответ #8 : 06.10.2015, 15:26:13 »
да получилось вывести. есть личный кабинет  в нем есть меню и там есть материал личные данные  вот там и нужно вывести всю информацию пользователя
а сессия нужно чтоб ее можно было использовать где угодно пока юзер авторизирован. и в дальнейшем нужно будет делать различные модернизации анкеты 
*

NewUsers

  • Живу я здесь
  • 2310
  • 216 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Re: Сеcсии в Joomla 3.x
« Ответ #9 : 06.10.2015, 15:31:42 »
есть личный кабинет  в нем есть меню и там есть материал личные данные

Мне даже страшно представить что ты там делаешь...
Ты используешь материал в виде личного кабинета?
А не пробовал использовать для этого компоненты...
Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

lordics

  • Осваиваюсь на форуме
  • 15
  • 0 / 0
Re: Сеcсии в Joomla 3.x
« Ответ #10 : 06.10.2015, 17:52:40 »
я начинающий программист подскажи если знаешь такой компонент. у меня было в плане написать компонент но это уже по по же как изучу программирования на joomle
 
*

lordics

  • Осваиваюсь на форуме
  • 15
  • 0 / 0
Re: Сеcсии в Joomla 3.x
« Ответ #11 : 07.10.2015, 17:53:25 »
так можно что то сделать с сессией
<?php
defined('_JEXEC') or die;
session_start();
$user = JFactory::getUser();
$user= $user->id;
$_SESSION['id'] = $user;
?>


{source}
<?php
session_start();
$res = mysql_query("SELECT *FROM jos_users WHERE id={$_SESSION ['id']} ",$db);
$row = mysql_fetch_array($res)
echo 'Ваш ID:' echo $row[id];
echo 'Ваше Имя:' echo $row[name];
echo 'Ваш email:' echo $row[email];
?>
{/source}
*

passer

  • Завсегдатай
  • 1013
  • 75 / 3
Re: Сеcсии в Joomla 3.x
« Ответ #12 : 07.10.2015, 22:01:43 »
{source}
Код: php
<?php
    /* Initialize Joomla framework */
    if (!defined('_JEXEC')) {
        define( '_JEXEC', 1 );
        define('JPATH_BASE', $_SERVER['DOCUMENT_ROOT']);
        define( 'DS', DIRECTORY_SEPARATOR );
        /* Required Files */
        require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
        require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
        /* To use Joomla's Database Class */
        require_once ( JPATH_BASE .DS.'libraries'.DS.'joomla'.DS.'factory.php' );        
        /* Create the Application */
        $app = JFactory::getApplication('site')->initialise();
    }

$user = JFactory::getUser();
if($user->id){
echo 'Ваш ID: ' . $user->id . '<br />' .
'Ваше Имя: ' . $user->username. '<br />' .
'Ваш email: ' . $user->email;
}else{
echo 'Вы не авторизованы';
}
{/source}
« Последнее редактирование: 07.10.2015, 22:05:13 от passer »
*

lordics

  • Осваиваюсь на форуме
  • 15
  • 0 / 0
Re: Сеcсии в Joomla 3.x
« Ответ #13 : 07.10.2015, 23:21:41 »
Спасибо за помощь.. Я немного другим способом решил. Но и ваш хорош.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Условия отображения для конкретной группы пользователей Joomla 3.4.x

Автор dmik

Ответов: 15
Просмотров: 3233
Последний ответ 29.05.2020, 22:42:15
от voland
Подключить Joomla Framework в своем файле

Автор kolhoz

Ответов: 1
Просмотров: 1777
Последний ответ 06.12.2017, 17:15:42
от Aleks.Denezh
Переделать запросы к БД под Joomla

Автор Glog

Ответов: 3
Просмотров: 1477
Последний ответ 03.07.2017, 17:53:28
от Glog
Поддержка Joomla в PhpStorm

Автор b2z

Ответов: 51
Просмотров: 11284
Последний ответ 28.12.2016, 23:31:39
от b2z
Joomla search tools

Автор jitendra

Ответов: 2
Просмотров: 1378
Последний ответ 15.12.2016, 17:13:15
от jitendra