web-dev-qa-db-fra.com

Comment ajouter par programme des liens à la variable de liens

J'utilise Drupal 6 et je voudrais modifier le $links variable pour inclure d'autres liens par programmation. J'ai cherché haut et bas sur Google sur la façon de faire cela en vain. Est-ce que quelqu'un sait comment faire ça?

8
user5013

Drupal 6

Dans Drupal 6, vous ne pouvez pas utiliser de hooks ou modifier les hooks à l'intérieur des thèmes, vous devrez donc créer un module personnalisé pour modifier les liens. Une fois terminé, vous voudrez implémenter hook_link() (si vous créez un nouveau lien) ou hook_link_alter() (si vous voulez modifier un lien existant).

Ajout d'un nouveau lien:

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

Modification des liens existants:

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

Dans Drupal 7, c'est un peu plus simple, car les thèmes peuvent implémenter des crochets alter. Le crochet alter que vous recherchez est 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;
}

Vous pouvez le placer directement dans votre fichier template.php.

22
user7

En supposant que vous parlez de liens qui sont rendus sur node.tpl.php, vous devrez implémenter hook_link par exemple regardez node_link . Et si vous débutez avec drupal hooks, cela doit se produire dans un module personnalisé, alors disons que le nom de votre module personnalisé est "foo", vous devrez écrire une fonction appelée foo_link qui devrait avoir les mêmes arguments que hook_link.

1
Dipen