Drupal 8 | Используется неверный псевдоним
Bonjour,
У меня есть проблема на Drupal 8, которую я не могу решить, поэтому я призываю вас.
У меня есть 2 псевдонима для одного и того же узла:
- / Общественности / событие /10
- / Про / событие /10
У меня есть block_1, который появляется только на страницах " /public/* ", а block_2 - на страницах " /pro/* ".
Когда я получаю доступ к URL "/pro/event/10", отображается block_1, а не block_2.
Я заключаю, что Drupal выбирает псевдоним "/public/event/10" (вероятно, первый, который он находит), пока я нахожусь на странице "/pro/event/10".
Как программно указать Drupal правильный псевдоним для использования?
Спасибо заранее за вашу помощь.
2 ответа
Возможно, вы захотите создать свой собственный path_processor_outbound
обслуживание путем реализации OutboundPathProcessorInterface
,
Эта реализация может работать на /node/{id}
пути, если текущий путь запросов совпадает /public/event/**
или же /pro/event/**
,
Анализ сущности узла на предмет его типа (связки): если это event
генерировать и возвращать желаемый путь; если это не так event
не манипулируйте путем и верните оригинал.
Написание реальной реализации в коде PHP может быть вашим собственным удовольствием;-)
Вот код, если он может кому-то помочь
class OOutboundPathProcessor implements OutboundPathProcessorInterface
{
function processOutbound($path, &$options = [], Request $request = NULL, BubbleableMetadata $bubbleable_metadata = NULL)
{
// Only for nodes
if (!isset($options['entity_type']) OR $options['entity_type'] !== 'node')
{
return $path;
}
// Get current 'space'
$espace = \Drupal::service('session')->get('espace');
// Get the node to process
$node = $options['entity'];
// New path
$str_path = "/%s/%s/%s";
$new_path = sprintf($str_path, $espace, $node->bundle(), $node->id());
// Check new path
$isValid = \Drupal::service('path.validator')->isValid($new_path);
if ($isValid === true) return $new_path;
return $path;
}
}