Bagaimana cara menambahkan tautan hash di menu?

21

Apakah ada cara untuk menambahkan tautan hash dalam menu di bawah menu drupal untuk hanya membuat item menu yang melompat ke jangkar atau id pada halaman?

mohamad salama
sumber
Jika Anda menggunakan url Mutlak di awal itu akan berfungsi. Seperti yourdomain.com/somepath#someother
hzak

Jawaban:

15

Sayangnya sejauh yang saya ketahui, Drupal tidak dapat melakukan ini di luar kebiasaan. Namun, Anda dapat menggunakan modul item menu Khusus untuk membuat item menu baru, dan tempatkan "nolink" di pengaturan jalur.

kiamlaluno
sumber
sayangnya modul ini untuk versi 6 dan tidak ada yang untuk 7 tetapi dapat dimodifikasi. terima kasih.
mohamad salama
1
Alih-alih memanfaatkan l('linktext', '', array('fragment' => ' ', 'external' => TRUE));sebagai per @ tanggapan Sebastian.
Duncanmoo
"Item menu spesial" menambahkan <span title="" class="nolink">...</span>. Masalahnya tidak lain adalah kurangnya CSS. Cukup salin ul.menu a{}CSS dan tempel ul.menu li span.nolink{}. Ini bekerja dengan baik untuk saya. Tapi itu menonaktifkan panah drop-down yang diaktifkan oleh li.expanded. :(
Mayeenul Islam
Maaf untuk mengirim terlambat, tapi saya baru saja menemukan utas ini. Alih-alih mengubah css, Anda bisa menggunakan js kecil untuk membungkus nolink di tag jangkar dengan hash. Dengan jQuery, itu akan menjadijQuery("span.nolink").wrap("<a href='#'></a>");
Goldentoa11
15

Ikuti apa yang dilaporkan dalam komentar untuk l()dokumentasi .

Untuk membuat tautan ke jangkar bernama (mis. "#Namedanchor"), Anda perlu menggunakan work-around kecil.

l('linktext', '', array('fragment' => 'namedanchor', 'external' => TRUE));

Untuk membuat tautan khusus-hash (ke "#"), Anda perlu menyesuaikannya dengan:

l('linktext', '', array('fragment' => ' ', 'external' => TRUE));

(Perhatikan bahwa fragmen berisi ruang.)

 

Di Drupal 7, atur "HTML" ke TRUE, lalu tambahkan karakter hash.

Sebastian
sumber
13

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

node / 16 # gohere

url otomatis akan mengubahnya menjadi seperti

tentang-kita # kemana-mana

squarecandy
sumber
1
Bagaimana dengan tetap di halaman tempat Anda berada? Misalnya, mencoba mendapatkan tautan Lewati ke Navigasi untuk membawa Anda ke div navigasi terlepas dari halaman apa yang sedang Anda buka? @shanabus
kine456
2
Cara terbaik untuk melakukannya, tidak perlu modul atau plugin!
Andreas Daoutis
Bahkan bekerja dengan <front>#gohere. Bagus! :)
Huelfe
6

Coba gunakan modul Void Menu :

Menu Void memungkinkan Anda untuk mengonfigurasi nilai-nilai khusus pada tag untuk digunakan dalam sistem menu Drupal 7. Anda dapat menyesuaikan hingga 10 tag void yang berbeda dengan nilai apa pun yang Anda inginkan dan menggunakannya secara bebas di dalam sistem menu Drupal.
...
Sebagai bonus tambahan, dan karena fungsionalitas modul ini, Anda juga dapat menggunakan jangkar aktual sebagai item menu yang tidak memiliki tujuan lain selain placeholder. Ini dilakukan dengan tag void yang diatur ke javascript: void (0); atau bahkan tag hash # sederhana. Keuntungan menggunakan modul ini daripada special_menu_items untuk ini adalah bahwa menu Anda tidak akan memerlukan tambahan gaya untuk memperhitungkan tag rentang tambahan yang digunakan oleh special_menu_items, dan akan menjadi W3C valid karena setiap jangkar harus memiliki atribut href.

Ini solusi yang sangat bagus!

Andriyun
sumber
2

Baru saja menemui masalah yang sama. Saya perlu menambahkan item menu dengan hash-link secara terprogram. Kode saya:

// 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);
EDWH
sumber
1

Hanya pengaturan externaluntuk TRUEmelakukannya untuk saya. Diuji dalam Druapl 7.32.

l('Some Name', '#', array('external' => TRUE));

timofey.com
sumber
0

Menggunakan fungsi terjemahan Drupals juga berfungsi.

/**
 * 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';
  }
}
Sebuah daratan.
sumber
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;
}

Anda dapat menambahkan tautan hash ke menu menggunakan kode di atas.

Guru
sumber
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;
  }
}
ccx105
sumber
Tolong jangan posting jawaban "hanya kode". Meskipun ini dapat memecahkan masalah, itu tidak menjelaskan kepada pembaca mengapa itu memecahkan masalah , atau apa yang disediakannya dibandingkan dengan alternatif di sini .
Shawn Conn
0

instal item menu Spesial dan Menu DHTML untuk menu hierarkis kemudian:

  • tambahkan kosakata x-contoh Anda dan tambahkan ke dalamnya istilah Anda
  • klik ubah x-contoh daripada di bagian menu taksonomi set lokasi menu
  • pergi ke blok atur menu ke blok
  • di menu admin modifikasi Anda melihat istilah ditambahkan secara otomatis
  • klik pada memodifikasi item menu lalu lewati ini <void>di target

sekarang kembali ke halaman rumah Anda dan Anda akan melihat bahwa item menu yang telah kami modifikasi di klik itu tidak pergi ke mana pun

Elaz
sumber
Selamat datang di Tanya Jawab Drupal. Akan lebih bermanfaat untuk menjelaskan cara menggunakan item menu khusus daripada hanya menempelkan gambar. Anda dapat mempertimbangkan untuk meningkatkan jawaban Anda. Terima kasih.
Kojo
1
saya pikir sekarang tidak apa
elaz