我有以下功能来创建主动跟踪功能。因此,如果我将 /blog 作为“父级”和 /blog/mypost 的帖子,则在 mypost 上时,博客链接将显示为突出显示。我不想为所有博客文章制作菜单项。问题是当缓存打开时(不使用 settings.local.php 并关闭调试)getRequestUri 在某些页面上没有改变。它似乎被缓存取决于页面。它在关闭页面缓存的情况下工作正常,但我想让它与缓存一起工作。有没有更好的方法来检查当前路径并应用活动类?
function mytheme_preprocess_menu(&$variables, $hook) {
if($variables['theme_hook_original'] == 'menu__main'){
$node = \Drupal::routeMatch()->getParameter('node');
if($node){
$current_path = \Drupal::request()->getRequestUri();
$items = $variables['items'];
foreach ($items as $key => $item) {
// If current path starts with a part of another path i.e. a parent, set active to li.
if (0 === strpos($current_path, $item['url']->toString())) {
// Add active link.
$variables['items'][$key]['attributes']['class'] .= ' menu-item--active-trail';
}
}
}
}
}
我还尝试将其放入模块中,以尝试查看是否可以获取当前路径,然后在 menu--main.twig.html 模板中执行树枝逻辑,但我遇到了同样的问题。
function highlight_menu_sections_template_preprocess_default_variables_alter(&$variables) {
$variables['current_path'] = $_SERVER['REQUEST_URI'];
}