it-swarm.it

Modifica nodo in hook_node_view () per Drupal 7

Sto cercando di modificare l'array di contenuti e aggiungere un collegamento aggiuntivo.

  • Non voglio usare il modulo Link; questo link verrà generato con altri campi, è qualcosa come il modulo Computed Field (che è in fase di sviluppo per Drupal 7, e preferirei non usarlo).
  • Non voglio solo aggiungere HTML/PHP a node.tpl.php. Voglio che questa sia una soluzione piacevole.

Ho provato ad aggiungere un nuovo campo a $node->content. Sono riuscito a copiare un altro campo e visualizzarlo di nuovo. Sono stato in grado di cambiare l'etichetta di quel campo, ma non il link stesso.

Qualcuno ha qualche idea su come procedere?

4
wtk

Puoi farlo implementando hook_node_view .

Per esempio:

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

La risposta di Whisky funzionerà per la maggior parte del tempo, ma non funzionerà se stai tentando di aggiungere argomenti di query alla fine dell'URL. Nel mio caso, sto prepopolando un campo Entity Reference che necessita di un URL simile al seguente:

node/add/er-engagement?field_er_cal_entity_reference=19

La risposta di Whisky non sembra consentire questo, sia che html sia VERO o FALSO.

L'attributo '#markup' funzionerà comunque.

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

}

Funziona benissimo se hai bisogno di questi argomenti. La documentazione è carente, ma grazie a questo post , aiuta a controllare Drupal 7, basta cercare '#link' per avere un indizio.

3
mikeDOTexe

Per aggiungere un frammento di query basta inserirlo nell'array di opzioni:

$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)
    ),
);

Questo restituirà un URL come questo: node/add/er-engagement? Field_er_cal_entity_reference = 13

1
Aronne