En vrac une solution que j'utilise pour faire un menu horizontal "automatique"
<?php
function get_system_main_menu_show()
{
global $xoopsUser,$xoopsModule;
$block = array();
$block['lang_home'] = _MB_SYSTEM_HOME;
$block['lang_close'] = _CLOSE;
$module_handler =& xoops_gethandler('module');
$criteria = new CriteriaCompo(new Criteria('hasmain', 1));
$criteria->add(new Criteria('isactive', 1));
$criteria->add(new Criteria('weight', 0, '>'));
$modules = $module_handler->getObjects($criteria, true);
$moduleperm_handler =& xoops_gethandler('groupperm');
$groups = is_object($xoopsUser) ? $xoopsUser->getGroups() : XOOPS_GROUP_ANONYMOUS;
$read_allowed = $moduleperm_handler->getItemIds('module_read', $groups);
foreach (array_keys($modules) as $i) {
if (in_array($i, $read_allowed)) {
$block['modules'][$i]['name'] = $modules[$i]->getVar('name');
$block['modules'][$i]['directory'] = $modules[$i]->getVar('dirname');
$sublinks = $modules[$i]->subLink();
if ((count($sublinks) > 0) ) {
foreach($sublinks as $sublink){
$block['modules'][$i]['sublinks'][] = array('name' => $sublink['name'], 'url' => XOOPS_URL.'/modules/'.$modules[$i]->getVar('dirname').'/'.$sublink['url']);
}
} else {
$block['modules'][$i]['sublinks'] = array();
}
}
}
return $block;
}
$MainMenu = get_system_main_menu_show();
$this->assign( 'ex_mainmenu', $MainMenu );
if ( is_object($xoopsModule) ) {
$this->assign('ex_moduledir', $xoopsModule->getVar('dirname'));
$this->assign('ex_module_name', $xoopsModule->getVar('name') );
}
?>
<ul id="default_nav">
<li class="default_top">
<{if ! $ex_moduledir || $xoops_dirname == "pm" }>
<a href="<{$xoops_url}>" class="default_top_link default_selected" alt="<{$smarty.const._MB_SYSTEM_HOME}>" title="<{$smarty.const._MB_SYSTEM_HOME}>">
<{else}>
<a href="<{$xoops_url}>" class="default_top_link" alt="<{$smarty.const._MB_SYSTEM_HOME}>" title="<{$smarty.const._MB_SYSTEM_HOME}>">
<{/if}>
<span> <{$smarty.const._MB_SYSTEM_HOME}> </span>
</a>
</li>
<{foreach item=module from=$ex_mainmenu.modules }>
<li class="default_top">
<{if $module.directory == $ex_moduledir }>
<a href="<{$xoops_url}>/modules/<{$module.directory}>/" class="default_top_link default_selected" alt="<{$module.name}>" title="<{$module.name}>" >
<{if $module.sublinks }>
<span class="default_down"> <{$module.name}> </span> </a>
<ul class="default_sub">
<{foreach item=sublink from=$module.sublinks}>
<li >
<a href="<{$sublink.url}>" alt="<{$sublink.name}>" title="<{$sublink.name}>"><{$sublink.name}></a>
</li>
<{/foreach}>
</ul>
<{else}>
<span> <{$module.name}> </span> </a>
<{/if}>
<{else}>
<a href="<{$xoops_url}>/modules/<{$module.directory}>/" class="default_top_link" alt="<{$module.name}>" title="<{$module.name}>" >
<{if $module.sublinks }>
<span class="default_down"> <{$module.name}> </span> </a>
<ul class="default_sub">
<{foreach item=sublink from=$module.sublinks}>
<li >
<a href="<{$sublink.url}>" alt="<{$sublink.name}>" title="<{$sublink.name}>"><{$sublink.name}></a>
</li>
<{/foreach}>
</ul>
<{else}>
<span> <{$module.name}> </span> </a>
<{/if}>
<{/if}>
</li>
<{/foreach}>
</ul>
Pour afficher ou non le module, tu peux mettre "0" en poids (ou ordre) dans l'administration des modules
@+