У меня есть тип содержимого продукта с псевдонимом: /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)
{
возвращаться [
'шаблон' => 'узел--программа_страница',
'вариация' => $вариация
];
}