有没有一种方法可以在drupal菜单下的菜单中添加哈希链接,以使菜单项跳到页面上的锚点或ID?
有没有一种方法可以在drupal菜单下的菜单中添加哈希链接,以使菜单项跳到页面上的锚点或ID?
Answers:
不幸的是,据我所知,Drupal无法开箱即用。但是,您可以使用特殊菜单项模块来创建新菜单项,然后在路径设置中放置“ nolink”。
l('linktext', '', array('fragment' => ' ', 'external' => TRUE));
根据@Sebastian的回复使用。
<span title="" class="nolink">...</span>
。问题只不过是缺少CSS。只需复制ul.menu a{}
CSS并将其粘贴为ul.menu li span.nolink{}
。对我来说很好。但它禁用了由启用的下拉箭头li.expanded
。:(
jQuery("span.nolink").wrap("<a href='#'></a>");
要创建指向命名锚(例如“ #namedanchor”)的链接,您将需要使用一个小的解决方法。
l('linktext', '', array('fragment' => 'namedanchor', 'external' => TRUE));
要创建仅散列的链接(到“#”),您需要将其调整为:
l('linktext', '', array('fragment' => ' ', 'external' => TRUE));
(请注意,该片段确实包含一个空格。)
在Drupal 7中,将“ HTML”设置为TRUE
,然后附加哈希字符。
http://drupal.org/node/123103#comment-4955236
节点/ 16#gohere
自动网址会将其更改为
关于我们
<front>#gohere
。真好!:)
尝试使用模块Void Menu:
无效菜单允许您为标签配置特殊值,以在Drupal 7菜单系统中使用。您可以使用任意值自定义多达10个不同的void标签,并在Drupal菜单系统中自由使用它们。
...
作为一个额外的好处,由于这个模块的功能,您还可以将实际的锚点用作菜单项,而这些菜单项只不过是占位符而已。这可以通过将void标签设置为javascript来实现:void(0); 甚至是简单的井号标签#。与special_menu_items相比,使用此模块的好处在于,您的菜单将不需要任何其他样式即可说明special_menu_items使用的已添加的span标签,并且将是W3C有效的,因为每个锚点都必须具有href属性。
这是一个非常好的解决方案!
刚遇到同样的问题。我需要以编程方式添加带有哈希链接的菜单项。我的代码:
// 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);
只设置external
到TRUE
确实对我来说。在Druapl 7.32中测试。
l('Some Name', '#', array('external' => TRUE));
使用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';
}
}
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;
}
您可以使用上面的代码将哈希链接添加到菜单。
/**
* 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;
}
}