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

Mitrich

  • Захожу иногда
  • 289
  • 524 / 13
  • Все можно. Но сначала учиться, учиться и учиться.
Задача :
позволить скрытие от индексации путем добавления параметра в вызов модуля

изначально имеем
mosLoadMosules('position',style)
требуется получить
mosLoadMosules('position',style,noindex)

для того чтобы получить стандартный вывод модуля заключенный в теги noindex
в шаблоне прописываем

<?php mosLoadModules('left',0,1); ?>

где:
0 - стандартный вывод модуля
1 - заключение модуля в теги noindex

если вам это не нужно то работают и прежние правила для вызова модуля
т.е. (например)
<?php mosLoadModules('left'); ?>
<?php mosLoadModules('left',-2); ?>

Но при использовании noindex хака
обязательно явное указание стиля вывода (по умолчанию 0)
т.е.
<?php mosLoadModules('left',0,1); ?>

Решение
Файл
includes/frontend.php
строку
    function mosLoadModules( $position='left', $style=0,) {
меняем на
    function mosLoadModules( $position='left', $style=0, $noindex=0 ) {

там же перед (после)
    $prepend = ($style == 1) ? "<td valign=\"top\">\n" : '';
    $postpend = ($style == 1) ? "</td>\n" : '';

дописываем
    $pre_prepend = ($noindex == 1) ? '<noindex>' : '';
    $post_postpend = ($noindex == 1) ? '</noindex>' : '';


там же
    echo $prepend;
меняем на
    echo $pre_prepend;
    echo $prepend;


там же
    echo $postpend;
меняем на
    echo $postpend;
    echo $post_postpend;



файл
mambots/content/mosloadposition.php

    mosLoadModules ( $position, $style);
меняем на
    mosLoadModules ( $position, $style, $noindex );
« Последнее редактирование: 11.12.2007, 22:31:26 от Mitrich »
*

nike-17

  • Захожу иногда
  • 131
  • 12 / 0
Хм...но ведь есть же соответствующий мамбот - зачем мудрить??
*

nike-17

  • Захожу иногда
  • 131
  • 12 / 0
 а вот и мамбот

[вложение удалено Администратором]
*

Mitrich

  • Захожу иногда
  • 289
  • 524 / 13
  • Все можно. Но сначала учиться, учиться и учиться.
Так бот же ВСЕ внешние ссылки скрывает от индексации
*

nike-17

  • Захожу иногда
  • 131
  • 12 / 0
хм ну и павильно..зачем комуто вес отдавать??Хотя немного подумав понял что  твой вариатн тоже очень полезен и не пересекается по сути с ботом
*

boston

  • Захожу иногда
  • 495
  • 222 / 3
Mitrich, проверь работу при использовании в mosloadposition.php, кажется не действует.

PS. Внёс хак в Joostina ;)
Самая новая Joostina 1.3.0.5 UTF-8 stable | О найденных ошибках сообщаем | Расширения Joostina
*

Mitrich

  • Захожу иногда
  • 289
  • 524 / 13
  • Все можно. Но сначала учиться, учиться и учиться.
Погляжу

Кинь в личку симптомы проблемы plz
*

4853

  • Захожу иногда
  • 170
  • 20 / 11
Б-р-р-р,Mitrich , а зачем так и к чему?
Может я чё не понимаю?
*

Mitrich

  • Захожу иногда
  • 289
  • 524 / 13
  • Все можно. Но сначала учиться, учиться и учиться.
Просто так
Игры разума  ;)
*

era

  • Администратор
  • 1588
  • 392 / 5
  • В туалете лучше быть пользователем, чем админом.
*

4853

  • Захожу иногда
  • 170
  • 20 / 11
А, эт нужное дело  ^-^
А то я думал, что если в индексе прописать:
<noindex>
<?php mosLoadModules ( 'left' ); ?>
</noindex>
эт уже неправильно.
Непонятно, народ борится за индексацию, а тут обратка, против такового ;D
*

Mitrich

  • Захожу иногда
  • 289
  • 524 / 13
  • Все можно. Но сначала учиться, учиться и учиться.
Цитировать
а может в шаблоне перед выводом модуля прописывать "ноуиндекс" правильнее?

В общем все граздо прозаичнее  ^-^
Заказчик сказал, что noindex должен реализовываться средствами движка

Еще и денег дал  ;D
*

SPasha

  • Осваиваюсь на форуме
  • 24
  • 0 / 0
я видел бот который умело обрамляет ссылки ноиндексом и вставляет тег nofollow к тому же он может вообще через редирект позволяет переходить при нажатии на ссылки. Терпение просто уже ссылки самому обрамлять ноиндексами,  так же можно содержимое менять типа аменять автоматом :) удобно видел тут: http://www.4start.ru/nashi-raboty/seo-anonym-redirect-bot.html
*

Physicist

  • Глобальный модератор
  • 984
  • 194 / 0
  • Рябов Денис
Непонятно, народ борится за индексацию, а тут обратка, против такового ;D
Объясняю, зачем это может быть нужно. При раскрутке определенных страниц очень важно, чтобы на эти страницы были ссылки, но с них на другие страницы не было (это позволяет сделать PR максимально возможным). Как следствие, нужно заключать модули меню и пр. в <noindex>, но это должно делаться только на раскручиваемых страницах.
*

Ogirok1

  • Осваиваюсь на форуме
  • 16
  • 3 / 0
Подскажите, кто знает
куда вставить теги noindex для того, чтоб гугль не индексировал модули:
mod_vvisit_counter ,  mod_virtuemart_login , mod_vvisit_counter  ?

Исходные данные Joomla 1,5,22 , VirtueMart 1,8.
Большое Спасибоооо!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

noindex для ссылок на документы?

Автор Игарь

Ответов: 14
Просмотров: 1665
Последний ответ 15.09.2020, 16:57:17
от rsn
Исключить теги OG на страницах магазина

Автор AlexB

Ответов: 4
Просмотров: 993
Последний ответ 15.05.2020, 14:46:20
от AlexB
Актуальны ли сейчас мета-теги?

Автор SmYk

Ответов: 6
Просмотров: 1726
Последний ответ 10.12.2017, 21:16:43
от Fess_N
Помощь с поиском только по Артикулу. Модуль поисковика от JShopping

Автор Zhanadil1509

Ответов: 3
Просмотров: 1141
Последний ответ 11.07.2017, 15:07:05
от Zhanadil1509
<noindex>

Автор dialit

Ответов: 1
Просмотров: 1050
Последний ответ 22.10.2016, 02:03:57
от ELLE