Modificando o tema do menu do drupal 5

As vezes seu tema exige algumas modificações no menu pois o padrão do Drupal 5 não te atende. Para isso você vai precisar escrever algumas funções temas no template.php do seu tema.

O drupal usa estas 3 funções para montar os menus:

http://api.drupal.org/api/function/theme_menu_tree/5
http://api.drupal.org/api/function/menu_tree/5
http://api.drupal.org/api/function/theme_menu_item/5

A theme_menu_tree chama a menu_tree que chama a theme_menu_item.

No teu caso, você vai precisar mesmo modificar a menu_tree mas como ela não é funções tema, você vai precisar criar uma para o theme_menu_tree... hehehehe

Na theme_menu_tree vc vai chamar a minha_menu_tree onde você vai fazer tudo o que a menu_tree faz e colocar no foreach dela a verificação se eh first ou last... de alguma forma vc vai precisar passar isso para a theme_menu_item...

Para não precisar alterar a quantidade de parâmetros da função, podemos aproveitar que o primeiro parametro ($mid) é um array e passar esta informação por ele...

Dae so falta alterar o theme_menu_item para colocar o first/last no li...

O resultado final ficaria mais ou menos assim:

<?php
function mythemename_menu_tree($pid = 1) {
  if (
$tree = meusuper_menu_tree($pid)) {
    return
"\n<ul class=\"menu\">\n". $tree ."\n</ul>\n";
  }
}

function
meusuper_menu_tree($pid) {
 
$menu = menu_get_menu();
 
$output = '';

  if (isset(
$menu['visible'][$pid]) && $menu['visible'][$pid]['children']) {
   
$total_children = count($menu['visible'][$pid]['children']);
   
$i = 0;
    foreach (
$menu['visible'][$pid]['children'] as $mid) {
     
$i++;
     
$type = isset($menu['visible'][$mid]['type']) ? $menu['visible'][$mid]['type'] : NULL;
     
$children = isset($menu['visible'][$mid]['children']) ? $menu['visible'][$mid]['children'] : NULL;
      if (
$i == 1) {
       
$mid['mythemename_position'] = 'first';
      }
      elseif (
$i == $total_children) {
       
$mid['mythemename_position'] = 'last';
      }
     
$output .= theme('menu_item', $mid, menu_in_active_trail($mid) || ($type & MENU_EXPANDED) ? theme('menu_tree', $mid) : '', count($children) == 0);
    }
  }

  return
$output;
}

function
mythemename_menu_item($mid, $children = '', $leaf = TRUE) {
 
$position = isset($mid['mythemename_position']) && !empty($mid['mythemename_position']) ? $mid['mythemename_position'] : '';
  return
'<li class="'.$position.' '. ($leaf ? 'leaf' : ($children ? 'expanded' : 'collapsed')) .'">'. menu_item_link($mid) . $children ."</li>\n";
}

?>

Como fiz isso tudo sem testar, pode ser que não funcione 100% mas a idéia é esta. Caso você encontre algum erro, me avise "ASAP".

Flw

Your rating: Nenhum Average: 5 (1 vote)

Enviar novo comentário

O conteúdo deste campo é privado não será exibido publicamente.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <blockquote> <pre> <br>
  • Linhas e parágrafos quebram automaticamente.
  • You may post code using <code>...</code> (generic) or <?php ... ?> (highlighted PHP) tags.
  • Endereços de páginas de internet e emails viram links automaticamente.

Mais informações sobre opções de formatação

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
4 + 7 =
Resolva este simples problema de matemática e digite o resultado. Por exemplo para 1+3, digite 4 e não 5.