Drupal 8 | Использован неверный псевдоним - PullRequest
0 голосов
/ 02 ноября 2018

Bonjour,

У меня есть проблема в Drupal 8, которую я не могу решить, поэтому я и звоню вам.

У меня есть 2 псевдонима для одного и того же узла:

  • / public / event / 10
  • / Pro / событие / 10

У меня есть block_1, который появляется только на страницах "/ public / *", и block_2 на страницах "/ pro / *".

Когда я получаю доступ к URL "/ pro / event / 10", отображается block_1, а не block_2.

Я пришел к выводу, что Drupal выбирает псевдоним "/ public / event / 10" (вероятно, первый, который он находит), пока я нахожусь на странице "/pro/event/10".

Как программно указать Drupal правильный псевдоним для использования?

Заранее благодарю за помощь.

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Вот код, если он может кому-то помочь

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;
    }
}
0 голосов
/ 09 ноября 2018

Возможно, вы захотите создать свой собственный сервис path_processor_outbound, внедрив OutboundPathProcessorInterface.
Эта реализация может работать на /node/{id} путях, если текущий путь запросов соответствует /public/event/** или /pro/event/**.
Анализируя сущность узла на предмет его типа (связки): если это event, сгенерируйте и верните желаемый путь; если это не event, не манипулируйте путем и верните оригинал.

Написание реальной реализации в коде PHP может быть вашим собственным удовольствием; -)

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