¡Hola! me llamo pedro cambra y este es mi blog, cambrico.net. soy un desarrollador web de oviedo aunque vivo en barcelona, donde soy socio de neurotic, una pequeña empresa especializada en drupal.
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()



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 ?
En $options con fragment
print l( $text, 'node/150', array('fragment' => 'ancla1') );
Muchas gracias por los ejemplos Javier :D
Comentar