Як додати хеш-посилання в меню?


21

Чи є спосіб додати хешоване посилання в меню під drupal-меню, щоб просто зробити пункт меню, який перескакує на якір або ідентифікатор на сторінці?


Якщо ви використовуєте Absolute URL на початку, він буде працювати. Як yourdomain.com/somepath#someother
hzak

Відповіді:


15

На жаль, наскільки мені відомо, Drupal не може цього робити поза межами. Однак ви можете використовувати модуль спеціальних пунктів меню для створення нового пункту меню та розмістити "не посилання" в налаштуваннях шляху.


на жаль, цей модуль для версії 6 та жоден для 7, але його можна змінити. все одно, дякую .
саляма мохамада

1
Скоріше скористайтеся відповідно l('linktext', '', array('fragment' => ' ', 'external' => TRUE));до відповіді @ Себастьяна.
Данканму

"Спеціальні пункти меню" додає <span title="" class="nolink">...</span>. Проблема - це не що інше, як відсутність CSS. Просто скопіюйте ul.menu a{}CSS та вставте їх ul.menu li span.nolink{}. Це добре для мене. Але він відключив стрілку спадного меню, яку ввімкнув користувач li.expanded. :(
Іслам Мейєненул

Вибачте за публікацію так пізно, але я просто перебіг цю нитку. Замість того, щоб змінити 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, а потім додайте хеш-символ.


13

http://drupal.org/node/123103#comment-4955236

вузол / 16 # нікуди

автоматичний URL змінить його так, як

про-нас # нікуди


1
А як щодо перебування на сторінці, на якій ви перебуваєте? Наприклад, намагаючись перейти до посилання "Пропустити до навігації", щоб перейти на навігаційний розділ незалежно від того, на якій сторінці ви перебуваєте? @shanabus
kine456

2
Найкращий спосіб зробити це, не потрібен модуль чи плагін!
Андреас Даутіс

Навіть працює з <front>#gohere. Приємно! :)
Уельфа

6

Спробуйте скористатися модулем недійсності :

Пустотне меню дозволяє налаштувати спеціальні значення для тегів для використання в системі меню Drupal 7. Ви можете налаштувати до 10 різних недійсних тегів з будь-яким значенням та безперешкодно використовувати їх у системі меню Drupal.
...
Як додатковий бонус, і завдяки функціональності цього модуля ви також можете використовувати фактичні якіри як пункти меню, які не мають інших цілей, крім заповнювачів. Це робиться за допомогою тегу void, який встановлюється на javascript: void (0); або навіть простий хеш-тег #. Перевага від використання цього модуля для special_menu_items для цього полягає в тому, що ваші меню не потребуватимуть додаткової стилізації для обліку доданих тегів span, які використовуються special_menu_items, і буде 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

Просто налаштування externalзробити TRUEце для мене. Випробуваний у Друаплі 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>в цілі

Тепер повернемося на вашу домашню сторінку, і ви побачите, що пункт меню, який ми змінили в кліку, не переходить нікуди


Ласкаво просимо до питань та питань Друпалу. Було б корисніше пояснити, як використовувати спеціальні пункти меню, а не просто вставляти зображення. Ви можете розглянути можливість покращення своєї відповіді. Дякую.
Коджо

1
я думаю, зараз це нормально
Elaz
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.