Перейти к содержимому

Поддерживаемые события

Здесь перечислены все события, генерируемые Optimus, которые можно перехватить аддонами:

СобытиеОписание
AddonInterface::HOOK_EVENTуниверсальное событие для работы с хуками SMF
AddonInterface::ROBOTS_RULESсобытие для работы с генератором правил `robots.txt
AddonInterface::SITEMAP_LINKSсобытие для работы с генератором xml-карты
AddonInterface::SITEMAP_CONTENTспециальное событие для обработки контента xml-карты сразу после формирования её структуры
AddonInterface::CREATE_SEF_URLSспециальное событие для обработки ссылок в xml-карте до формирования её структуры

Для реализации связи с выбранным событием в классе аддона нужно заполнить поле $events и создать метод __invoke. На примере аддона LightPortal это выглядит так:

public static array $events = [
self::ROBOTS_RULES,
self::SITEMAP_LINKS,
];
public function __invoke(AddonEvent $event): void
{
match ($event->eventName()) {
self::ROBOTS_RULES => $this->changeRobots($event->getTarget()),
self::SITEMAP_LINKS => $this->changeSitemap($event->getTarget()),
};
}

Затем мы создаем соответствующие методы changeRobots и changeSitemap (названия вы регулируете сами):

public function changeRobots(RobotsGenerator $robots): void
{
var_dump($robots);
}
public function changeSitemap(SitemapGenerator $sitemap): void
{
var_dump($sitemap);
}

Как видите, в качестве объекта события self::ROBOTS_RULES передается класс RobotsGenerator для работы с генератором robots.txt.

Соответственно, в качестве объекта события self::SITEMAP_LINKS передается класс SitemapGenerator для работы с генератором xml-карты.

А дальше уже всё зависит от полёта вашей фантазии и конкретных целей. Примеры реализаций встроенных аддонов можно увидеть на GitHub.

Если событий вам мало или они вас пугают, в качестве альтернативы можно использовать встроенные хуки Optimus.