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

Emotion

  • Захожу иногда
  • 101
  • 0 / 0
Привет, делал ли кто то следующую задумку - При клике на Читать далее... статья откриваеться в модальном поп-ап окошке ?
Идея примерно такая же, как в админке кликнуть на кнопку предварительный "Просмотр" материала.
Суть сделать такое на фронтальной части сайта по клику на кнопку читать далее...


П.С. Есть много плагинов которые вываливают тебе странички в модальных окнах к примеру RokBox или Modalizer вот только не пойму ка их привинтить к кнопке "Читать далее" (Read More...)
« Последнее редактирование: 08.07.2010, 22:51:56 от Emotion »
*

Emotion

  • Захожу иногда
  • 101
  • 0 / 0
Re: Читать далее + Modal Pop-up
« Ответ #1 : 08.07.2010, 13:25:51 »
Немножко прояснилось.
Добавил в index.php шаблона перед док-типом строчку <?php JHtml::_('behavior.modal', 'a.readon'); ?>
Уже вылазит окошко, но как сделать чтобы в это окошко не вгружался весь дизайн сайта а сугубо текст новости ?

П.С. как сделать ето окно допустим 800х600 размером ? ибо оно махинькое дефолтное.
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Re: Читать далее + Modal Pop-up
« Ответ #2 : 08.07.2010, 15:59:13 »
Чего-то перемудрил. Зачем цеплять лишний скрипт в шаблон? Есть же шаблонизация сom_content.
Пример для блога категории:
Смотрим
components\com_content\views\category\tmpl\blog_item.php либо этот же файл в шаблоне. Если в шаблоне нет, то желательно перенести его туда.
Добавляем в начало
Код: php
JHtml::_('behavior.modal', 'a.readon');
Дальше ищем "readmore_link" и меняем его примерно на такой
Код: php
	<a href="<?php echo $this->item->readmore_link.'&tmpl=component'; ?>" title="<?php echo $this->escape($this->item->title); ?>" class="readon<?php echo $this->escape($this->item->params->get('pageclass_sfx'));  ?>" rel="{size: {x: 800, y: 600}}">
*

Emotion

  • Захожу иногда
  • 101
  • 0 / 0
Re: Читать далее + Modal Pop-up
« Ответ #3 : 08.07.2010, 17:07:30 »
Проделал этот маленький хак с blog_item.php оно почему то контент вообще перестало вгружать :( и кажеться окошко модальное не приобретает размер 800х600 .. копаю дальше
« Последнее редактирование: 08.07.2010, 17:10:45 от Emotion »
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Re: Читать далее + Modal Pop-up
« Ответ #4 : 08.07.2010, 17:11:18 »
Проделал этот маленький хак с blog_item.php оно подтягивает дизайн сайта в модальное окно ? возможно с самого файла убрать все оставить только вызов модального окна и текста ?
я же тебе написал читай внимательней
Код
href="<?php echo $this->item->readmore_link.'&tmpl=component'; ?>
*

Emotion

  • Захожу иногда
  • 101
  • 0 / 0
Re: Читать далее + Modal Pop-up
« Ответ #5 : 08.07.2010, 17:20:37 »
Все понятно :) проблема была в ЧПУ. Неправильно генерироваться ссылка. Отключил ЧПУ и все заиграло. Приведется без ЧПУ.
вот такая вот ссылка генерировалась site.com/novostiv/pervaya.htm&tmpl=component соотвецтвенно ядро не понимало что от него хотят
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Re: Читать далее + Modal Pop-up
« Ответ #6 : 08.07.2010, 17:37:39 »
Все понятно :) проблема была в ЧПУ. Неправильно генерироваться ссылка. Отключил ЧПУ и все заиграло. Приведется без ЧПУ.
вот такая вот ссылка генерировалась site.com/novostiv/pervaya.htm&tmpl=component соотвецтвенно ядро не понимало что от него хотят
:)
что бы с роутером работало
замени в  components\com_content\views\category\view.html.php
function &getItem($index = 0, &$params)
Код
$item->readmore_link = JRoute::_(ContentHelperRoute::getArticleRoute($item->slug, $item->catslug, $item->sectionid));
на
Код
$item->readmore_link = JRoute::_(ContentHelperRoute::getArticleRoute($item->slug, $item->catslug, $item->sectionid).'&tmpl=component');
*

Emotion

  • Захожу иногда
  • 101
  • 0 / 0
Re: Читать далее + Modal Pop-up
« Ответ #7 : 08.07.2010, 18:09:32 »
Итак работающий фикс "Читать далее..." в "Модальном окошке"

1. Файл components\com_content\views\category\tmpl\blog_item.php
или лучше создать\править файл templates\ваш_шаблон\html\com_content\category\blog_item.php

1.1 В самом верху этого файла добавить строку
Код: php
<?php JHtml::_('behavior.modal', 'a.readon'); ?>
1.2 Найти и поменять строку
Код: php
<a href="<?php echo $this->item->readmore_link; ?>" class="readon<?php echo $this->escape($this->item->params->get('pageclass_sfx')); ?>">

на
Код: php
<a href="<?php echo $this->item->readmore_link; ?>" title="<?php echo $this->escape($this->item->title); ?>" class="readon<?php echo $this->escape($this->item->params->get('pageclass_sfx'));  ?>" rel="{size: {x: 640, y: 480}}">
(Где Х и Y соответственно ширина и высота модального окна )


2. Файл components\com_content\views\category\view.html.php поменять строку
Код: php
$item->readmore_link = JRoute::_(ContentHelperRoute::getArticleRoute($item->slug, $item->catslug, $item->sectionid));
на
Код: php
$item->readmore_link = JRoute::_(ContentHelperRoute::getArticleRoute($item->slug, $item->catslug, $item->sectionid).'&tmpl=component');

П.С. Большое спасибо великому Джадаю - SmokerMan

*

Deamelfuse

  • Осваиваюсь на форуме
  • 20
  • 0 / 0
RE: Читать далее + Modal Pop-up
« Ответ #8 : 23.05.2013, 00:04:28 »
Есть ли готовая реализация по Joomla 3?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Читать всем у кого белый экран!

Автор SmokerMan

Ответов: 583
Просмотров: 291100
Последний ответ 11.11.2022, 15:43:32
от goga_pgasovav
[Решено] Проблема с авторизацией Invalid Token

Автор treX

Ответов: 100
Просмотров: 96489
Последний ответ 06.10.2019, 16:55:45
от PaLyCH
Как сделать отображение третьего и далее уровней меню?

Автор Hloja_Blimm

Ответов: 12
Просмотров: 2152
Последний ответ 24.11.2017, 15:12:04
от Hloja_Blimm
Как проверить форму обратной связи [Решено]

Автор mafiozzzza

Ответов: 8
Просмотров: 6751
Последний ответ 30.05.2017, 11:34:11
от darkghost
[Решено] Проблемка с якорями

Автор yarikk

Ответов: 6
Просмотров: 1913
Последний ответ 25.11.2016, 02:02:57
от yarikk