メニューにハッシュリンクを追加するにはどうすればよいですか?


回答:


15

残念ながら、私が知る限り、Drupalはこれをすぐに実行することはできません。ただし、特別なメニュー項目モジュールを使用して新しいメニュー項目を作成し、パス設定に「nolink」を配置できます。


残念ながら、このモジュールはバージョン6用であり、バージョン7用ではありませんが、変更できます。とにかくありがとう 。
モハマドサラマ

1
むしろ、l('linktext', '', array('fragment' => ' ', 'external' => TRUE));@ Sebastianの応答に従って利用してください。
ダンカンムー

「特別なメニュー項目」はを追加し<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
それを行う最良の方法、モジュールやプラグインは必要ありません!
アンドレアス・ダウティス14年

でも動作し<front>#gohereます。いいね!:)
Huelfe

6

モジュールVoid Menuを使用してみてください:

Voidメニューを使用すると、Drupal 7メニューシステムで使用するタグに特別な値を設定できます。任意の値で最大10個の異なるvoidタグをカスタマイズし、Drupalメニューシステム内で自由に使用できます。
...
追加のボーナスとして、またこのモジュールの機能により、実際のアンカーをプレースホルダー以外の目的に使用しないメニュー項目として使用することもできます。これは、javascriptに設定されたvoidタグで実現されます。void(0); または単純なハッシュタグ#さえも。このためにspecial_menu_itemsよりもこのモジュールを使用する利点は、special_menu_itemsによって使用される追加のspanタグを考慮するためにメニューに追加のスタイリングを必要とせず、すべてのアンカーに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

ただ、設定externalTRUE私のためにそれを行います。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;
  }
}

「コードのみ」の回答を投稿しないでください。これは問題を解決するかもしれませんが、読者に問題を解決する理由、ここでの選択肢と比較して提供するものを説明しません。
ショーンコン

0

次に、階層メニュー用の特別なメニュー項目とDHTMLメニューをインストールします。

  • x-exampleボキャブラリーを追加して、それに用語を追加します
  • 分類メニューセクションセットメニューの場所よりも[x-exampleを変更]をクリックします。
  • ブロックに移動し、メニューをブロックに設定します
  • メニュー管理の変更では、自動的に追加された条件が表示されます
  • メニュー項目の変更をクリックし<void>、ターゲットでこれを過ぎます

今、あなたのホームページに戻ると、クリックして変更したメニュー項目がどこにも行かないものが表示されます


Drupal Q&Aへようこそ。写真を貼り付けるだけでなく、特別なメニュー項目を使用する方法を説明する方が便利です。回答を充実させることを検討してください。ありがとうございました。
古城

1
今は大丈夫だと思う
elaz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.