drupal - Drupal 8 根据当前路线更改菜单链接
问题描述
我有一个带有上下文过滤器的 Drupal 8 页面视图,其路径如下:
/category/%cid/product/%pid
这里 %cid 和 %pid 是页面视图的上下文过滤器。
在此页面中,我想更改页脚菜单,以更改链接,以便:
/privacy-policy
变成
/productname/privacy-policy
仅当创建了任何节点并且它具有 url 路径设置时:
/productname/privacy-policy
如何实现这一点。
注意:根据我尝试过的Drupal中的讨论,
- 要更改路由,请实现 RouteSubscriber
- 要更改菜单链接,请使用 hook_menu_links_discovered_alter()
我无法做到这一点。
解决方案
我试图通过使用 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';
}
链接标题和网址已更改。但我面临的问题是这些更改被大量缓存。即,如果我根据当前语言设置标题,第一次访问时标题将是正确的,但之后的每次访问都会记住并使用该标题。因此,当我切换语言时,标题将保持不变(缓存一个)。
推荐阅读
- ios - 使用 XIB 在 UITextView 上设置内容插入
- javascript - 如何在单击交叉选项时从应用的过滤器中删除元素?- Reactjs/JavaScript
- javascript - Vue JS 路由器组件 - 在路由之间导航后无法重用使用 webpack 导入的 JS 文件
- c# - 414(请求 URI 太长)
- javascript - 在词法范围或 this 绑定之间使用对象方法?
- c++ - SCIP 如何在我使用 SCIP 时使用 c++ 在我的源代码中添加目标函数
- xamarin.forms - 使用 Google 登录以获取应用的 UWP 和 Xamarin.Forms (android) 版本
- c# - 在已打开的表单中填充文本框
- powershell - 查找文件和输出
- laravel - 从内存而不是磁盘加载视图数据