Uso de la función l() para crear links en Drupal 6

Hace ya tiempo que no pongo ningún artículo sobre desarrollo con Drupal, a continuación explico los usos más comunes de la función l() para generar links de forma segura y sencilla.

Creando links en Drupal 6: la función l()

La función l() permite generar links en el código y es una práctica recomendada para el desarrollo con Drupal, pasando los enlaces a través de esta función nos aseguramos de que las rutas se generan bien y nos ahorramos problemas de seguridad (ya que se filtra el texto) y también con los alias, ya que es consciente del alias que tiene cada contenido y se genera correctamente, por ejemplo si tenemos un enlace al primer nodo node/1 y tiene un alias como contenido/primer-articulo, si cambiamos el alias, un link construido con l() no será necesario modificarlo.

Sintaxis

l($text, $path, $options = array());

  • $text - El texto que se mostrará en el enlace, es recomendable pasarlo a través de una función t() si trabajamos con traducciones y sitios multilenguaje.
  • $path - Ruta a la que accede el link.
  • $options - Array de opciones que nos va a permitir alterar el comportamiento del enlace, permitir HTML, añadir clases CSS...

Por ejemplo, un link a un contenido fijo, el formulario de contacto:

<?php
 
print l('Contacta', 'contact');
?>

Otro ejemplo, un link a un nodo, pasado por traducción.

<?php
 
print l(t('Enlace al contenido'), 'node/4');
?>

Si queremos enlazar la home, debemos usar la cadena <front>.

<?php
 
print l(t('Home'), '<front>');
?>

Jugando con las opciones: Añadiendo clases css.

Pasando atributos al array $options se pueden añadir comportamientos a los enlaces, por ejemplo, añadirle CSS o un título.

<?php
 
print l(t('Home'), '<front>',
      array(
'attributes' =>
            array(
               
'class' => 'frontpage-link',
               
'title' => t('Home'),
            )
        )
    );
?>

Jugando con las opciones: Links internos.

El elemento fragment de las opciones de l() permite hacer links a anchors por su nombre.

<?php
 
print l(t('Link a anchor'), '', array('fragment' => 'nombre-del-anchor', 'external' => TRUE));
?>

Jugando con las opciones: Links a imágenes.

Podemos hacer links a imágenes o a otros elementos HTML, para eso deberemos especificar el valor html a TRUE en el array de las $options, ejemplo:

<?php
  $attributes
= array('attributes' => array('title' => t('Título del enlace')), 'html' => TRUE);
 
$link = l('<img src="'. $image_path .'" alt="'.t('Texto para el alt').'">', 'ruta/del/link', $attributes);
  print
$link;
?>

Bonus:

Para crear urls con parámetros (? e =) debemos utilizar $query en el array de $options, por ejemplo para generar un link del tipo /user/login?destination=node/add/session podemos hacer algo así:

<?php
 
print l(t('User login'), 'user/login', array('html' => true, 'query' => 'destination=node/add/session');
?>

También podemos hacer links con l() cuando intentamos enlazar un anchor que no está en nuestra página actual, de nuevo con $fragment:

<?php
 
print l(t('Enlace anchor'), 'node/150', array('fragment' => 'ancla1'));
?>

Gracias a sipuedo por estos dos ejemplos extra :)

Si necesitáis información extra, en el API de Drupal, podéis encontrar la referencia completa a la función l()

4 comentarios, participa en la conversación

  • Genial ;)

    Una "cosilla" que creo que es importante(por lo menos para mi) y es el tema de la codificacion de los caracteres sobre todo '?' y '='.
    Por ejemplo si el link fuera "/user/login?destination=node/add/session" ;) el resultado seria /user/login%3Fdestination%3Dnode/add/session por lo que daria error.
    La solucion se encuentra en el $options->query :P y seria mas o menos asi:
    print l( $text, 'user/login', array('html' => true, 'query' => 'destination=node/add/session') );

  • Serviría tambíen para meter un link con una ancla html del tipo node/150#ancla1 node/150#ancla2 ?

    Last Ferran Riera's post:KnowledgeTree 3.6.1
  • En $options con fragment
    print l( $text, 'node/150', array('fragment' => 'ancla1') );

  • Muchas gracias por los ejemplos Javier :D

  • Comentar

    CAPTCHA
    Esta pregunta sirve para distinguir si eres un humano o un spambot.
    1 + 0 =
    Resuelve esta operación e introduce el resultado, por ejemplo, para 1+3, introduce 4
    This blog uses CommentLuv plugin which will try and parse your sites feed and display a link to your last post, please be patient while it tries to find it for you