it-swarm.com.de

Ändern Sie den Knoten in hook_node_view () für Drupal 7

Ich versuche, das Inhaltsarray zu ändern und einen zusätzlichen Link hinzuzufügen.

  • Ich möchte das Link-Modul nicht verwenden. Dieser Link wird mit anderen Feldern generiert. Es handelt sich um ein Modul für berechnete Felder (das sich in der Entwicklungsphase für Drupal 7 befindet und ich es lieber nicht verwenden möchte).
  • Ich möchte nicht einfach HTML/PHP zu node.tpl.php hinzufügen. Ich möchte, dass dies eine gute Lösung ist.

Ich habe versucht, $node->content Ein neues Feld hinzuzufügen. Ich habe es geschafft, ein anderes Feld zu kopieren und es erneut anzuzeigen. Ich konnte die Bezeichnung dieses Feldes ändern, aber nicht den Link selbst.

Hat jemand eine Idee, wie es weitergehen soll?

4
wtk

Sie können dies tun, indem Sie hook_node_view implementieren.

Zum Beispiel:

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

Die Antwort von Whisky funktioniert die meiste Zeit, hat aber nicht funktioniert, wenn Sie versuchen , am Ende der URL Abfrageargumente hinzuzufügen. In meinem Fall fülle ich ein Feld Entity Reference vor, das eine URL benötigt, die folgendermaßen aussieht:

node/add/er-engagement?field_er_cal_entity_reference=19

Die Antwort von Whisky scheint dies nicht zuzulassen, egal ob 'html' WAHR oder FALSCH ist.

Das Attribut '#markup' funktioniert jedoch.

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

}}

Das funktioniert gut, wenn Sie diese Argumente brauchen. Die Dokumentation fehlt, aber dank dieses Beitrags , es hilft, Drupal 7s blog.module zu überprüfen, suchen Sie einfach nach '#links', um einen Hinweis zu erhalten.

3
mikeDOTexe

Um ein Abfragefragment hinzuzufügen, fügen Sie es einfach in das Optionsarray ein:

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

Dies gibt eine URL wie folgt zurück: node/add/er-engag? Field_er_cal_entity_reference = 13

1
Aronne