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

Как создать свой аддон

Написать собственный аддон может любой желающий. Главное правило — знать хотя бы основы работы с PHP кодом (в идеале — ООП). В репозитории есть пример простого аддона, разберём его:

ExampleAddon.php
<?php declare(strict_types=1);
final class ExampleAddon extends AbstractAddon
{
public const PACKAGE_ID = 'Optimus:ExampleAddon';
public static array $events = [
self::HOOK_EVENT,
];
public function __invoke(AddonEvent $event): void
{
if ($event->eventName() !== self::HOOK_EVENT)
return;
IntegrationHook::add(
'integrate_theme_context', self::class . '::hideSomeTopicsFromSpiders#', false, __FILE__
);
}
public function hideSomeTopicsFromSpiders(): void
{
if (empty(Utils::$context['topicinfo']))
return;
if (Utils::$context['topicinfo']['locked'] || Utils::$context['topicinfo']['num_replies'] < 2) {
Utils::$context['meta_tags'][] = ['name' => 'robots', 'content' => 'noindex,nofollow'];
}
}
}

Класс аддона должен расширять существующий абстрактный класс AbstractAddon, иметь константу PACKAGE_ID с указанием идентификатора пакета. Если аддон планируется для связи с существующей модификацией, её ID можно посмотреть в package-info.xml в узле id — например, <id>Bugo:Optimus</id>.

Если это встроенный аддон Optimus, идентификатор начинается с Optimus:, а дальше идёт имя текущего класса. Если ваш аддон не связан с какой-либо существующей модификацией, но вы хотите, чтобы он работал с Optimus, используйте аналогичный идентификатор.

Далее, в статическом свойстве $events указывается массив, возвращающий поддерживаемые конкретно этим аддоном события. self::HOOK_EVENTуниверсальное событие, предназначенное для взаимодействия с хуками SMF. Пример работы с ним указан в методе __invoke.

С помощью IntegrationHook::add мы указываем нужный нам хук и связываем его с методом внутри класса аддона.

Затем связанный метод выполняет свою работу. Конкретно в данном аддоне — ExampleAddon — происходит добавление мета-тега <meta name="robots" content="noindex,nofollow"> на страницах заблокированных тем, а также тем с количеством ответов меньше двух. Если вам такой аддон нужен, сохраните его код в соответствующий файл ExampleAddon.php и разместите в директории Sources/Optimus/Addons. Ничего нигде отдельно включать не придётся, он заработает сразу.

По такому же принципу работают все доступные аддоны.