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

marbert

  • Захожу иногда
  • 417
  • 9 / 0
возникла ситуация, необходимо запретить автору нессанкционировано менять свой материал - как?

другими словами, никакой самодеятельности без ведома администратора.
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Ту тему бахнули вот это подойдет http://joomlaforum.ru/index.php/topic,32718.0.html
*

marbert

  • Захожу иногда
  • 417
  • 9 / 0
Ту тему бахнули вот это подойдет http://joomlaforum.ru/index.php/topic,32718.0.html

упс.... но в content.php нет таких строк, о которых пишет smart...
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Потому что это для 1.0  ;D я не знаю почему бахнули тему, но тема была это точно и я отвечал как это сделать. Если никто не ответить позже напишу как сделать.
*

marbert

  • Захожу иногда
  • 417
  • 9 / 0
Потому что это для 1.0  ;D я не знаю почему бахнули тему, но тема была это точно и я отвечал как это сделать. Если никто не ответить позже напишу как сделать.
а без хака, выходит, никак?

т.е., нет плагина какого для регистрации CB?
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Итак два варианта 1 сложный, второй простой
1. Вообщем я тогда предлагал изменить немного шаблон вывода материала. Допустим у нас есть блог категории берем файл components\com_content\views\blog_item.php находим в нем
Код
<?php $canEdit   = ($this->user->authorize('com_content', 'edit', 'content', 'all') || $this->user->authorize('com_content', 'edit', 'content', 'own')); ?>
и меняем на
Код
<?php $canEdit   = ($this->user->authorize('com_content', 'edit', 'content', 'all')); ?>
Ну и так с шаблонами вывода остального (материала и т.д.) подробнее читаем это Меняем вид вывода контена!
Это уберет иконку, но не спасет от ссылки на редактирование (view=article&id=IDматериала&task=edit&option=com_content) хотя она типа шифруется добавляется всякая хренатень типа "%3Afdgdfgdfg" и т.п, но это все до лампочки :). Так вот что бы злые звери не могли отредактировать надо закомментировать или удалить еще строчку в components\com_content\controller.php
Код
function edit()
{
$user =& JFactory::getUser();

// Create a user access object for the user
$access = new stdClass();
$access->canEdit = $user->authorize('com_content', 'edit', 'content', 'all');
//$access->canEditOwn = $user->authorize('com_content', 'edit', 'content', 'own'); Эту строчку комментируем.

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

2. А забыл еще есть более радикальный метод с com_content\helpers\icon.php можно тупо его переименовать в icon2.php, но тогда у вас упадут все иконки PDf и т.д.

Либо меняем в com_content\helpers\icon.php
Код
if (!$access->canEdit && !($access->canEditOwn && $article->created_by == $user->get('id'))) {
return;
}
на
Код
if (!$access->canEdit) {
return;
}
И все должно работать. Да уж лучше одну строчку поменять в одном файле чем в пяти :)
Только после обновления не надо забывать меняется этот файл или нет.

Вообщем все рассказал пишите, если что не так.
« Последнее редактирование: 04.03.2009, 15:05:02 от SmokerMan »
*

marbert

  • Захожу иногда
  • 417
  • 9 / 0
Итак два варианта 1 сложный, второй простой
хм, решения серьезные и не однозначные...

ты можешь помочь в вопросе с Profile Manager (PROMA)?
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
хм, решения серьезные и не однозначные...
Однозначные  8) Ибо еще не нашлись товарищи которые помогут по данному вопросу. За советами можно обратиться на оф. форум поддержки (англ.)  ;) Если что найдете по этой теме пишите здесь. Пока это просто мое мнение. Вы задали вопрос я на него ответил.
Если вы попробовали то что я написал и у вас это не получилось, так и скажите в чем заключается проблема? А по поводу сомнительно или нет это уж ... б дальше писать не хочу

По поводу личного сообщения ничем помочь не могу!

500 цука набил  *DRINK*
« Последнее редактирование: 05.03.2009, 00:38:11 от SmokerMan »
*

marbert

  • Захожу иногда
  • 417
  • 9 / 0
Однозначные  8) Ибо еще не нашлись товарищи которые помогут по данному вопросу. За советами можно обратиться на оф. форум поддержки (англ.)  ;) Если что найдете по этой теме пишите здесь. Пока это просто мое мнение. Вы задали вопрос я на него ответил.
Если вы попробовали то что я написал и у вас это не получилось, так и скажите в чем заключается проблема? А по поводу сомнительно или нет это уж ... б дальше писать не хочу

По поводу личного сообщения ничем помочь не могу!

500 цука набил  *DRINK*
нет, вопрос не в том, что Ваш совет не пригодился или еще что, вопрос в том, что когда речь шла о J1.0 и в ней нужно было изменить 2 строки в одном файле - это одно, а в случае с J1.5 - как Вы сами сказали "Да уж лучше одну строчку поменять в одном файле чем в пяти" - и при этом "Но с этим вариантом там у ребят какие-то проблемы или непонятки были" - сами понимаете...

Поскольку, речь не о персональной страничке, рисковать стремно... Признаюсь, очень удивлен, ПОЧЕМУ такая простая функция не решена joomla.org изначально, чтобы безо всяких хаков и т.п. - ведь вопрос банальный...

