Cómo agregar enlaces mediante programación a la variable de enlaces

8

Estoy usando Drupal 6 y me gustaría modificar la $linksvariable para incluir otros enlaces mediante programación. He buscado por todas partes en Google sobre cómo hacer esto en vano. ¿Alguien sabe cómo hacer esto?

usuario5013
fuente

Respuestas:

22

Drupal 6

En Drupal 6, no puede usar ganchos o alterar ganchos dentro de los temas, por lo que deberá crear un módulo personalizado para modificar los enlaces. Una vez hecho esto, querrá implementar hook_link()(si está creando un nuevo enlace) o hook_link_alter()(si desea modificar un enlace existente).

Agregar un nuevo enlace:

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

Modificación de enlaces existentes:

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

En Drupal 7, esto es un poco más sencillo, ya que los temas pueden implementar alter hooks. El gancho alter que estás buscando es 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;
}

Puede colocar esto directamente en su template.phparchivo.


fuente
¡Gracias, esto es exactamente lo que estaba buscando! Me salvó de implementar una solución interesante usando el archivo template.php para Drupal 6. ¿Funcionaría esta solución con contenido generado por vistas?
user5013
@ user5013 Si está pensando en el nodo completo o la visualización del avance en una vista, debería funcionar de inmediato. Si desea agregar un enlace a una vista, también puede hacerlo: simplemente cambie el valor de 'href'lo que desee.
No, estaba pensando si esta solución funcionaría con los campos que se muestran en una vista.
user5013
@ user5013 Ah, entonces en ese caso, no: los enlaces solo se agregan cuando el nodo está completamente construido. Sin embargo, muchos de los enlaces que generalmente aparecen en la barra de enlaces están disponibles como campos separados en Vistas.
1
Los enlaces de @MotoTribe se representan en el mismo orden en que aparecen en la matriz, por lo que es solo una manipulación directa de la matriz para cambiar el orden. Ejemplos añadidos
1

Suponiendo que está hablando de enlaces que se representan en node.tpl.php, deberá implementar hook_link, por ejemplo, mire node_link . Y si eres nuevo en drupal hooks, entonces esto debe suceder en un módulo personalizado, así que digamos que el nombre de tu módulo personalizado es "foo", deberás escribir una función llamada foo_linkque debería tener los mismos argumentos que hook_link.

Dipen
fuente