Есть ли способ добавить хешированную ссылку в меню в меню drupal, чтобы просто создать пункт меню, который переключается на якорь или идентификатор на странице?
Есть ли способ добавить хешированную ссылку в меню в меню drupal, чтобы просто создать пункт меню, который переключается на якорь или идентификатор на странице?
Ответы:
К сожалению, насколько мне известно, Drupal не может сделать это из коробки. Однако вы можете использовать модуль « Специальные пункты меню », чтобы создать новый пункт меню, и поместить «nolink» в настройках пути.
l('linktext', '', array('fragment' => ' ', 'external' => TRUE));
согласно ответу @ Себастьяна.
<span title="" class="nolink">...</span>
. Проблема не что иное, как отсутствие CSS. Просто скопируйте ul.menu a{}
CSS и вставьте их ul.menu li span.nolink{}
. Это работает нормально для меня. Но он отключил стрелку раскрывающегося списка, активированную li.expanded
. :(
jQuery("span.nolink").wrap("<a href='#'></a>");
Следуйте тому, что сообщается в комментарии к l()
документации .
Чтобы создать ссылку на именованный якорь (например, «#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
автоматический URL изменит его, чтобы быть как
о-мы # gohere
<front>#gohere
. Ницца! :)
Попробуйте использовать модуль Void Menu :
Пустое меню позволяет вам настраивать специальные значения для тегов для использования в системе меню Drupal 7. Вы можете настроить до 10 различных пустых тегов с любым желаемым значением и свободно использовать их в системе меню Drupal.
...
В качестве дополнительного бонуса и благодаря функциональности этого модуля вы также можете использовать фактические привязки в качестве пунктов меню, которые не служат никакой другой цели, кроме заполнителей. Это достигается с помощью тега void, для которого установлено значение javascript: void (0); или даже простой хэш-тег #. Преимущество использования этого модуля перед special_menu_items для этого заключается в том, что ваши меню не требуют каких-либо дополнительных стилей для учета добавленных тегов span, используемых special_menu_items, и будут действительными в 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;
}
}
установите специальные пункты меню и DHTML-меню для иерархических меню, затем:
<void>
в целевойТеперь вернитесь на свою домашнюю страницу, и вы увидите, что те пункты меню, которые мы изменили при нажатии, никуда не уходят