ฉันจะเพิ่มลิงค์แฮชในเมนูได้อย่างไร


21

มีวิธีการเพิ่มลิงค์ hashed ในเมนูภายใต้เมนู drupal เพียงทำรายการเมนูที่กระโดดลงไปที่จุดยึดหรือรหัสบนหน้า?


หากคุณใช้ URL ที่แน่นอนในการเริ่มต้นมันจะทำงาน Like yourdomain.com/somepath#someother
hzak

คำตอบ:


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 ใน anchor tag ด้วย hash ด้วย 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 # gohere

URL อัตโนมัติจะเปลี่ยนให้เป็นเหมือน

เกี่ยวกับเรา # gohere


1
สิ่งที่เกี่ยวกับการอยู่ในหน้าคุณอยู่? ตัวอย่างเช่นพยายามรับลิงก์ข้ามไปยังการนำทางเพื่อนำคุณไปยังส่วนการนำทางโดยไม่คำนึงถึงหน้าที่คุณอยู่ @shanabus
kine456

2
วิธีที่ดีที่สุดที่จะทำไม่ต้องใช้โมดูลหรือปลั๊กอิน!
Andreas Daoutis

<front>#gohereแม้จะทำงานร่วมกับ ดี! :)
Huelfe

6

ลองใช้โมดูลVoid Menu :

เมนูโมฆะช่วยให้คุณสามารถกำหนดค่าพิเศษให้กับแท็กสำหรับใช้ในระบบเมนู 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ทำเพื่อฉัน ผ่านการทดสอบใน 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-example กว่าใน taxonomy menu set set menu menu
  • ไปที่ blocs ตั้งค่าเมนูเป็น bloc
  • ในการปรับเปลี่ยนผู้ดูแลระบบเมนูคุณจะเห็นเงื่อนไขที่เพิ่มโดยอัตโนมัติ
  • คลิกที่แก้ไขรายการเมนูแล้วผ่านสิ่งนี้<void>ในเป้าหมาย

ตอนนี้กลับไปที่หน้าแรกของคุณและคุณจะเห็นว่ารายการเมนูที่เรามีการแก้ไขในการคลิกที่ไม่ได้ไปไหน


ยินดีต้อนรับสู่ Drupal Q&A มันจะมีประโยชน์มากขึ้นในการอธิบายวิธีใช้รายการเมนูพิเศษแทนที่จะวางเพียงภาพ คุณอาจพิจารณาปรับปรุงคำตอบของคุณ ขอขอบคุณ.
Kojo

1
ผมคิดว่าตอนนี้ก็ ok
elaz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.