[XenForo] Как работает роутинг

Активный
Статус
Сообщения
516
Лайки
32

8

месяц на сайте

Всем привет, в этом мануале я хочу кратко ввести вас в роутинг xenforo.
Для начала объясню для чего создан роутинг. Роутинг - показывает xenforo какой php скрипт обработать во время перехода на определенную ссылку.
Приведу разумный пример, который мы проделаем в этом мануале далее:
У нас есть форум с 3 серверами (Феникс, Туксон, Холидей), при регистрации пользователям предлагается выбрать один из серверов (это обязательно), допустим мы выбрали Туксон.
Изначально из себя это ничего не представляет, просто информация о том, какой у вас сервер, но благодаря роутингу мы можем проделать интересные действия. Итак, нам нужна реализация перехода из навигации в раздел жалоб своего сервера. Благодаря роутингу, мы можем обратиться к PHP с запросом - какой у пользователя сервер? Если у пользователя сервер Феникс - перевести его на жалобы сервера феникс, если у пользователя сервер - Туксон, перевести на жалобы сервера Туксон, соответственно и у Холидея также.

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

Перед началом работы, необходимо включить режим разработчика:
Переходим в /src/config.php и в конец необходимо добавить

PHP:
$config['development']['enabled'] = true;

Теперь в админ-панели должен появиться новый элемент навигации - Разработка
1764160986932.png

Пока никуда здесь не переходим, ведь нам нужно создать доп. поля пользователя:
Переходим в раздел пользователей - Дополнительные поля пользователей - Добавить поле.
ID поля - основной id по которому мы можем обратиться к самому полю, не к его элементам. В нашем случае это server
Заголовок - будет отображаться в информации пользователя и при выборе сервера. Так и назовём - Сервер
Место отображения - произвольно, смотря что вам необходимо. У нас - Контактная информация
Тип поля - зависит от того что вам нужно, опять же. В нашем случае - Выпадающий список
Далее важно открыть НАСТРОЙКИ ПОЛЕЙ С ВАРИАНТОМ ОТВЕТА:
1764161234359.png

Здесь указываем дочерний id для обращения и заголовок. В нашем случае будем использовать id - fenix, tucson.

Теперь раскройте основные настройки и выбирайте так, как я указал на скриншоте - остальное произвольно:
1764161352056.png

Сохраняем - готово.

Теперь наша цель, создать контроллер для обработки этих полей. В данном случае вы конечно можете воспользоваться ИИ, но помните, что ИИ к добру не приведет;).

Переходим в файлы сайта по пути: /src/XF/Pub/Controller

Здесь создавайте контроллеров сколько душе угодно и на что хватит сервера. Для нашего варианта создадим файл Redirect.php

Далее просто скопируйте следующий код:

PHP:
<?php

namespace XF\Pub\Controller;

class Redirect extends \XF\Pub\Controller\AbstractController
{
    public function actionIndex()
    {
        $visitor = \XF::visitor();

        if (!$visitor->user_id) {
            return $this->rerouteController('XF:Forum', 'Index');
        }

        $server = $visitor->Profile->custom_fields->server ?? null;

        if ($server === 'fenix') {
            return $this->redirect($this->buildLink('forums', ['node_id' => 60]), 301);
        }

        if ($server === 'tucson') {
            return $this->redirect($this->buildLink('forums', ['node_id' => 2]), 301);
        }

        return $this->rerouteController('XF:Forum', 'Index');
    }
}
💬 OFFTOP

Особо вникаться в него я не буду и не вижу смысла что-либо объяснять вам. ЧатГПТ или поиск вам всё сам расскажет



Здесь, вам нужно заменить только id серверов

if ($server === 'tucson') { и if ($server === 'fenix') {
а также переход на форумы: 'forums', ['node_id' => 2]), меняете 2 на нужный id форума.


По итогу это уже рабочий контроллер который будет нас перенаправлять, вроде всё? А вроде нет. Осталось создать сам роутинг для редиректа.

Переходим в заветную вкладку "Разработка" -> Роутинги -> Добавить роутинг.

Тип роутинга - 100% публичный, никаких других вам не пригодится думаю, пока.
Префикс роутинга - можно оставить и /, но мы напишем report, это наш редирект, грубо говоря - написав yourforum.ru/report нас перебросит на жалобы Туксона.
Спускаемся вниз до Контроллера - вставляем путь до нашего Redirect.php начиная от XF:
XF\Pub\Controller\Redirect (без .php)
Префикс действия - index и сохраняем.

Всё! Ваш роутинг полностью работает!
И не переживайте, на жалобах он не ограничен, с роутингом можно творить безумные действия.


Очень надеюсь что вы поймете что такое роутинг, а не сделает ctrl c ctrl v. Лучше вникните в суть, чем пусто копируйте
 

1 человек читают эту тему (Всего: 1, Пользователей: 0, Гостей: 1)

Сверху