it-swarm.com.de

So fügen Sie der Linkvariablen programmgesteuert Links hinzu

Ich verwende Drupal 6 und möchte das $links Variable, um andere Links programmgesteuert einzuschließen. Ich habe bei Google hoch und niedrig gesucht, wie dies ohne Erfolg funktioniert. Weiß jemand, wie man das macht?

8
user5013

Drupal 6

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

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 gesuchte Alter Hook 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.php - Datei einfügen.

22
user7

Angenommen, Sie sprechen von Links, die auf node.tpl.php gerendert werden, müssen Sie hook_link implementieren. Schauen Sie sich beispielsweise node_link an. Und wenn Sie neu in drupal hooks) sind, muss dies in einem benutzerdefinierten Modul geschehen. Nehmen wir also an, Ihr benutzerdefinierter Modulname lautet "foo". Sie müssen eine Funktion namens foo_link, die dieselben Argumente wie hook_link haben sollten.

1
Dipen