So fügen Sie der Linkvariablen programmgesteuert Links hinzu

8

Ich verwende Drupal 6 und möchte die $linksVariable so ändern , dass sie programmgesteuert andere Links enthält. Ich habe bei Google hoch und niedrig gesucht, wie dies ohne Erfolg funktioniert. Weiß jemand, wie man das macht?

user5013
quelle

Antworten:

22

Drupal 6

In Drupal 6 können Sie keine Hooks verwenden oder Hooks in Designs ändern. Sie müssen daher ein benutzerdefiniertes Modul erstellen , um die Links zu ändern. Sobald Sie fertig sind, möchten Sie implementieren hook_link()(wenn Sie einen neuen Link erstellen) oder hook_link_alter()(wenn Sie einen vorhandenen Link ändern möchten).

Hinzufügen eines neuen Links:

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

Bestehende Links ändern:

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

In Drupal 7 ist dies etwas einfacher, da Themen Alter Hooks implementieren können. Der Alter Hook, den Sie suchen, ist 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;
}

Sie können dies direkt in Ihre template.phpDatei einfügen.


quelle
Danke, genau das habe ich gesucht! Sie haben mich vor der Implementierung einer interessanten Problemumgehung mit der Datei template.php für Drupal 6 bewahrt. Würde diese Lösung mit Inhalten funktionieren, die durch Ansichten generiert wurden?
user5013
@ user5013 Wenn Sie über die vollständige Knoten- oder Teaser-Anzeige in einer Ansicht nachdenken, sollte dies sofort funktionieren. Wenn Sie einer Ansicht einen Link hinzufügen möchten, können Sie dies auch tun: Ändern 'href'Sie einfach den Wert von auf den gewünschten Wert .
Nein, ich habe darüber nachgedacht, ob diese Lösung mit den in einer Ansicht angezeigten Feldern funktioniert.
user5013
@ user5013 Ah, dann in diesem Fall nein: Die Links werden nur hinzugefügt, wenn der Knoten vollständig aufgebaut ist. Viele der Links, die normalerweise in der Linkleiste angezeigt werden, sind jedoch in Ansichten als separate Felder verfügbar.
1
@ FotoTribe-Links werden in derselben Reihenfolge gerendert, in der sie im Array angezeigt werden. Es ist also nur eine einfache Manipulation des Arrays, um die Reihenfolge zu ändern. Beispiele hinzugefügt.
1

Angenommen, Sie sprechen von Links, die auf node.tpl.php gerendert werden, müssen Sie hook_link implementieren, z. B. node_link . Und wenn Sie Drupal-Hooks noch nicht kennen, muss dies in einem benutzerdefinierten Modul geschehen. Nehmen wir also an, Ihr benutzerdefinierter Modulname lautet "foo". Sie müssen eine aufgerufene Funktion schreiben, foo_linkdie dieselben Argumente wie hook_link haben sollte.

Dipen
quelle