Рейтинг:1

Пользовательская маршрутизация узлов

флаг cz

У меня есть тип содержимого продукта с псевдонимом: /products/headphone. Эта страница продукта имеет два варианта URL:

  • /продукты/наушники/провода
  • /продукты/наушники/беспроводные

Оба URL-адреса должны указывать на один и тот же узел, однако в функции предварительной обработки или ветке я должен иметь возможность зафиксировать, какой вариант загружен (проводной | беспроводной)

Я решил, что должен создать собственный модуль и обрабатывать пользовательскую маршрутизацию:

мой_модуль.routing.yml:

мой_модуль.модальность:
  путь: '/products/{product_slug}/{вариант}'
  значения по умолчанию:
    _controller: '\Drupal\my_module\Controller\ProductController::action'
  требования:
    _permission: 'доступ к содержимому'
  параметры:
    параметры:
      продукт_слаг:
        тип: строка
      вариация:
        тип: строка

Часть, с которой я борюсь, заключается в том, как вернуть контроллер к функции предварительной обработки:

функция my_module_preprocess_node__product_page (массив и переменные $) {
  // кое-что для предварительной обработки
}

Это то, что у меня сейчас есть в моем контроллере:

\Drupal\my_module\Controller\ProductController:действие

действие публичной функции ($program_slug, $variation) 
{
возвращаться [
        'шаблон' => 'узел--программа_страница',
        'вариация' => $вариация
      ];
 }
4uk4 avatar
флаг cn
Это не очень хороший подход. Вы пытаетесь заново изобрести то, как Drupal отображает объекты. Самый быстрый способ, вероятно, состоит в том, чтобы удалить последнюю часть пути в обработчике пути с высоким приоритетом, а затем позволить обычной маршрутизации Drupal разрешить узел продукта и отобразить его, что затем автоматически вызовет ловушку предварительной обработки. Для обработчика пути я описал в другом вопросе, как создать код с помощью drush: https://drupal.stackexchange.com/a/307416/47547.

Ответить или комментировать

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