มีวิธีการเพิ่มลิงค์ hashed ในเมนูภายใต้เมนู drupal เพียงทำรายการเมนูที่กระโดดลงไปที่จุดยึดหรือรหัสบนหน้า?
มีวิธีการเพิ่มลิงค์ hashed ในเมนูภายใต้เมนู drupal เพียงทำรายการเมนูที่กระโดดลงไปที่จุดยึดหรือรหัสบนหน้า?
คำตอบ:
น่าเสียดายเท่าที่ฉันทราบ Drupal ไม่สามารถทำสิ่งนี้ออกนอกกรอบได้ อย่างไรก็ตามคุณสามารถใช้โมดูลรายการเมนูพิเศษเพื่อสร้างรายการเมนูใหม่และวาง "nolink" ในการตั้งค่าเส้นทาง
l('linktext', '', array('fragment' => ' ', 'external' => TRUE));
การตอบสนองของ @ Sebastian
<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 # gohere
URL อัตโนมัติจะเปลี่ยนให้เป็นเหมือน
เกี่ยวกับเรา # gohere
<front>#gohere
แม้จะทำงานร่วมกับ ดี! :)
ลองใช้โมดูลVoid Menu :
เมนูโมฆะช่วยให้คุณสามารถกำหนดค่าพิเศษให้กับแท็กสำหรับใช้ในระบบเมนู 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
ทำเพื่อฉัน ผ่านการทดสอบใน Druapl 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>
ในเป้าหมายตอนนี้กลับไปที่หน้าแรกของคุณและคุณจะเห็นว่ารายการเมนูที่เรามีการแก้ไขในการคลิกที่ไม่ได้ไปไหน