Drupal 8 根据当前路线更改菜单链接

Posted

技术标签:

【中文标题】Drupal 8 根据当前路线更改菜单链接【英文标题】:Drupal 8 Change menu link based on current route 【发布时间】:2018-08-08 16:20:32 【问题描述】:

我有一个带有上下文过滤器的 Drupal 8 页面视图,其路径如下:

/category/%cid/product/%pid

这里 %cid 和 %pid 是页面视图的上下文过滤器。

在此页面中,我想更改页脚菜单,以更改链接,以便:

/privacy-policy 

变成

/productname/privacy-policy

仅当创建了任何节点并且它具有 url 路径设置:

/productname/privacy-policy

如何实现这一点。

注意: 根据我尝试过的Drupal 中的讨论,

要更改路由,请实现 RouteSubscriber 要更改菜单链接,请使用 hook_menu_links_discovered_alter()

我做不到。

【问题讨论】:

【参考方案1】:

我正在尝试通过使用 hook_menu_links_discovered_alter() 来实现类似的事情,它通常可以工作:

  function mymodule_menu_links_discovered_alter(&$links) 
      $links['linkid']['title'] = 'Some new title';
      $links['linkid']['url'] = 'http://www.google.com';
    

链接标题和网址已更改。但我面临的问题是这些更改被大量缓存。 IE。如果我根据当前语言设置标题,第一次访问的标题将是正确的,但之后的每次访问都会记住并使用该标题。因此,当我切换语言时,标题将保持不变(缓存的)。

【讨论】:

在这里查看我的其他解决方案(没有缓存问题):***.com/questions/52254659/…

以上是关于Drupal 8 根据当前路线更改菜单链接的主要内容,如果未能解决你的问题,请参考以下文章

PHP Drupal 6:动态更改菜单链接标题

Drupal6:动态更改菜单链接标题

获取 Drupal 中当前提供的路由的菜单链接项

Drupal 限制主链接中菜单项的数量

Drupal 允许的节点类型自定义下拉菜单

Drupal 视图条件链接