메뉴에 해시 링크를 어떻게 추가합니까?


답변:


15

안타깝게도 Drupal은이 작업을 즉시 수행 할 수 없습니다. 그러나 특수 메뉴 항목 모듈을 사용하여 새 메뉴 항목을 만들고 경로 설정에 "nolink"를 배치 할 수 있습니다 .


불행히도이 모듈은 버전 6 용이며 7 용 모듈은 없지만 수정할 수는 있습니다. 어쨌든 고마워.
mohamad salama

1
오히려 l('linktext', '', array('fragment' => ' ', 'external' => TRUE));@Sebastian의 응답에 따라 사용하십시오.
Duncanmoo

"특별 메뉴 항목"에 추가 <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한 다음 해시 문자를 추가하십시오.


13

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

node / 16 # gohere

자동 URL은 다음과 같이 변경됩니다.

about-us # gohere


1
현재 페이지에 머무르는 것은 어떻습니까? 예를 들어 어떤 페이지에 관계없이 탐색으로 건너 뛰기 링크를 사용하여 탐색 div로 이동하려고합니까? @shanabus
kine456

2
가장 좋은 방법은 모듈이나 플러그인이 필요하지 않습니다!
Andreas Daoutis

심지어 작동합니다 <front>#gohere. 좋은! :)
Huelfe

6

Void Menu 모듈을 사용해보십시오 :

Void 메뉴를 사용하면 Drupal 7 메뉴 시스템에서 사용할 특수 값을 태그로 구성 할 수 있습니다. 원하는 값으로 최대 10 개의 서로 다른 void 태그를 사용자 정의하고 Drupal 메뉴 시스템 내에서 자유롭게 사용할 수 있습니다.
...
추가 보너스 및이 모듈의 기능으로 인해 실제 앵커를 자리 표시 자 이외의 다른 용도로 사용하지 않는 메뉴 항목으로 사용할 수도 있습니다. 이것은 javascript로 설정된 void 태그로 수행됩니다. void (0); 또는 간단한 해시 태그 #. special_menu_items보다이 모듈을 사용하는 이점은 special_menu_items에서 사용하는 추가 범위 태그를 설명하기 위해 메뉴에 추가 스타일링이 필요하지 않으며 모든 앵커에 href 속성이 있어야하므로 W3C에 유효하다는 것입니다.

아주 좋은 해결책입니다!


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. 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;
  }
}

"코드 전용"답변은 게시하지 마십시오. 이 방법으로 문제를 해결할 수는 있지만 문제를 해결하는 이유 또는 여기에있는 대안과 비교 하여 문제가 무엇인지 독자에게 설명하지는 않습니다 .
Shawn Conn

0

계층 메뉴를위한 특수 메뉴 항목 및 DHTML 메뉴를 설치 한 후 다음을 수행하십시오.

  • x 예제 어휘를 추가하고 용어에 추가하십시오
  • 분류 메뉴 섹션 설정 메뉴 위치보다 x 예제 수정을 클릭하십시오.
  • 블록으로 이동 메뉴를 블록으로 설정
  • 메뉴 관리자 수정에서 용어가 자동으로 추가 된 것을 볼 수 있습니다
  • 메뉴 항목 수정을 클릭 한 다음 <void>대상에 붙여 넣습니다.

이제 홈페이지로 돌아 가면 클릭으로 수정 한 메뉴 항목이 아무데도 가지 않는 것을 볼 수 있습니다


Drupal Q & A에 오신 것을 환영합니다. 그림을 붙여 넣는 대신 특수 메뉴 항목을 사용하는 방법을 설명하는 것이 더 유용합니다. 답을 향상시키는 것을 고려할 수 있습니다. 고맙습니다.
Kojo

1
난 이제 괜찮아 생각
elaz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.