usare link con ancore #

4 contenuti / 0 new
Ultimo contenuto
usare link con ancore #

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