Drupal 8。我正在尝试管理主导航上的一个链接项目。我想以编程方式启用/禁用一个项目。我搜索了一下,但找不到怎么做。我找到了MenuLinkManager,MenuLinkContent,但我不能做我想做的。谢谢大家的帮助。
bvjxkvbb1#
假设你真的想删除链接,我会使用hook_menu_links_discovered_alter()例如:
hook_menu_links_discovered_alter()
/** * Implements hook_menu_links_discovered_alter(). * * @param array $links * An array of links. */ function HOOK_menu_links_discovered_alter(array &$links): void { unset($links['machine_name_to_remove']); }
roejwanj2#
禁用/启用菜单项意味着显示/隐藏它。所以,我们可以通过下面的代码在主题文件
/** * Implements hook_preprocess_menu(). */ function theme_preprocess_menu(&$variables) { if (isset($variables['menu_name']) && $variables['menu_name'] === 'main') { foreach($variables['items'] as $key => $item) { $path = $item['url']->toString(); switch($path) { case '/menupath': unset($variables['items'][$key]); //Remove menu item break; } } } }
igetnqfo3#
您可以安装模块Special Menu Items https://www.drupal.org/project/special_menu_items或者在模板的theme_link函数中执行。PHP
function myTheme_link($variables) { if ((isset($variables['path']) && ($variables['path'] == $_GET['q'] || ($variables['path'] == '<front>' && drupal_is_front_page())))) { return ($variables['options']['html'] ? $variables['text'] : check_plain($variables['text'])); } else { return '<a href="' . check_plain(url($variables['path'], $variables['options'])) . '"' . drupal_attributes($variables['options']['attributes']) . '>' . ($variables['options']['html'] ? $variables['text'] : check_plain($variables['text'])) . '</a>'; } }
uelo1irk4#
如果要动态更改菜单,则需要从缓存中排除该菜单:
/** * Implements hook_preprocess_HOOK(). */ function YOUR_MODULE_preprocess_menu(&$variables) { foreach ($variables['items'] as $key => $item) { if ($key == 'depot_opm.document_demande_existant_tabs') { unset($variables['items'][$key]); } } } /** * Implements hook_preprocess_HOOK(). */ function YOUR_MODULE_preprocess_block(&$variables) { // Disable the cache of the menu block. if($variables['derivative_plugin_id'] == 'tabs-documents') { $variables['#cache']['max-age'] = 0; } }
70gysomp5#
这就是我的工作:测试Drupal 93.9(2022年4月)。
/** * Implements hook_menu_links_discovered_alter(). */ function MY_MODULE_menu_links_discovered_alter(&$links) { $links['standard.front_page']['enabled'] = 0; }
5条答案
按热度按时间bvjxkvbb1#
假设你真的想删除链接,我会使用
hook_menu_links_discovered_alter()
例如:
roejwanj2#
禁用/启用菜单项意味着显示/隐藏它。所以,我们可以通过下面的代码在主题文件
igetnqfo3#
您可以安装模块Special Menu Items https://www.drupal.org/project/special_menu_items
或者在模板的theme_link函数中执行。PHP
uelo1irk4#
如果要动态更改菜单,则需要从缓存中排除该菜单:
70gysomp5#
这就是我的工作:测试Drupal 93.9(2022年4月)。