Sistema de menús
El sistema de menús Dolibarr
Existen en Dolibarr 2 sistemas de menú. El superior y el izquierdo, que pueden ser dependientes el uno del otro o no. Les llamaremos "menú izquierdo" y "menú superior". Por defecto, los gestores de menú de estos dos sistemas de menú proporcionan un menu contextual. El menú izquierdo, por ejemplo, depende de los elementos que se manipulen. Este enfoque difiere del tradicional de las aplicaciones Windows donde el menú va colgando de los menús superiores hasta alcanzar la funcionalidad deseada. Una especie de árbol en el que no se salta de una rama a la búsqueda de la función, sino que se remonta a la raíz del árbol (ejemplo menú "Archivo") para seleccionar su rama (ejemplo "Abrir"). Con el fin de contener los 2 mundos, Dolibarr ofrece un menú de sistema modular. Es posible desarrollar su propio sistema de menús por defecto, influenciandose por el menú por defecto. La otra ventaja para el desarrollador, es que la lógica del menú también puede ser centralizado en un solo archivo. Este menú permite ofrecer sistemas de comportamientos completamente diferentes.
Cambiar el sistema de menús
Cambiar el sistema de menús es posible a través de la página Configuración - Interface. Tomemos, por ejemplo, los gestores de menú "eldybackoffice", suministrado como estándar (Activar el gestor de menú izquierdo eldybackoffice al mismo tiempo que el gestor de menú superior eldybackoffice, los 2 están diseñados para trabajar juntos). Estos gestores de menú (izquierdo y superior) son totalmente operativos y ofrecen diversas alternativas de menú.
Y si no le convence, nada le impide que realice su propio desarrollo. Consulte el siguiente apartado...
Desarrollar su propio sistema de menús
El propósito de este artículo es describir cómo crear un nuevo sistema de menús en su totalidad (remplazando la totalidad de las entradas de menús, desbarajustando completamente el concepto de navegación).
No se trata sólo de añadir entradas de menús. Si ese es el caso y sólo quiere saber cómo añadir entradas de menú en un gestor de menús existente para, por ejemplo, el desarrollo de una extensión o un nuevo módulo,
Cela ne concerne pas le simple ajout d'entrées de menus. Si tel et le cas et que vous désirez juste savoir comment ajouter des entrées menus au sein d'un gestionnaire de menu existant, dans le cadre du développement d'une extension ou d'un nouveau module par exemple, mejor vea la página Desarrollo de un módulo.
Si desea remplazar en su totalidad un sistema de menús con el suyo, lo más simple es tomar como ejemplo el gestor de menú "eldy_backoffice".
- Para desarrollar su sistema de menú superior, debe
- Copiar el archivo htdocs/includes/menus/barre_top/eldybackoffice.php bajo otro nombre, como por ejemplo: htdocs/includes/menus/barre_top/mimenu.php
- Editar seguidamente el fichero mimenu.php. La función showmenu() es la función llamada por Dolibarr para generar una página para mostrar este menú superior. Podemos crear el código que queramos, esta función no modifica ninguna variable exterior, teniendo únicamente la funcialidad de mostrar por "impresión" el menú que queramos ver. Podemos también recuperar el menú a mostrar desde un fichero de configuración o una base de datos, y personalizarlo en relación al entorno. El entorno Dolibarr se guarda en los 3 objetos globales siguientes: $user, $conf, $langs.
$user contiene las información relacionada con el usuario usuario. $conf contiene la información relacionada con la configuración (módulos activos, permisos activos, etc...) $langs contie la información relacionada con el idioma activo.
Ejemplo de función showmenu() del fichero htdocs/includes/menus/barre_top/mimenu.php
function showmenu()
{
global $user,$conf,$langs,$dolibarr_main_db_name;;
print '<table class="tmenu"><tr class="tmenu">';
// Menu Home
print '<td class="tmenu"><a '.$class.' href="'.DOL_URL_ROOT.'/index.php?mainmenu=home&leftmenu="'.($this->atarget?" target=".$this->atarget:"").'>'.$langs->trans("Home").'</a></td>';
// Put here other entries
// ...
print '</tr></table>';
}
- Pour développer son système de menu gauche, le principe est aussi simple.
- Copier le fichier htdocs/includes/menus/barre_left/eldybackoffice.php sous un autre nom comme htdocs/includes/menus/barre_left/monmenu.php.
- Il faut ensuite modifier la fonction showmenu() afin de fabriquer son menu gauche. Si on veut afficher le menu standard ou juste le modifier légèrement sans recréer le sien complètement, il suffit de boucler sur le contenu du tableau $menu->liste, initialisé par Dolibarr "par défaut" grace au fichier pre.inc.php stocké dans le même répertoire que la page appelée. Si vous voulez afficher un menu complètement différent et totalement controlé par vous (et donc ignorer les fichiers pre.inc.php), il vous faut, dans la fonction showmenu(), créer un objet $newmenu=new Menu() et utiliser les méthodes $newmenu->add et $newmenu->add_submenu pour définir la liste des entrées menu gauche à faire apparaitre. En fin de code, on affiche par des print le contenu du tableau $newmenu->liste (qui vient d'etre construit) au lieu de $menu->liste.
Exemple de fichier htdocs/includes/menus/barre_left/monmenu.php
function showmenu()
{
global $user,$conf,$langs,$dolibarr_main_db_name;
$newmenu = new Menu();
// Put here left menu entries
// ***** START *****
$langs->load("admin"); // Load translation file admin.lang
$newmenu->add(DOL_URL_ROOT."/admin/index.php?leftmenu=setup", $langs->trans("Setup"));
$newmenu->add_submenu(DOL_URL_ROOT."/admin/company.php", $langs->trans("MenuCompanySetup"));
$newmenu->add_submenu(DOL_URL_ROOT."/admin/modules.php", $langs->trans("Modules"));
$newmenu->add_submenu(DOL_URL_ROOT."/admin/ihm.php", $langs->trans("GUISetup"));
$newmenu->add_submenu(DOL_URL_ROOT."/admin/boxes.php", $langs->trans("Boxes"));
$newmenu->add_submenu(DOL_URL_ROOT."/admin/delais.php",$langs->trans("Alerts"));
$newmenu->add_submenu(DOL_URL_ROOT."/admin/triggers.php", $langs->trans("Triggers"));
$newmenu->add_submenu(DOL_URL_ROOT."/admin/perms.php", $langs->trans("Security"));
$newmenu->add_submenu(DOL_URL_ROOT."/admin/dict.php", $langs->trans("DictionnarySetup"));
$newmenu->add_submenu(DOL_URL_ROOT."/admin/const.php", $langs->trans("OtherSetup"));
// ***** END *****
// do not change code after this
// override menu_array by value array in $newmenu
$this->menu_array=$newmenu->liste;
$alt=0;
for ($i = 0 ; $i < sizeof($this->menu_array) ; $i++)
{
$alt++;
if ($this->menu_array[$i]['level']==0) {
if (($alt%2==0))
{
print '<div class="blockvmenuimpair">'."\n";
}
else
{
print '<div class="blockvmenupair">'."\n";
}
}
if ($this->menu_array[$i]['level']==0) {
if ($this->menu_array[$i]['enabled'])
print '<a class="vmenu" href="'.$this->menu_array[$i]['url'].'">'.$this->menu_array[$i]['titre'].'</a><br>';
else
print '<font class="vmenudisabled">'.$this->menu_array[$i]['titre'].'</font><br>';
}
if ($this->menu_array[$i]['level']==1) {
if ($this->menu_array[$i]['enabled'])
print '<a class="vsmenu" href="'.$this->menu_array[$i]['url'].'">'.$this->menu_array[$i]['titre'].'</a><br>';
else
print '<font class="vsmenudisabled">'.$this->menu_array[$i]['titre'].'</font><br>';
}
if ($this->menu_array[$i]['level']==2) {
if ($this->menu_array[$i]['enabled'])
print ' <a class="vsmenu" href="'.$this->menu_array[$i]['url'].'">'.$this->menu_array[$i]['titre'].'</a><br>';
else
print ' <font class="vsmenudisabled">'.$this->menu_array[$i]['titre'].'</font><br>';
}
if ($this->menu_array[$i]['level']==3) {
if ($this->menu_array[$i]['enabled'])
print ' <a class="vsmenu" href="'.$this->menu_array[$i]['url'].'">'.$this->menu_array[$i]['titre'].'</a><br>';
else
print ' <font class="vsmenudisabled">'.$this->menu_array[$i]['titre'].'</font><br>';
}
if ($i == (sizeof($this->menu_array)-1) || $this->menu_array[$i+1]['level']==0) {
print "</div>\n";
}
}
}