Чи є спосіб додати хешоване посилання в меню під drupal-меню, щоб просто зробити пункт меню, який перескакує на якір або ідентифікатор на сторінці?
Чи є спосіб додати хешоване посилання в меню під drupal-меню, щоб просто зробити пункт меню, який перескакує на якір або ідентифікатор на сторінці?
Відповіді:
На жаль, наскільки мені відомо, Drupal не може цього робити поза межами. Однак ви можете використовувати модуль спеціальних пунктів меню для створення нового пункту меню та розмістити "не посилання" в налаштуваннях шляху.
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 # нікуди
автоматичний URL змінить його так, як
про-нас # нікуди
<front>#gohere
. Приємно! :)
Спробуйте скористатися модулем недійсності :
Пустотне меню дозволяє налаштувати спеціальні значення для тегів для використання в системі меню 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
це для мене. Випробуваний у Друаплі 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>
в ціліТепер повернемося на вашу домашню сторінку, і ви побачите, що пункт меню, який ми змінили в кліку, не переходить нікуди