Comment ajouter par programme des liens à la variable de liens

8

J'utilise Drupal 6 et je voudrais modifier la $linksvariable 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?

user5013
la source

Réponses:

22

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 cela fait, vous voudrez mettre en œuvre hook_link()(si vous créez un nouveau lien) ou hook_link_alter()(si vous souhaitez 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 d'autres crochets. L'autre crochet 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 template.phpfichier.


la source
Merci, c'est exactement ce que je cherchais! Vous m'avez évité de mettre en œuvre un travail intéressant autour de l'utilisation du fichier template.php pour Drupal 6. Cette solution fonctionnerait-elle avec le contenu généré par les vues?
user5013
@ user5013 Si vous pensez à l'affichage complet du nœud ou du teaser dans une vue, cela devrait fonctionner hors de la boîte. Si vous souhaitez ajouter un lien vers une vue, vous pouvez le faire aussi: changez simplement la valeur de celle 'href'que vous souhaitez.
Non, je me demandais si cette solution fonctionnerait avec les champs affichés dans une vue.
user5013
@ user5013 Ah, alors dans ce cas, non: les liens ne sont ajoutés que lorsque le nœud est entièrement construit. Cependant, la plupart des liens qui apparaissent généralement dans la barre de liens sont disponibles sous forme de champs séparés dans les vues.
1
Les liens @MotoTribe sont rendus dans le même ordre qu'ils apparaissent dans le tableau, donc c'est juste une manipulation directe du tableau pour changer l'ordre. Exemples ajoutés.
1

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 êtes nouveau dans les hooks drupal, 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_linkqui devrait avoir les mêmes arguments que hook_link.

Dipen
la source