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

Grigory S.

  • Давно я тут
  • 658
  • 70 / 0
  • (с)
Добрый день, есть ли какие-нибудь методы кропа изображений от центра согласно размерам в модуле новостей?
Плагины которые нашел работают с новостями, но не с модулем. Или может в Joomla есть какой-нибудь метод для обработки изображений непосредственно в файле шаблона модуля(mod_articles_category\tmpl\default.php)... Заранее спасибо!
Не задав правильный вопрос, невозможно получить правильный ответ.
Для "спасибок" существует кнопочка "+".
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
http://ссылка вырезана, так как домен распространяет вирусы/blog/joomla/rabota-s-izobrazheniyami-v-joomla-jimage
*

Grigory S.

  • Давно я тут
  • 658
  • 70 / 0
  • (с)
Такс, нашел вот такую штуку, http://api.joomla.org/Joomla-Platform/Image/JImage.html
Вроде бы то что нужно, но тут опять грабли, в файле mod_articles_news\tmpl\_item.php вижу
Код
<?php
defined('_JEXEC') or die;
$item_heading = $params->get('item_heading', 'h4');
?>
<?php if ($params->get('item_title')) : ?>

<<?php echo $item_heading; ?> class="newsflash-title<?php echo $params->get('moduleclass_sfx'); ?>">
<?php if ($params->get('link_titles') && $item->link != '') : ?>
<a href="<?php echo $item->link;?>">
<?php echo $item->title;?></a>
<?php else : ?>
<?php echo $item->title; ?>
<?php endif; ?>
</<?php echo $item_heading; ?>>

<?php endif; ?>

<?php if (!$params->get('intro_only')) :
echo $item->afterDisplayTitle;
endif; ?>

<?php echo $item->beforeDisplayContent; ?>

<?php echo $item->introtext; ?>

