Drupal 8 |使用了错误的别名

时间:2018-11-02 17:43:06

标签: drupal drupal-8

Bonjour

我在Drupal 8上有一个无法解决的问题,这就是为什么我打电话给你。

我对同一节点有2个别名:

  • / public / event / 10
  • / pro / event / 10

我有一个block_1仅出现在“ / public / *”页面上,而一个block_2出现在“ / pro / *”页面上。

当我访问网址“ / pro / event / 10”时,显示的是block_1,而不是block_2。

我得出的结论是,当我在页面“ / pro / event / 10”上时,Drupal选择了别名“ / public / event / 10”(可能是他找到的第一个)。

如何以编程方式告诉Drupal要使用的正确别名?

预先感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这是可以帮助某人的代码

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;
    }
}

答案 1 :(得分:0)

您可能想通过实现path_processor_outbound来创建自己的OutboundPathProcessorInterface服务。
如果当前请求路径匹配/node/{id}/public/event/**,则此实现可以在/pro/event/**路径上工作。
分析节点实体的类型(捆绑):如果是event,则生成并返回所需的路径;如果不是event,请不要操纵路径并返回原始路径。

用PHP代码编写实际的实现可能是您的荣幸;-)