Modificando o tema do menu do drupal 5Submitted by pedrofaria on ter, 16/12/2008 - 15:18 |
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
- 387 leituras
Enviar novo comentário