В любом случае, Вам, SmokerMan, спасибо за предложение!
*

koN

  • Захожу иногда
  • 103
  • 7 / 0
Всё, нашел, как повторить метод Smarta в Joomla 1.5.

components\com_content\views\

В папках (кроме архивной) найти файлы "view.html.php" и заменить в них строки:

$access->canEdit = $user->authorize('com_content', 'edit', 'content', 'all');
$access->canEditOwn   = $user->authorize('com_content', 'edit', 'content', 'own');

На:

$access->canEdit = false;
$access->canEditOwn = false;
« Последнее редактирование: 29.07.2009, 08:34:59 от koN »
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Всё, нашел, как повторить метод Smarta в Joomla 1.5.

components\com_content\views\

В папках (кроме архивной) найти файлы "view.html.php" и заменить в них строки:

$access->canEdit = $user->authorize('com_content', 'edit', 'content', 'all');
$access->canEditOwn   = $user->authorize('com_content', 'edit', 'content', 'own');

На:

$access->canEdit = false;
$access->canEditOwn = false;

При таком раскладе иконка пропадет у всех, в том числе и у админа. Тогда уже лучше оставить $access->canEdit как был.
И вообще этот вариант лучше не использовать, т.к. это делается не на уровне шаблона.
И зачем опять же менять в 4-х файлах, когда все можно сделать в одном icon.php?
*

koN

  • Захожу иногда
  • 103
  • 7 / 0
При таком раскладе иконка пропадет у всех, в том числе и у админа.

Согласен, просто мне надо было отключить редактирование с фронтенда для всех групп. Но ведь и у Смарта для Joomla 1.0 аналогично.

И зачем опять же менять в 4-х файлах, когда все можно сделать в одном icon.php?

В icon.php Вы только иконку отключаете, а смартовским методом - доступ к функции редактирования, или я что-то неправильно понимаю?
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Я не знаю что там за  метод Смарта.
Но этим я думаю тоже много не добьетесь.
Проще убрать строчку из libraries\joomla\user\authorization.php
Код
$this->addACL( 'com_content', 'edit', 'users', 'author', 'content', 'own' );
*

koN

  • Захожу иногда
  • 103
  • 7 / 0
Я не знаю что там за  метод Смарта.

http://joomlaforum.ru/index.php/topic,32718.0.html

Но этим я думаю тоже много не добьетесь.

Какие могут быть проблемы?
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Какие могут быть проблемы?
Да проблем собственно не каких и нет :)
Разговор не о чем. Вашим методом точно так же скрывается иконка на редактирование материала, а если пройти по нужной ссылочке
Код
?view=article&id=IDМАТЕРИАЛА&task=edit&option=com_content
то его все равно можно отредактировать.
Если хотите от этого избавиться делайте как я написал в предыдущем посте.
*

koN

  • Захожу иногда
  • 103
  • 7 / 0
Да проблем собственно не каких и нет :)
Разговор не о чем. Вашим методом точно так же скрывается иконка на редактирование материала, а если пройти по нужной ссылочке
Код
?view=article&id=IDМАТЕРИАЛА&task=edit&option=com_content
то его все равно можно отредактировать.
Если хотите от этого избавиться делайте как я написал в предыдущем посте.

Что ж, справедливо, принимается. Больше в этом файле ничего не надо менять?
*

virusnumber9

  • Захожу иногда
  • 72
  • 0 / 0
  • Творец!
Цитата: SmokerMan
Если хотите от этого избавиться делайте как я написал в предыдущем посте.

Тогда "авторы" не могут добавлять ничего
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Тогда "авторы" не могут добавлять ничего
что значит не могут?
причем здесь редактирование и добавление?
*

virusnumber9

  • Захожу иногда
  • 72
  • 0 / 0
  • Творец!
"Авторы" не могут добавлять ничего, тогда что они будут редактировать? Материал не добавляется
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
"Авторы" не могут добавлять ничего, тогда что они будут редактировать? Материал не добавляется
действительно, наверное не могут, давно тема была и всплыла тут :)
components\com_content\controller.php добавляем
Цитировать
function save()
...

      $access->canPublish      = $user->authorize('com_content', 'publish', 'content', 'all');
      $access->canADD      = $user->authorize('com_content', 'add', 'content', 'all');

      if (!($access->canEdit || $access->canEditOwn || $access->canADD)) {
         JError::raiseError( 403, JText::_("ALERTNOTAUTH") );
      }
пробуем.
*

virusnumber9

  • Захожу иногда
  • 72
  • 0 / 0
  • Творец!
Просто удалить строчку "|| $access->canEditOwn" ? Или чет я не понял...
« Последнее редактирование: 04.11.2010, 11:02:54 от virusnumber9 »
*

lustoff

  • Захожу иногда
  • 137
  • 4 / 1
Здравствуйте!
Подскажите, пожалуйста, можно ли ограничить возможность редактирования по времени. Чтобы Авторы могли редактировать свои материалы в течении суток, скажем, а после этого такая возможность бы пропадала?
Спасибо.
*

lustoff

  • Захожу иногда
  • 137
  • 4 / 1
Что, совсем никак  :o?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться