Salve a tutti.
Devo modificare il codice dei primary-links per adattarvi il menu di un altro tema (non so' risolvere per altre vie).
Mi serve inserire uno span prima delle voci.
Da così:
<ul class="links primary-links"><li class="first menu-1-1-2"><a href="http://drupal" title="Forum" class="menu-1-1-2">Forum</a></li>
<li class="menu-1-2-2"><a href="http://drupal" title="Gallery" class="menu-1-2-2">Gallery</a></li><li class="last menu-1-3-2"><a href="http://drupal" title="Wiki" class="menu-1-3-2">Wiki</a></li></ul>a così:
<ul class="links primary-links"><li class="first menu-1-1-2"><a href="http://drupal" title="Forum" class="menu-1-1-2"><span>Forum</span></a></li><li class="menu-1-2-2"><a href="http://drupal" title="Gallery" class="menu-1-2-2"><span>Gallery</span></a></li><li class="last menu-1-3-2"><a href="http://drupal" title="Wiki" class="menu-1-3-2"><span>Wiki</span></a></li></ul>
Sapete dirmi su che file devo intervenire?
Grazie

Sul file template.php del tema che usi.
Lo apri e inserisci
<?php
function garland_links($links, $attributes = array('class' => 'links')) {
$output = '';
if (count($links) > 0) {
$output = '<ul'. drupal_attributes($attributes) .'>';
$num_links = count($links);
$i = 1;
foreach ($links as $key => $link) {
$class = '';
// Automatically add a class to each link and also to each LI
if (isset($link['attributes']) && isset($link['attributes']['class'])) {
$link['attributes']['class'] .= ' ' . $key;
$class = $key;
}
else {
$link['attributes']['class'] = $key;
$class = $key;
}
// Add first and last classes to the list of links to help out themers.
$extra_class = '';
if ($i == 1) {
$extra_class .= 'first ';
}
if ($i == $num_links) {
$extra_class .= 'last ';
}
$output .= '<li class="'. $extra_class . $class .'">';
// Is the title HTML?
$html = isset($link['html']) && $link['html'];
// Initialize fragment and query variables.
$link['query'] = isset($link['query']) ? $link['query'] : NULL;
$link['fragment'] = isset($link['fragment']) ? $link['fragment'] : NULL;
if (isset($link['href'])) {
$pos_start = strrpos($link['title'], ']');
$output .= l($link['title'],
$link['href'],
$link['attributes'],
$link['query'],
$link['fragment'],
FALSE,
$html);
}
else if ($link['title']) {
//Some links are actually not links, but we wrap these in <span> for adding title and class attributes
if (!$html) {
$link['title'] = check_plain($link['title']);
}
$output .= '<span'. drupal_attributes($link['attributes']) .'>'. $link['title'] .'</span>';
}
$i++;
$output .= "</li>\n";
}
$output .= '</ul>';
}
return $output;
}
?>
Dopo di che vai a modificare il codice per inserire il pezzo ceh devi andare a inserire (lo span) nel punto che ti serve.
una domanda anche da parte mia: riesco temizzando la funzione links a modiciare il markup del singolo livello di links; quello che non riesco ancora ad ottenere è il pieno controllo della struttura dei primary. Mi spiego meglio: grazie a questa funzione
function phptemplate_get_primary_links() {return menu_tree(variable_get('menu_primary_links_source', 'primary-links'));
}
ho a disposizione il tree completo dei primary. Ho però necessità di personalizzare il markup più o meno in questo modo.
<ul><li><a href="#" >First Level</a>
<div>
<dl>
<dt><a href="# >Second level </a></dt>
<dd><a href="#">Third level</a></dd>
<dd><a href="#">Third level</a></dd>
</dl>
<dl>
<dt><a href="# >Second level </a></dt>
<dd><a href="#">Third level</a></dd>
<dd><a href="#">Third level</a></dd>
</dl>
</div>
</li>
e così via......
</ul>
ho visto che menu_tree richiama a sua volta menu_tree output ma anche qui non vedo nulla di temizzabile.
L'ideale sarebbe poter richiamare selettivamente i diversi livelli del menu per strutturarli a piacimento. Credo sia possibile ma non ho ancora trovato la soluzione.
http://www.signalkuppe.com
Scusa, ma forse non ti ho seguito :D
Innanzitutto staiinserendo delle DL all'interno di un LI, scusa, ma semanticamente non ha molto senso, sopratutto eprchè ogni TD ha due DD, il che mi pare ancora più controverso.. ma a parte questo che è un problema secondario, se non ho capito vale vuoi piazzare i secondi libelli del menu all'interno del primo livello, giusto?
Usando il seguente codice:
<?php// Profondità del menu da raggiungere
$depth = 2;
// Recupero l'albero del menu del primary links
$menu_tree = menu_navigation_links(variable_get('menu_primary_links_source', 'primary-links'), $depth);
// Costruisco l'albero dei menu come mi serve
...
?>
Questo pezzo di codice lo vai ad inserire nella funzione che si occupa di produrre il tuo snippet nel tema, per esempio creando una funzione my_primary_link() presente in template.php e richiamando poi la funzione all'interno del page.tpl.php che ti serve. Non so se mi sono spiegato, ma se non l'ho fatto chiedi pure :)
EDIT: mi è capitato sottomano anche http://drupal.org/node/248522 prova a darci un occhio, adattandolo potrebbe essere la soluzione che fa al caso tuo :D
Prima di tutto grazie per la dritta sul depth :)
ho scelto quel markup per riuscire a stilizzare meglio i vari sottolivelli visto che le liste annidate si portano dietro qualche comportamento cross-browser un po ambiguo :)
adesso provo e ti faccio sapere!
ogni dt potrà avere anche più dd visto che i terzi livelli arriveranno dai primary quindi non c'è un limite a priori.
In ogni caso a livello xhtml è tutto corretto :)
http://www.signalkuppe.com
non metto in dubbio che sia corretto, e che possaessere un sistema che dal punto di vista stilistico è ok, ma quello che mi pare un pò controsenso è fornire due definizioni per un termine solo, cmq ok, se il W3C dice che va bene non mi metto di certo a controbattere ;)