วิธีเพิ่มลิงก์ไปยังตัวแปรลิงก์โดยทางโปรแกรม


8

ฉันใช้ Drupal 6 และต้องการแก้ไข$linksตัวแปรเพื่อรวมลิงก์อื่น ๆ แบบเป็นโปรแกรม ฉันค้นหาด้วย Google ในราคาที่สูงและต่ำในการทำสิ่งนี้เพื่อประโยชน์ มีใครรู้วิธีการทำเช่นนี้?

คำตอบ:


22

Drupal 6

ใน Drupal 6 คุณไม่สามารถใช้ hooks หรือแก้ไข hooks ภายในธีมได้ดังนั้นคุณจะต้องสร้างโมดูลที่กำหนดเองเพื่อแก้ไขลิงก์ เมื่อเสร็จแล้วคุณจะต้องนำไปใช้hook_link()(ถ้าคุณกำลังสร้างลิงค์ใหม่) หรือhook_link_alter()(ถ้าคุณต้องการแก้ไขลิงค์ที่มีอยู่)

เพิ่มลิงค์ใหม่:

example_link($type, $object, $teaser = FALSE) {
  $links = array();
  // Add a custom link to nodes
  if ($type == 'node') {
    $links['example_mylink'] = array(
      'title' => t('Test link'),
      'href' => 'foo',
      'attributes' => array(
        'title' => 'Test link',
      ),
    );
  }
  return $links;
}

การแก้ไขลิงก์ที่มีอยู่:

example_link_alter(&$links, $node, $comment = NULL) {
  // Remove the read more link
  unset($links['node']['node_read_more']);

  // Change the title of the read more link
  $links['node']['node_read_more']['title'] = t('More information');

  // Move read more link to first slot
  $link_read_more = $links['node']['node_read_more'];
  unset($links['node']['node_read_more']);
  $links = $links['node'];
  $links['node'] = array(
    'node_read_more' => $link_read_more,
  ) + $links;

  // Move link to the last slot
  $link_read_more = $links['node']['node_read_more'];
  unset($links['node']['node_read_more']);
  $links['node']['node_read_more'] = $link_read_more;
}

Drupal 7

ใน Drupal 7 นี่เป็นสิ่งที่ตรงไปตรงมามากกว่านี้เนื่องจากชุดรูปแบบสามารถใช้ hooks hooks ได้ เบ็ดแก้ไขที่คุณกำลังมองหาคือhook_node_view_alter():

function example_node_view_alter(&$build) {
  // Remove the read more link
  unset($build['links']['node']['#links']['node-readmore']);

  // Add your own custom link
  $build['links']['node']['#links']['example-mylink'] = array(
    'title' => t('Test link'), 
    'href' => 'foo', 
    'html' => TRUE, 
    'attributes' => array(
      'title' => 'Test link',
    ),
  );

  // Move read more link to first slot
  $link_read_more = $build['links']['node']['#links']['node_read_more'];
  unset($build['links']['node']['#links']['node_read_more']);
  $links = $build['links']['node']['#links'];
  $build['links']['node']['#links'] = array(
    'node_read_more' => $link_read_more,
  ) + $links;

  // Move link to the last slot
  $link_read_more = $build['links']['node']['#links']['node_read_more'];
  unset($build['links']['node']['#links']['node_read_more']);
  $build['links']['node']['#links']['node_read_more'] = $link_read_more;
}

คุณสามารถวางสิ่งนี้ลงในtemplate.phpไฟล์ของคุณได้โดยตรง


ขอบคุณนี่คือสิ่งที่ฉันกำลังมองหา! คุณบันทึกฉันจากการใช้งานเทมเพลตที่น่าสนใจโดยใช้ไฟล์ template.php สำหรับ Drupal 6 โซลูชันนี้จะทำงานกับเนื้อหาที่สร้างโดยมุมมองได้หรือไม่
user5013

@ user5013 หากคุณกำลังคิดเกี่ยวกับโหนดแบบเต็มหรือการแสดงทีเซอร์ในมุมมองมันควรจะทำงานนอกกรอบ หากคุณต้องการเพิ่มลิงค์ไปยังมุมมองคุณสามารถทำได้เช่นกัน: เพียงแค่เปลี่ยนค่าของ'href'สิ่งที่คุณต้องการ

ไม่ฉันกำลังคิดเกี่ยวกับว่าวิธีแก้ปัญหานี้จะทำงานกับเขตข้อมูลที่แสดงในมุมมอง
user5013

@ user5013 Ah จากนั้นในกรณีนั้นไม่ใช่: ลิงก์จะถูกเพิ่มเฉพาะเมื่อโหนดถูกสร้างขึ้นอย่างสมบูรณ์ แม้ว่าลิงก์จำนวนมากที่มักจะแสดงในแถบลิงก์จะมีให้เป็นฟิลด์แยกใน Views

1
@MotoTribe ลิงก์แสดงผลในลำดับเดียวกันกับที่ปรากฏในอาเรย์ดังนั้นมันจึงเป็นเพียงการจัดการอาเรย์โดยตรงเพื่อเปลี่ยนลำดับ ตัวอย่างที่เพิ่มเข้ามา

1

สมมติว่าคุณกำลังพูดถึงการเชื่อมโยงที่ได้รับการแสดงผลบน node.tpl.php คุณจะต้องใช้hook_linkตัวอย่างเช่นดูที่node_link และถ้าคุณยังใหม่กับ drupal hooks ความต้องการนี้จะเกิดขึ้นในโมดูลที่กำหนดเองดังนั้นสมมติว่าชื่อโมดูลที่กำหนดเองของคุณคือ "foo" คุณจะต้องเขียนฟังก์ชันที่เรียกว่าfoo_linkควรมีอาร์กิวเมนต์เหมือนกับ hook_link

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