2009-11-09 7 views
18

me gustaría salida de esteDrupal: Creación de anclaje único vínculo con l()

<a href='#namedanchor'>link</a> 

usando la función L(), por lo que el enlace simplemente salta a un ancla en la página actual.

que esperaba que esto funcione

l('link', '', array('fragment' => 'namedanchor')); 

pero crea un vínculo absoluto a www.example.com/#namedanchor en lugar de www.example.com/currentpage#namedanchor

Respuesta

41

Si desea crear un enlace con sólo el fragmento, es necesario "truco" la función url un poco. Como agregará el camino base a todas las direcciones URL internas, '' se convertirá en http://example.com.

Lo que hay que hacer es establecer la opción externa true:

l('link', '', array('fragment' => 'namedanchor', 'external' => TRUE)); 

Esto dará la deseada

<a href='#namedanchor'>link</a> 

alternativa que podría proporcionar la URL completa como Jeremy sugiere.

+1

perfecto, gracias! – ack

+0

probablemente debería agregar la función 't()' alrededor del primer argumento en 'l()', ¿verdad? – cdmo

2

Aquí está la documentación para l

dosn't parezca que va por uso predeterminado de la página actual cuando no se define ninguna ruta. Por lo que debe llamar así:

l('link', 'currentpage', array('fragment' => 'namedanchor')); 
3

Para crear un ancla usando l():

$path = isset($_GET['q']) ? $_GET['q'] : '<front>'; 
l(t('link text'), $path, array('attributes' => array('name' => 'name-of-anchor'))); 

Esta salida voluntad:

<a href="/path/to/currentpage" name="name-of-anchor">link text</a> 

Entonces, para enlazar a esta utilizando l():

$path = isset($_GET['q']) ? $_GET['q'] : '<front>'; 
l(t('link to anchor'), $path, array('fragment' => 'name-of-anchor')); 

Este saldrá:

<a href="/path/to/currentpage#name-of-anchor">link to anchor</a>