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

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

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

Сохраняем - готово.
Теперь наша цель, создать контроллер для обработки этих полей. В данном случае вы конечно можете воспользоваться ИИ, но помните, что ИИ к добру не приведет
.
Переходим в файлы сайта по пути: /src/XF/Pub/Controller
Здесь создавайте контроллеров сколько душе угодно и на что хватит сервера. Для нашего варианта создадим файл Redirect.php
Далее просто скопируйте следующий код:
Здесь, вам нужно заменить только 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. Лучше вникните в суть, чем пусто копируйте
Для начала объясню для чего создан роутинг. Роутинг - показывает xenforo какой php скрипт обработать во время перехода на определенную ссылку.
Приведу разумный пример, который мы проделаем в этом мануале далее:
У нас есть форум с 3 серверами (Феникс, Туксон, Холидей), при регистрации пользователям предлагается выбрать один из серверов (это обязательно), допустим мы выбрали Туксон.
Изначально из себя это ничего не представляет, просто информация о том, какой у вас сервер, но благодаря роутингу мы можем проделать интересные действия. Итак, нам нужна реализация перехода из навигации в раздел жалоб своего сервера. Благодаря роутингу, мы можем обратиться к PHP с запросом - какой у пользователя сервер? Если у пользователя сервер Феникс - перевести его на жалобы сервера феникс, если у пользователя сервер - Туксон, перевести на жалобы сервера Туксон, соответственно и у Холидея также.
Думаю теорию вы после такого примера понимаете, теперь мы можем переходить к практической части.
Перед началом работы, необходимо включить режим разработчика:
Переходим в /src/config.php и в конец необходимо добавить
PHP:
$config['development']['enabled'] = true;
Теперь в админ-панели должен появиться новый элемент навигации - Разработка

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

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

Сохраняем - готово.
Теперь наша цель, создать контроллер для обработки этих полей. В данном случае вы конечно можете воспользоваться ИИ, но помните, что ИИ к добру не приведет
Переходим в файлы сайта по пути: /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');
}
}
Здесь, вам нужно заменить только 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. Лучше вникните в суть, чем пусто копируйте