un saluto a tutti....
volevo un chiarimento su drupal (la mia versione 5.3), ovvero come posso utilizzare i link con le ancore nel menu di navigazione primario? come sappiamo di default se nel menu di navigazione creo dei link con delle ancore, esse vengono tradotte invece che così #link a così ?q=#link e se gli clicco sopra mi portano ad una pagina così tradotta nel link della barra degli indirizzi ?q=%23link .....
girando un po' per il sito ufficiale in inglese ho letto delle cose che non mi hanno portato a nulla... probabilmente perchè non so ancora usare questo cms.... :(
una cosa che ho letto in un topic era di copiare ed incollare nel file template.php il seguente codice:
<?php
function phptemplate_menu_item_link($item, $link_item) {
// Convert anchors in path to proper fragment
$path = explode('#', $link_item['path'], 2);
$fragment = !empty($path[1]) ? $path[1] : NULL;
$path = $path[0];
return l(
$item['title'],
$path,
!empty($item['description']) ? array('title' => $item['description']) : array(),
!empty($item['query']) ? $item['query'] : NULL,
$fragment,
FALSE,
FALSE
);
}
?>
il codice suggerito l'ho preso da qui http://drupal.org/node/106821 ma non vuole proprio andare!!! :(
spero mi aiutiate ancora per capire le diverse funzionalità di drupal!!!! :P
Ciao
seguendo i commenti in http://drupal.org/node/123103 non sono riuscito ad arrivare a nessuna conclusione.
Allora ho provato a percorrere un'altra strada.
nel file includes/common.inc alla riga 1750 c'è la funzione
function drupal_urlencode($text) {
if (variable_get('clean_url', '0')) {
return str_replace(array('%2F', '%26', '%23', '//'),
array('/', '%2526', '%2523', '/%252F'),
urlencode($text));
}
else {
return str_replace('%2F', '/', urlencode($text));
}
}
Ho modificato il codice così
function drupal_urlencode($text) {
if (variable_get('clean_url', '0')) {
return str_replace(array('%2F', '%26', '%23', '//'),
array('/', '%2526', '%2523', '/%252F'),
urlencode($text));
}
else {
return str_replace(array('%2F', '%23'),
array('/', '#'),
urlencode($text));
}
}
In questo modo quando la funzione urlencode trasforma il # in %23, successivamente la str_replace lo ritrasforma in #.
Ho fatto un pò di prove e mi sembra funzionare.
Mai toccare le funzioni base inserite nel core, per risolvere il tuo problema usa la variabile $fragment, di cui trovi informazioni all'indirizzo http://api.drupal.org/api/function/l/5, per passare l'ancora, magari controllando come mai non funziona, eventualemente passa il path e di esplicitamente di non fare il parsing ($html = true)
Ciao
Marco
--
My blog
Working at @agavee
Ciao Mavimo
Il mio problema è che creo delle voci menu dove inserisco nel path:
node/<numero_nodo>#<nome_ancora>
In questo caso non so come potrei utilizzare la funzione l() all'interno del path.
Ciao