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

p.g.

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
На главной странице у меня выводятся все последние сообщения из всех категорий. Если войти под своим именем, то появляется ссылка "Добавить новый материал в категорию". Все прекрасно работает, нареканий нет.

Проблема в том, что эта ссылка появляется только, когда человек уже зашел под своим именем. Необходимо сделать так, чтобы эта ссылка стояла всегда там, даже когда пользователь не авторизован. И если он кликает не авторизованным по этой ссылке - то выходит страница для ввода логина и пароля или регистрации (с надписью - для того, чтобы добавлять материалы - вы должны быть зарегистрированы). Если авторизован - то разумеется сразу страница для ввода материала.

Я так понимаю, вот код этой ссылки для добавления материала:
-------------------------------------------------------------
<!-- Category block -->
 <div class="itemListCategory">

 <?php if(isset($this->addLink)): ?>
 <!-- Item add link -->
 <span class="catItemAddLink">
 <a class="modal" rel="{handler:'iframe',size:{x:990,y:650}}" href="<?php echo $this->addLink; ?>">
 <?php echo JText::_('Add a new item in this category'); ?>
 </a>
 </span>
 <?php endif; ?>
------------------------------------------------------------

Подскажите, пожалуйста, как это реализовать... Вчера пол ночи просидел, так и не понял как сделать.
« Последнее редактирование: 16.08.2011, 06:22:21 от p.g. »
*

Dorfman

  • Завсегдатай
  • 1202
  • 78 / 4
  • Почти влез...
Как вариант - просмотрите html-код странички после авторизации и из строки, отвечающей за ссылку добавления, создайте пункт в главном меню (т.е. в самом модуле должен быть общий доступ) "ссылка", предварительно выставив в настройках "Показывать неавторизованные ссылки", и доступ к пункту меню "только для зарегенных". По логике так.
*

StarMag

  • Moderator
  • 228
  • 25 / 0
  • после ночи разбора РНР кода
Ссылка для добавления материала:
ваш_сайт/index.php?option=com_k2&view=item&task=add&tmpl=component
Но при этом, если человек не авторизирован будет давать 403 ошибку.
Тут походу модуль нужно переписывать...
« Последнее редактирование: 16.08.2011, 19:16:10 от StarMag »
Ну почему никто никогда не читает справочные материалы?...
*

p.g.

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
Цитировать
Как вариант - просмотрите html-код странички после авторизации и из строки, отвечающей за ссылку добавления, создайте пункт в главном меню (т.е. в самом модуле должен быть общий доступ) "ссылка", предварительно выставив в настройках "Показывать неавторизованные ссылки", и доступ к пункту меню "только для зарегенных". По логике так.

Создал пункт в главном меню. Скопировал текст ссылки (/index.php?option=com_k2&view=item&task=add&tmpl=component), создал пункт в главном меню с внешней ссылкой, куда прописал эту ссылку. Но вот в каких настройках найти "Показывать неавторизованные ссылки", и доступ к пункту меню "только для зарегенных" не совсем понятно. У меня Joomla 1.5

Может пойти от обратного. Пусть эта ссылка для добавления показывается только авторизованным пользователям. У неавторизованных там пустота.
Для незарегистрированного пользователя можно в этом же месте добавить ссылку "добавить пост", но чтобы она переводила на страницу для ввода логина и пароля и списком того, что человек получит зарегистрировавшись. А после того, как войдет под своим логином и паролем, чтобы скрывалась эта ссылка. А на ее месте появлялась действующая ссылка, которая сама по себе по входу появится в этом месте. Хотя чувствую не в те дебри полез.
*

StarMag

  • Moderator
  • 228
  • 25 / 0
  • после ночи разбора РНР кода
Создал пункт в главном меню. Скопировал текст ссылки (/index.php?option=com_k2&view=item&task=add&tmpl=component), создал пункт в главном меню с внешней ссылкой, куда прописал эту ссылку. Но вот в каких настройках найти "Показывать неавторизованные ссылки", и доступ к пункту меню "только для зарегенных" не совсем понятно. У меня Joomla 1.5

Может пойти от обратного. Пусть эта ссылка для добавления показывается только авторизованным пользователям. У неавторизованных там пустота.
Для незарегистрированного пользователя можно в этом же месте добавить ссылку "добавить пост", но чтобы она переводила на страницу для ввода логина и пароля и списком того, что человек получит зарегистрировавшись. А после того, как войдет под своим логином и паролем, чтобы скрывалась эта ссылка. А на ее месте появлялась действующая ссылка, которая сама по себе по входу появится в этом месте. Хотя чувствую не в те дебри полез.
В принципе то можно, небольшой рнр-скрипт наваять...
Ну почему никто никогда не читает справочные материалы?...
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как добавить свой класс для страниц вывода материалов по тегу k2?

Автор Slava77

Ответов: 0
Просмотров: 4078
Последний ответ 16.02.2023, 23:29:34
от Slava77
Как на странице автора K2 изменить title и description?

Автор Slava77

Ответов: 4
Просмотров: 2834
Последний ответ 26.12.2022, 21:11:51
от Slava77
Как добавить дополнительным полям K2 разные классы?

Автор Slava77

Ответов: 3
Просмотров: 2301
Последний ответ 06.06.2021, 22:36:00
от sivers
Как предпросматривать материалы в K2?

Автор Kijv

Ответов: 1
Просмотров: 993
Последний ответ 06.03.2021, 17:21:25
от v42bis
Материалы К2 долго грузятся

Автор Василий Ветров

Ответов: 9
Просмотров: 1364
Последний ответ 02.01.2020, 10:29:59
от draff