it-swarm-id.com

Ubah simpul di hook_node_view () untuk Drupal 7

Saya mencoba mengubah array konten, dan menambahkan tautan tambahan.

  • Saya tidak ingin menggunakan modul Tautan; tautan ini akan dibuat dengan bidang lain, itu seperti modul Bidang Komputer (yang sedang dalam tahap pengembangan untuk Drupal 7, dan saya lebih suka tidak menggunakannya).
  • Saya tidak ingin hanya menambahkan HTML/PHP ke node.tpl.php. Saya ingin ini menjadi solusi yang bagus.

Saya sudah mencoba menambahkan bidang baru ke $node->content. Saya berhasil menyalin bidang lain dan menampilkannya sekali lagi. Saya dapat mengubah label bidang itu, tetapi bukan tautannya sendiri.

Adakah yang tahu cara melanjutkan?

4
wtk

Anda dapat melakukan ini dengan menerapkan hook_node_view .

Sebagai contoh:

function my_module_node_view($node, $view_mode, $langcode) {
  switch ($node->type) {
    case 'my_node_type':
      $node->content['extra_link'] = array(
          '#weight' => 10,
          '#theme' => 'link',
          '#path' => 'path_to_content',
          '#text' => t('An extra link'),
          '#options' => array(
              'attributes' => array(),
              'html' => FALSE
          ),
      );
      break;
  }
}
9
Whiskey

Jawaban Whisky akan berfungsi sebagian besar waktu, tetapi tidak berfungsi jika Anda mencoba menambahkan argumen kueri ke akhir URL. Dalam kasus saya, saya sedang mengisi ulang bidang Referensi Entitas yang membutuhkan URL yang terlihat seperti ini:

node/add/er-engagement?field_er_cal_entity_reference=19

Jawaban Whiskey sepertinya tidak mengizinkan ini, apakah 'html' itu BENAR atau SALAH.

Akan tetapi, atribut '#markup' akan berfungsi.

function hook_node_view($node, $view_mode, $langcode){
  switch ($node->type) {
      case 'er_event':
        $node->content['links']['extra_link'] = array(
            '#weight' => 100, // place it at the bottom
            '#markup' => l('Add attendee data', 'node/add/er-engagement', array('query' => array('field_er_cal_entity_reference' => $node->nid))),
        );
        break;
}

}

Itu bagus jika Anda membutuhkan argumen di sana. Dokumentasi kurang, tapi terima kasih untuk posting ini , membantu untuk memeriksa Drupal blog 7.module, cukup cari '#links' untuk mendapatkan petunjuk.

3
mikeDOTexe

Untuk menambahkan fragmen permintaan cukup taruh di dalam array opsi:

$node->content['links']['extra_link'] = array(
    '#weight' => 10,
    '#theme' => 'link',
    '#path' => 'node/add/er-engagement',
    '#text' => t('Add attendee data'),
    '#options' => array(
        'html' => FALSE,
        'query' => array('field_er_cal_entity_reference' => $node->nid)
    ),
);

Ini akan mengembalikan URL seperti ini: node/add/er-engagement? Field_er_cal_entity_reference = 13

1
Aronne