<?php if (isset($item->link) && $item->readmore != 0 && $params->get('readmore')) :
echo '<a class="readmore" href="'.$item->link.'">'.$item->linkText.'</a>';
endif; ?>
изображения с которыми можно бы было поработать классом JImage обитают внутри $item->introtext; :( Как достучаться до картинок?
Не задав правильный вопрос, невозможно получить правильный ответ.
Для "спасибок" существует кнопочка "+".
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
*

fbr

  • Завсегдатай
  • 1672
  • 206 / 7
попробуйте так достучаться
Код: php
$images = json_decode($item->images);
$my_introimg = $images->image_intro;
*

Grigory S.

  • Давно я тут
  • 658
  • 70 / 0
  • (с)
попробуйте так достучаться
Код: php
$images = json_decode($item->images);
$my_introimg = $images->image_intro;
echo $my_introimg;
Ничего не выводит :(

регулярными выражениями если в тексте картинки
http://dreamhelg.ru/2010/02/15-regular-expression-for-web-developers/

В php не силен, вот взял по вашей ссылке регулярку
Код
$images = $item->introtext;
preg_match_all('/(img|src)=("|\')[^"\'>]+/i', $images, $media);
unset($images);
$data = preg_replace('/(img|src)("|\'|="|=\')(.*)/i', "$3", $media[0]);
print_r($media[0]);
выводит
Код
src="/images/news/6.jpg
почитал там же документацию, всё равно не получается отфильтровать src="
Не задав правильный вопрос, невозможно получить правильный ответ.
Для "спасибок" существует кнопочка "+".
*

fbr

  • Завсегдатай
  • 1672
  • 206 / 7
да не
Код: php
echo $my_introimg;
а
Код: php
 <img src="<?php echo htmlspecialchars($images->image_intro); ?>"
 alt="<?php echo htmlspecialchars($images->image_intro_alt); ?>"/>
я переменную ввел для примера. с ней работать. а выводить - так как написал выше
« Последнее редактирование: 06.11.2013, 15:01:06 от fbr »
*

Grigory S.

  • Давно я тут
  • 658
  • 70 / 0
  • (с)
да не
Код: php
echo $my_introimg;
а
Код: php
 <img src="<?php echo htmlspecialchars($images->image_intro); ?>"
 alt="<?php echo htmlspecialchars($images->image_intro_alt); ?>"/>
я переменную ввел для примера. с ней работать. а выводить - так как написал выше
ну да, я это понял, но переменная ничего в себе не содержит :(
выводит
Код
<img alt="" src="/">
Не задав правильный вопрос, невозможно получить правильный ответ.
Для "спасибок" существует кнопочка "+".
*

fbr

  • Завсегдатай
  • 1672
  • 206 / 7
а картинку для вступительного текста не забыли вставить в материал?
должно выводить!

*

Grigory S.

  • Давно я тут
  • 658
  • 70 / 0
  • (с)
а картинку для вступительного текста не забыли вставить в материал?
должно выводить!


Не забыл(
Не задав правильный вопрос, невозможно получить правильный ответ.
Для "спасибок" существует кнопочка "+".
*

fbr

  • Завсегдатай
  • 1672
  • 206 / 7
В файле _item.php сразу после

defined('_JEXEC') or die;

вставили?
Код: php
$images = json_decode($item->images);

проверьте правильность синтаксиса в коде.
У меня способ работает еще с 2.5
*

Grigory S.

  • Давно я тут
  • 658
  • 70 / 0
  • (с)
В файле _item.php сразу после

defined('_JEXEC') or die;

вставили?
Код: php
$images = json_decode($item->images);

проверьте правильность синтаксиса в коде.
У меня способ работает еще с 2.5

Жаль, но не работает :(  Но всё равно спасибо за помощь!
Код
<?php
/**
 * @package     Joomla.Site
 * @subpackage  mod_articles_news
 *
 * @copyright   Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;
$images = json_decode($item->images);

$item_heading = $params->get('item_heading', 'h4');
?>

<img src="<?php echo htmlspecialchars($images->image_intro); ?>"/>


<?php if ($params->get('item_title')) : ?>

<<?php echo $item_heading; ?> class="newsflash-title<?php echo $params->get('moduleclass_sfx'); ?>">
    <?php if ($params->get('link_titles') && $item->link != '') : ?>
<a href="<?php echo $item->link;?>">
<?php echo $item->title;?></a>
<?php else : ?>
<?php echo $item->title; ?>
<?php endif; ?>
</<?php echo $item_heading; ?>>

<?php endif; ?>

<?php if (!$params->get('intro_only')) :
echo $item->afterDisplayTitle;
endif; ?>

<?php echo $item->beforeDisplayContent; ?>

<?php echo $item->introtext; ?>

<?php if (isset($item->link) && $item->readmore != 0 && $params->get('readmore')) :
echo '<a class="readmore" href="'.$item->link.'">'.$item->linkText.'</a>';
endif; ?>
Не задав правильный вопрос, невозможно получить правильный ответ.
Для "спасибок" существует кнопочка "+".
*

fbr

  • Завсегдатай
  • 1672
  • 206 / 7
Все правильно ...

проверьте

var_dump ($images);
var_dump ($images->image_intro);
*

Grigory S.

  • Давно я тут
  • 658
  • 70 / 0
  • (с)
Все правильно ...

проверьте

var_dump ($images);
var_dump ($images->image_intro);
Код
object(stdClass)#618 (8) { ["image_intro"]=> string(0) "" ["float_intro"]=> string(0) "" ["image_intro_alt"]=> string(0) "" ["image_intro_caption"]=> string(0) "" ["image_fulltext"]=> string(0) "" ["float_fulltext"]=> string(0) "" ["image_fulltext_alt"]=> string(0) "" ["image_fulltext_caption"]=> string(0) "" } string(0) "" 
Не задав правильный вопрос, невозможно получить правильный ответ.
Для "спасибок" существует кнопочка "+".
*

fbr

  • Завсегдатай
  • 1672
  • 206 / 7
Или у вас настройки модуля фильтруют не те материалы
или в материалах нет изображений ..

не знаю что еще можно предположить
*

Grigory S.

  • Давно я тут
  • 658
  • 70 / 0
  • (с)
Или у вас настройки модуля фильтруют не те материалы
или в материалах нет изображений ..

не знаю что еще можно предположить

Модуль берет новости из категории, изображение в материалах есть, и в интро и в фулл :) Странно)
Не задав правильный вопрос, невозможно получить правильный ответ.
Для "спасибок" существует кнопочка "+".
*

b2z

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

Grigory S.

  • Давно я тут
  • 658
  • 70 / 0
  • (с)
А почему просто не использовать mod_articles_news ?
Его и использую(в первом посте очепятка :( )
Не задав правильный вопрос, невозможно получить правильный ответ.
Для "спасибок" существует кнопочка "+".
*

b2z

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

Grigory S.

  • Давно я тут
  • 658
  • 70 / 0
  • (с)
Ну надеюсь в настройках у Вас не выключен показ картинок??
Нет :)
Не задав правильный вопрос, невозможно получить правильный ответ.
Для "спасибок" существует кнопочка "+".
*

fbr

  • Завсегдатай
  • 1672
  • 206 / 7
Ну надеюсь в настройках у Вас не выключен показ картинок??
это влиять не должно
настройка только из $item->introtext может вырезать img
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Нет :)
Ну тогда у Вас чудеса... Вот код, который вырезает, он срабатывает по параметру. Если в настройках выключено, то все должно быть. Может плагин какой-то режет?
*

Grigory S.

  • Давно я тут
  • 658
  • 70 / 0
  • (с)
В общем поставил на локалку чистую Joomla, эффект тот-же, выводит <img src="/"> :) Похоже правда чудеса :)
Не задав правильный вопрос, невозможно получить правильный ответ.
Для "спасибок" существует кнопочка "+".
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
В общем поставил на локалку чистую Joomla, эффект тот-же, выводит <img src="/"> :) Похоже правда чудеса :)
Стоп. Давайте сначала и по порядку:

1. Вы добавляете картинки используя стандартные средства Joomla (вступительная картинка)?
2. Модуль выводит картинки?
3. Какой код в итоге и в каком файле Вы используете для получения картинки?
*

Grigory S.

  • Давно я тут
  • 658
  • 70 / 0
  • (с)
1. Да
2. Отключил в настройках модуля вывод изображения
3.  В файле \templates\protostar\html\mod_articles_news\_item.php после
Код
defined('_JEXEC') or die;
вставляю
Код
$images = json_decode($item->images);
затем перед
Код
<?php echo $item->introtext; ?>
вставляю
Код
<img src="<?php echo htmlspecialchars($images->image_intro); ?>"/>

Задача: Получить url изображения, затем обработать его классом JImage.
« Последнее редактирование: 06.11.2013, 18:45:32 от kamaz6141 »
Не задав правильный вопрос, невозможно получить правильный ответ.
Для "спасибок" существует кнопочка "+".
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Цитировать
Отключил в настройках модуля вывод изображения
Код: html4strict
if (!$params->get('image')) {
$item->introtext = preg_replace('/<img[^>]*>/', '', $item->introtext);
}
может стоит включить обратно
*

Grigory S.

  • Давно я тут
  • 658
  • 70 / 0
  • (с)
Код: html4strict
if (!$params->get('image')) {
$item->introtext = preg_replace('/<img[^>]*>/', '', $item->introtext);
}
может стоит включить обратно
Отключил после сообщения:
это влиять не должно
настройка только из $item->introtext может вырезать img

Выкл.\Вкл. - погоды не меняет :(
Не задав правильный вопрос, невозможно получить правильный ответ.
Для "спасибок" существует кнопочка "+".
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
2. Отключил в настройках модуля вывод изображения
Блин, ну Вы даете. Как же Вы хотели тогда их получить? Федор Вам дал подсказку - включите обратно =)
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Отключил после сообщения:
Выкл.\Вкл. - погоды не меняет :(
Включите! Модуль выводит картинки?
*

Grigory S.

  • Давно я тут
  • 658
  • 70 / 0
  • (с)
Включите! Модуль выводит картинки?
Включил, выводит.
Не задав правильный вопрос, невозможно получить правильный ответ.
Для "спасибок" существует кнопочка "+".
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

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

Автор denism300

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

Автор alpha_ru

Ответов: 19
Просмотров: 1872
Последний ответ 20.07.2017, 19:25:11
от passer
sql запрос для вывода правильной даты

Автор Frics

Ответов: 4
Просмотров: 1600
Последний ответ 04.07.2017, 14:17:22
от SeBun
Кнопка в редактор и парсинг вывода - это два расширения писать?

Автор AntonOdn

Ответов: 2
Просмотров: 1130
Последний ответ 22.09.2016, 07:36:34
от AntonOdn
Дополнительное поле в модуле

Автор paskal

Ответов: 21
Просмотров: 2623
Последний ответ 27.08.2016, 00:59:55
от robert