Come aggiungere a livello di codice collegamenti alla variabile collegamenti


8

Sto usando Drupal 6 e vorrei modificare la $linksvariabile per includere altri collegamenti a livello di codice. Ho cercato su Google in alto e in basso su come farlo senza alcun risultato. Qualcuno sa come farlo?

Risposte:


22

Drupal 6

In Drupal 6, non è possibile utilizzare hook o modificare hook all'interno dei temi, quindi è necessario creare un modulo personalizzato per modificare i collegamenti. Una volta fatto, ti consigliamo di implementare hook_link()(se stai creando un nuovo link) o hook_link_alter()(se vuoi modificare un link esistente).

Aggiunta di un nuovo collegamento:

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

Modifica dei collegamenti esistenti:

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, questo è un po 'più semplice, poiché i temi possono implementare alter hook. L'alter hook che stai cercando è 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;
}

Puoi inserirlo direttamente nel tuo template.phpfile.


Grazie, questo è esattamente quello che stavo cercando! Mi hai salvato dall'implementare un'interessante soluzione utilizzando il file template.php per Drupal 6. Questa soluzione funzionerebbe con il contenuto generato dalle viste?
user5013

@ user5013 Se stai pensando al nodo completo o alla visualizzazione del teaser in una vista, dovrebbe funzionare immediatamente. Se desideri aggiungere un link a una vista, puoi farlo anche tu: basta cambiare il valore 'href'in quello che desideri.

No, pensavo se questa soluzione avrebbe funzionato con i campi visualizzati in una vista.
user5013

@ user5013 Ah, quindi in quel caso no: i collegamenti vengono aggiunti solo quando il nodo è completamente compilato. Tuttavia, molti dei collegamenti che vengono generalmente visualizzati nella barra dei collegamenti sono disponibili come campi separati in Views.

1
I collegamenti di @MotoTribe sono resi nello stesso ordine in cui appaiono nell'array, quindi è solo una semplice manipolazione dell'array per cambiare l'ordine. Esempi aggiunti.

1

Supponendo che tu stia parlando di collegamenti che vengono resi su node.tpl.php, dovrai implementare hook_link, ad esempio guarda node_link . E se non hai familiarità con gli hook drupal, questo deve accadere in un modulo personalizzato, quindi supponiamo che il nome del tuo modulo personalizzato sia "pippo", dovrai scrivere una funzione chiamata foo_linkche dovrebbe avere gli stessi argomenti di hook_link.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.