2009-11-09 13 views
18

vorrei uscita questoDrupal: Creazione di ancoraggio collegamento solo con l()

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

utilizzando la funzione l(), in modo che il collegamento appena salta ad un ancoraggio nella pagina corrente.

mi aspettavo questo lavoro

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

ma crea un collegamento assoluto a www.example.com/#namedanchor invece di www.example.com/currentpage#namedanchor

risposta

41

Se si desidera creare un collegamento con il solo frammento, è necessario "ingannare" la funzione URL un po '. Come si aggiungerà il punto base a tutti gli url interni, '' diventerà http://example.com.

Quello che dovete fare è impostare l'opzione esterna a true:

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

Questo darà il desiderato

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

alternativa si potrebbe dare l'URL completo, come suggerisce Jeremy.

+1

perfetto, grazie! – ack

+0

probabilmente dovrebbe aggiungere la funzione 't()' attorno al primo argomento in 'l()', giusto? – cdmo

2

Ecco la documentazione per l

dosn't sembrare lo farà da default usa la pagina corrente quando nessun percorso è definito. Così si dovrebbe chiamare in questo modo:

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

Per creare un ancoraggio mediante l():

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

Questo stamperà:

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

Poi, a un collegamento a questo utilizzando l():

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

Questo uscirà:

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