drupal 7 menu_tree

6 contenuti / 0 new
Ultimo contenuto
drupal 7 menu_tree

Stavo lavorando con drupal 7 e il menu tree, l'idea è di non usare moduli ma di farlo da template, con questo codice funziona

<?php
        $pid
= variable_get('menu_main_links_source', 'main-menu');
       
$tree = menu_tree($pid);
       
$tree = str_replace(' class="menu"', '', $tree);
       
$main_menu = drupal_render($tree);
        print
$main_menu;
?>

solo mi mancherebbe qualche classe come sull'elemento li in cui non c'è la classe "active" ma è presente solo sull"a", sapete come risolvere?

Casualmente ci sto lavorando anche io...

Questo va in template.php ti permette di aggiungere delle classi ma solo nel tag ul:

function NOMETEMA_preprocess_page(&$variables) {
  if (isset($variables['main_menu'])) {
    $pid = variable_get('menu_tree_data', 'main-menu');
    $tree = menu_tree($pid);
    $variables['primary_nav'] = str_replace('menu', 'sf-menu menu', drupal_render($tree));
  } else {
    $variables['primary_nav'] = FALSE;
  }
}

Questo è il codice per page.tpl.php in html5:

<?php if (!empty($primary_nav)): ?>
<nav id="navigation" role="navigation"><div class="section">
<?php print $primary_nav; ?>
  </div></nav>
  <?php endif; ?>

Mi accodo per aggiungere che funziona ma ci sono problemi con i menu multilingua, mostra i link tutti insieme indipendentemente dalla lingua...

Ho provato diverse variabili: http://api.drupal.org/api/drupal/includes--menu.inc/7 ma il risultato non cambia.

A questo punto va a finire che me ne lavo le mani e gli dico di installare il modulo, a me manca solo la classe nel li perché quel menu usa l'immagine sfalsata per gli angoli arrotondati.

Megamenu è facilmente gestibile però non prende l'attributo title dei menu.

Non sarebbe male una soluzione senza modulo, per D6 l'avevo trovata ma non funziona con D7.

Ho risolto il problema per quel che mi serve, posto come ho fatto poiché se riesci ad elaborare la variabile $content del blocchi potresti risolvere anche tu.

Per evitare una lunga serie di domande espongo la cosa anche per i meno esperti:

Primo ho creato una regione in page.tpl.php

<?php /*  navigazione*/ ?>
<?php if ($page['primary_nav']): ?>
  <nav id="navigation" role="navigation">
  <?php print render($page['primary_nav']); ?>
     </nav>
<?php endif; ?>
  <?php /*   /#navigazione -*/ ?>

Chi non usa html5 deve sostituire <nav con <div modificando anche la relativa chiusura del tag.

Poi dichiarata la regione nel file info del tema:

regions[primary_nav] = Menu del sito

Poi ho creato un file block--system--main-menu.tpl.php con all'interno il codice:

<?php print $content ?>

In questo modo ho eliminato tutti i div e tag superflui.

Pulita la cache del sito ho posizionato nella regione il blocco "Menu principale" nella nuova regione e lavorato sul CSS. Non è finito e comunque serve per il tema che sto facendo, lo posto giusto come spunto:

/*
* NAVIGAZIONE
*/
#navigation{
background: #b9131f;
height: 28px;
border-bottom:4px solid #ccc;
}
#navigation .region-primary-nav{
    width:960px;
margin: 0 auto;
}
/* 1mo livello */
#navigation ul.menu {
display:block;
padding:0;
margin:0;
}
#navigation ul.menu li {
float: left;
vertical-align: middle;
padding:0 5px 0 0;
margin:0;
}
#navigation ul.menu li.last {
padding:0;
}
#navigation ul.menu li a {
outline:none;
padding: 5px 10px;
text-decoration: none;
display:block;
color: #6D7E8F;
font-size: 1em;
text-align:center;
}
#navigation ul.menu li a:hover, #navigation ul.menu li a.active {
text-decoration:none;
color:#eee;
/* border-radius: 5px;
-moz-border-radius: 5px;
background-color: #ddd;*/
}
#navigation ul.menu li.expanded {
position: relative;
}
#navigation ul.menu li.expanded:hover a {
border-radius:5px 5px 0 0;
-moz-border-radius:5px 5px 0 0;
background: #ddd;
color: #666;
}
/* 2ndo livello */
#navigation ul.menu li.expanded ul.menu {
width: 190px;
z-index:100;
font-size:12px;
padding:0;
background: #ddd;
display: none;
position: absolute;
color: #666;
}
#navigation ul.menu li.expanded:hover > ul.menu { display: block; }
#navigation ul.menu li.expanded ul.menu li a {
font-size: 15px;
color:#666;
padding:10px;
display:block;
width:180px;
text-align:left;
border-radius:0;
-moz-border-radius:0;
}
#navigation ul.menu li.expanded ul.menu li a:hover {
color: #fff;
}
/* 3zo, 4to, 5to, livello */
#navigation ul.menu li.expanded ul ul {
display: none;
left: 190px;
top:0;
}

Se riesci ad elaborare la variabile del file block--system--main-menu.tpl.php dovresti poter aggiungere delle classi personalizzate.

Dimenticavo, per funzionare i menu con figli devono essere impostati come espansi, un segno di spunta su "Mostra figli".