Modifica codice primary-links

6 contenuti / 0 new
Ultimo contenuto
Modifica codice primary-links

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.

Ciao
Marco
--
My blog
Working at @agavee

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.

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

Ciao
Marco
--
My blog
Working at @agavee

mavimo wrote:
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 :)

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 ;)

Ciao
Marco
--
My blog
Working at @agavee