Bagaimana secara terprogram menambahkan tautan ke variabel tautan

8

Saya menggunakan Drupal 6 dan ingin memodifikasi $linksvariabel untuk memasukkan tautan lain secara terprogram. Saya telah mencari tinggi dan rendah di Google tentang bagaimana melakukan ini tanpa hasil. Apakah ada yang tahu bagaimana melakukan ini?

user5013
sumber

Jawaban:

22

Drupal 6

Di Drupal 6, Anda tidak bisa menggunakan kait atau mengubah kait di dalam tema, jadi Anda harus membuat modul khusus untuk memodifikasi tautan. Setelah selesai, Anda ingin menerapkan hook_link()(jika Anda membuat tautan baru) atau hook_link_alter()(jika Anda ingin mengubah tautan yang ada).

Menambahkan tautan baru:

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;
}

Memodifikasi tautan yang ada:

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

Dalam Drupal 7, ini sedikit lebih mudah, karena tema dapat menerapkan kait pengubah. Pengait yang Anda cari adalah 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;
}

Anda dapat menempatkan ini langsung di template.phpfile Anda .


sumber
Terima kasih, ini persis apa yang saya cari! Anda menyelamatkan saya dari penerapan penyelesaian masalah yang menarik menggunakan file template.php untuk Drupal 6. Apakah solusi ini berfungsi dengan konten yang dihasilkan oleh tampilan?
user5013
@ user5013 Jika Anda berpikir tentang tampilan node atau teaser penuh dalam tampilan, itu harus bekerja di luar kotak. Jika Anda ingin menambahkan tautan ke tampilan, Anda juga dapat melakukannya: cukup ubah nilainya 'href'menjadi apa pun yang Anda inginkan.
Tidak, saya sedang memikirkan apakah solusi ini akan berfungsi dengan tampilan bidang dalam tampilan.
user5013
@ user5013 Ah, maka dalam kasus itu, tidak: tautan hanya ditambahkan ketika node sudah sepenuhnya dibangun. Namun, banyak tautan yang biasanya muncul di bilah tautan tersedia sebagai bidang terpisah di Tampilan.
1
Tautan @MotoTribe dirender dalam urutan yang sama dengan yang ditampilkan dalam array, jadi hanya manipulasi array langsung untuk mengubah urutan. Contoh ditambahkan.
1

Dengan asumsi Anda berbicara tentang tautan yang dirender di node.tpl.php, Anda perlu mengimplementasikan hook_link misalnya, lihat node_link . Dan jika Anda baru mengenal kait drupal maka ini perlu terjadi dalam modul khusus, jadi katakanlah nama modul khusus Anda adalah "foo" Anda harus menulis fungsi yang disebut foo_linkyang harus memiliki argumen yang sama dengan hook_link.

Dipen
sumber