如何在菜单中添加哈希链接?


Answers:


15

不幸的是,据我所知,Drupal无法开箱即用。但是,您可以使用特殊菜单项模块来创建新菜单项,然后在路径设置中放置“ nolink”。


不幸的是,该模块适用于版本6,而没有一个适用于7,但可以修改。不管怎么说,还是要谢谢你 。
mohamad salama 2011年

1
而是l('linktext', '', array('fragment' => ' ', 'external' => TRUE));根据@Sebastian的回复使用。
Duncanmoo 2012年

“特殊菜单项”添加<span title="" class="nolink">...</span>。问题只不过是缺少CSS。只需复制ul.menu a{}CSS并将其粘贴为ul.menu li span.nolink{}。对我来说很好。但它禁用了由启用的下拉箭头li.expanded。:(
Mayeenul Islam

很抱歉这么晚发布,但是我碰到了这个话题。无需更改CSS,您可以使用一些js将nolink封装在带有哈希的锚标记中。使用jQuery,它将是jQuery("span.nolink").wrap("<a href='#'></a>");
Goldentoa11年

15

按照文档注释中l()报告内容进行操作

要创建指向命名锚(例如“ #namedanchor”)的链接,您将需要使用一个小的解决方法。

l('linktext', '', array('fragment' => 'namedanchor', 'external' => TRUE));

要创建仅散列的链接(到“#”),您需要将其调整为:

l('linktext', '', array('fragment' => ' ', 'external' => TRUE));

(请注意,该片段确实包含一个空格。)

 

在Drupal 7中,将“ HTML”设置为TRUE,然后附加哈希字符。



6

尝试使用模块Void Menu

无效菜单允许您为标签配置特殊值,以在Drupal 7菜单系统中使用。您可以使用任意值自定义多达10个不同的void标签,并在Drupal菜单系统中自由使用它们。
...
作为一个额外的好处,由于这个模块的功能,您还可以将实际的锚点用作菜单项,而这些菜单项只不过是占位符而已。这可以通过将void标签设置为javascript来实现:void(0); 甚至是简单的井号标签#。与special_menu_items相比,使用此模块的好处在于,您的菜单将不需要任何其他样式即可说明special_menu_items使用的已添加的span标签,并且将是W3C有效的,因为每个锚点都必须具有href属性。

这是一个非常好的解决方案!


2

刚遇到同样的问题。我需要以编程方式添加带有哈希链接的菜单项。我的代码:

// the URL with hash in it is in the form  'normal_part_of_url'#'hash_part_of_url'
$item = array( 
  'link_path' => %normal_part_of_url%,
  'link_title' => %your_link_title%,
  'menu_name' => %menu_where_to_add_links%,
  'options' => array('fragment'=>%hash_part_of_url%)
);
menu_link_save($item);

1

只设置externalTRUE确实对我来说。在Druapl 7.32中测试。

l('Some Name', '#', array('external' => TRUE));


0

使用Drupals转换功能也可以。

/**
 * Implements hook_menu().
 *
 * Defines a valid link to use when creating menu items.
 */
function greenacorn_menu() {
  $items['<main-content>'] = array(
    'page callback' => 'drupal_not_found',
    'access callback' => TRUE,
    'type' => MENU_CALLBACK,
  );

  return $items;
}

/**
 * Implements hook_menu_link_alter().
 *
 * Flags the link to be altered at runtime.
 *
 * Note: Changes here would be saved back to the database.
 */
function greenacorn_menu_link_alter(&$item, $menu) {
  if ($item['link_path'] == '<main-content>') {
    $item['options']['alter'] = TRUE;
  }
}

/**
 * Implements hook_translated_menu_link_alter().
 *
 * Refactors the link to go to the fragment #main-content.
 */
function greenacorn_translated_menu_link_alter(&$item, $map) {
  if ($item['link_path'] == '<main-content>') {
    $item['href'] = '';
    $item['localized_options']['fragment'] = 'main-content';
  }
}

0
function test_menu() {
  $items = array();
  $items['sample'] = array(
   'title' => t('Sample page'),
   'type' => MENU_NORMAL_ITEM,
    'menu_name' => 'main-menu',
    'page callback' => 'samplepage',
    'access callback' => TRUE,
    'options' => array('fragment' => 'sampleHash'),
  );
  return $items;
}

您可以使用上面的代码将哈希链接添加到菜单。


0
/**
 * Implements hook_module_implements_alter().
 */
function MODULE_module_implements_alter(&$implementations, $hook) {
  if ($hook == 'url_outbound_alter') {
    $stored = $implementations['MODULE'];
    unset($implementations['MODULE']);
    $implementations['MODULE'] = $stored;
  }
}

/**
 * Implements hook_url_outbound_alter().
 */
function MODULE_url_outbound_alter(&$path, &$options, $original_path) {
  if (strpos($path, '#') !== FALSE) {
    $fragment = substr($path, strpos($path, "#") + 1);
    $path = str_replace('#' . $fragment, '', $path);
    $options['fragment'] = $fragment;
  }
}

请不要发布“仅代码”答案。尽管这可能会解决问题,但并没有向读者解释为什么它可以解决问题,或者与此处的替代方法相比,它可以提供什么
肖恩·康

0

安装特殊菜单项和用于分层菜单的DHTML菜单,然后:

  • 添加您的x-example词汇并将其添加到您的条款中
  • 单击“修改x-示例”,然后在“分类”菜单部分中设置菜单位置
  • 进入集团将菜单设置为集团
  • 在管理员修改菜单中,您会看到自动添加的字词
  • 单击修改菜单项,然后将其粘贴<void>到目标中

现在回到您的主页,您将看到我们在单击中已修改的菜单项不会出现在任何地方


欢迎来到Drupal问答。解释如何使用特殊菜单项而不是仅粘贴图片会更加有用。您可以考虑提高答案。谢谢。
Kojo

1
我认为现在还可以
Elaz
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.