symfony Drupal 8 -在主导航上以编程方式禁用或启用链接

vcirk6k6  于 2023-05-01  发布在  其他
关注(0)|答案(5)|浏览(146)

Drupal 8。我正在尝试管理主导航上的一个链接项目。我想以编程方式启用/禁用一个项目。我搜索了一下,但找不到怎么做。我找到了MenuLinkManager,MenuLinkContent,但我不能做我想做的。谢谢大家的帮助。

bvjxkvbb

bvjxkvbb1#

假设你真的想删除链接,我会使用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']);
}
roejwanj

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

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

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

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

相关问题