Sistema de menús: Difference between revisions

From Dolibarr ERP CRM Wiki
Jump to navigation Jump to search
Tag: 2017 source edit
 
(29 intermediate revisions by 3 users not shown)
Line 1: Line 1:
<!-- BEGIN interlang links -->
<!-- Do NOT edit this section
    Links below are automatically managed by PolyglotBot
    You can edit links on the English source page : Menus_system -->
[[en:Menus_system]]
[[fr:Système_de_menus]]
[[de:Menü_System]]
[[zh:菜单]]
<!-- END interlang links -->
[[Category:Básico]]
{{TemplateDocDesarrollo}}
{{TemplateDocDesarrollo}}
{{ToTranslate}}


== El sistema de menús Dolibarr ==
= 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".
Existen en Dolibarr 2 sistemas de menú. El superior y el izquierdo, que pueden ser dependientes el uno del otro o no. (así pués uno puede imaginarse fácilmente un gestor de menús superior que gestionará el menú con todos las entradas de los submenús mediante menús desplegables y nada en el menú de la izquierda). Por lo que llamaremos a estos dos sistemas: "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 donde el menú depende del camino para alcanzar la funcionalidad


. Cette approche diffère de celle, plus traditionnelle, des applis Windows où le menu déroulant dépend du chemin pris pour atteindre la fonctionnalité. Une sorte d'arbre dans laquelle on ne saute pas d'une branche en changeant de fonction, mais en remontant à la racine de l'arbre (exemple menu "Fichier") pour choisir ensuite la sous branche (exemple "Ouvrir"). Afin de contenter les 2 mondes (questions de choix, de goût ou d'habitudes), Dolibarr offre un système de menu modulaire. Il est en effet possible de développer son propre système de menu, à sa sauce, qui prend complètement l'ascendant sur le menu par défaut. L'autre avantage, pour le développeur, est que toute la logique du menu peut également être centralisée dans un seul et même fichier. Ceci permet d'offrir des systèmes de menu aux comportements complètement différents.
Es posible desarrollar su propio gestor de menús (izquierdo y/o superior), que reemplazaría completamente el menú por defecto. Usted decide como guardar su menú (en la base de datos, tal y como lo hace el gestor de menús '''auguria''', centralizado en un fichero, como el gestor de menús '''eldy''', ...). Como puede ver, puede ofrecer un gestor de menús con el comportamiento que usted necesite y la tecnología que desee...


== 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ú "auguria", suministrado como estándar. Estos gestores de menú (izquierdo y superior) son totalmente operativos y ofrecen diversas alternativas de menú.


Changer de système de menu est possible via la page Configuration - Interface. Prendre par exemple les gestionnaires de menu "eldybackoffice", fournis en standard (Activer le gestionnaire du menu gauche eldybackoffice en même temps que le gestionnaire du menu haut eldybackoffice, les 2 étant conçus pour fonctionner ensemble). Ces gestionnaires de menu (gauche et haut) sont complètement opérationnels et offrent divers alternatives de menu.
Y si no le convence, nada le impide que realice su propio desarrollo. Consulte el siguiente apartado...


Et si cela ne vous convient toujours pas, rien ne vous empêche de développer le vôtre. Voir paragraphe suivant...'''''
= Desarrollar su propio sistema de menús =


== 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).


Le but de cet article est de décrire comment créer un nouveau système de menu dans son intégralité (remplacement de l'intégralité des entrées menus, chamboulement complet du concept de navigation).
No se trata sólo de añadir entradas de menús. Si ese no 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, mejor vea la página [[Desarrollo de un 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, reporter vous plutôt à la page [[Developpement module]].
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".


Si vous voulez remplacer intégralement un systeme de menu par le votre, le plus simple est de prendre exemple sur le gestionnaire de menu "eldy_backoffice".
== Para desarrollar su '''sistema de menú superior''' ==
Debe
# Copiar el archivo htdocs/core/menus/standard/eldy_backoffice.php bajo otro nombre, como por ejemplo: htdocs/core/menus/standard/mimenu.php
# Editar seguidamente el fichero mimenu.php. La función showmenu() de la clase MenuTop 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 objetos globales: {{Template:TemplateGlobalVariables}}
$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.


* Pour développer son '''système de menu haut''', il suffit de
Ejemplo de función showmenu() del fichero htdocs/core/menus/standard/mimenu.php
# Copier le fichier htdocs/includes/menus/barre_top/eldybackoffice.php sous un autre nom comme htdocs/includes/menus/barre_top/monmenu.php
<source lang="php">
# Editer ensuite le fichier monmenu.php. La fonction showmenu() est la fonction appelée par Dolibarr lorsqu'il génère une page pour afficher ce menu haut. On peut y mettre le code que l'on veut, cette fonction ne modifie aucune variable extérieur et doit juste afficher par des "print" le menu que l'on veut voir. On peut ainsi récupérer le menu à afficher depuis un fichier de configuration, une base de donnée et le personnaliser par rapport à l'environnement. L'environnement Dolibarr étant stocké dans les 3 objets global suivant: $user, $conf, $langs.
$user contient les informations propres à l'utilisateur.
$conf contient les informations propres à la configuration (modules actifs, permissions actives, etc...)
$langs contient les informations propres à la langue active.
 
Exemple de fonction showmenu() du fichier htdocs/includes/menus/barre_top/monmenu.php
<pre>
     function showmenu()
     function showmenu()
     {
     {
Line 46: Line 54:
         print '</tr></table>';
         print '</tr></table>';
     }
     }
</pre>
</source>


== Para desarrollar su '''sistema de menú izquierdo''' ==
El principio es igualmente simple.
# Seguidamente modificar la función showmenu() de MenuLeft para construtir su menú izquierdo. Si desea visualizar el menú o simplemente modificarlo ligeramente sin llegar a recrearlo completamente, simplemente recorra el contenido de la colección $menu->liste. Si desea mostrar un menú completamente diferente y controlado totalmente por usted, deberá crear un objeto $newmenu=new Menu() en la función showmenu() y utilizar los métodos $newmenu->add y $newmenu->add_submenu para definir el listado de entradaas del menú izquierdo a mostrar. Al final del código, mostraremos por impresión el contenido de la colección $newmenu->liste (que acaba de ser construida) en lugar de $menu->liste.


* Pour développer son '''système de menu gauche''', le principe est aussi simple.
Ejemplo de fichero htdocs/core/menus/standard/mimenu.php
# Copier le fichier htdocs/includes/menus/barre_left/eldybackoffice.php sous un autre nom comme htdocs/includes/menus/barre_left/monmenu.php.
<source lang="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
<pre>
     function showmenu()
     function showmenu()
     {
     {
Line 128: Line 135:


     }
     }
</pre>
</source>
 
= Forzar el uso de su gestor de menú =
 
También puede forzar el uso de su gestor de menú en la creación de un módulo.
Para ello, simplemente hay que añadir las siguientes 4 constantes en la tabla $this->const de su descriptor del módulo (Ver la página [[Desarrollo de un módulo]]).
<source lang="php">
* 1=>array('MAIN_MENU_STANDARD_FORCED','chaine','mimenu.php','Force menu handler to this value',1,'current',1),
* 2=>array('MAIN_MENUFRONT_STANDARD_FORCED','chaine','mimenu.php','Force menu handler to this value',1,'current',1),
* 3=>array('MAIN_MENU_SMARTPHONE_FORCED','chaine','mimenu.php','Force menu handler to this value',1,'current',1),
* 4=>array('MAIN_MENUFRONT_SMARTPHONE_FORCED','chaine','mimenu.php','Force menu handler to this value',1,'current',1),
</source>
Cuando se active el módulo, se utilizará su gestor de menú, cualquiera que sea la configuración.

Latest revision as of 19:48, 26 September 2023

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. (así pués uno puede imaginarse fácilmente un gestor de menús superior que gestionará el menú con todos las entradas de los submenús mediante menús desplegables y nada en el menú de la izquierda). Por lo que llamaremos a estos dos sistemas: "menú izquierdo" y "menú superior".

Es posible desarrollar su propio gestor de menús (izquierdo y/o superior), que reemplazaría completamente el menú por defecto. Usted decide como guardar su menú (en la base de datos, tal y como lo hace el gestor de menús auguria, centralizado en un fichero, como el gestor de menús eldy, ...). Como puede ver, puede ofrecer un gestor de menús con el comportamiento que usted necesite y la tecnología que desee...

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ú "auguria", suministrado como estándar. 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 no 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, 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

  1. Copiar el archivo htdocs/core/menus/standard/eldy_backoffice.php bajo otro nombre, como por ejemplo: htdocs/core/menus/standard/mimenu.php
  2. Editar seguidamente el fichero mimenu.php. La función showmenu() de la clase MenuTop 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 objetos globales: $user, $conf, $db, $langs, $mysoc, $hookmanager, $extrafields
$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/core/menus/standard/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>';
    }

Para desarrollar su sistema de menú izquierdo

El principio es igualmente simple.

  1. Seguidamente modificar la función showmenu() de MenuLeft para construtir su menú izquierdo. Si desea visualizar el menú o simplemente modificarlo ligeramente sin llegar a recrearlo completamente, simplemente recorra el contenido de la colección $menu->liste. Si desea mostrar un menú completamente diferente y controlado totalmente por usted, deberá crear un objeto $newmenu=new Menu() en la función showmenu() y utilizar los métodos $newmenu->add y $newmenu->add_submenu para definir el listado de entradaas del menú izquierdo a mostrar. Al final del código, mostraremos por impresión el contenido de la colección $newmenu->liste (que acaba de ser construida) en lugar de $menu->liste.

Ejemplo de fichero htdocs/core/menus/standard/mimenu.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 '&nbsp; &nbsp; <a class="vsmenu" href="'.$this->menu_array[$i]['url'].'">'.$this->menu_array[$i]['titre'].'</a><br>';
                else 
                    print '&nbsp; &nbsp; <font class="vsmenudisabled">'.$this->menu_array[$i]['titre'].'</font><br>';
            }
            if ($this->menu_array[$i]['level']==3) {
                if ($this->menu_array[$i]['enabled'])
                    print '&nbsp; &nbsp; &nbsp; &nbsp; <a class="vsmenu" href="'.$this->menu_array[$i]['url'].'">'.$this->menu_array[$i]['titre'].'</a><br>';
                else 
                    print '&nbsp; &nbsp; &nbsp; &nbsp; <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";
            }
        }

    }

Forzar el uso de su gestor de menú

También puede forzar el uso de su gestor de menú en la creación de un módulo. Para ello, simplemente hay que añadir las siguientes 4 constantes en la tabla $this->const de su descriptor del módulo (Ver la página Desarrollo de un módulo).

* 1=>array('MAIN_MENU_STANDARD_FORCED','chaine','mimenu.php','Force menu handler to this value',1,'current',1),
* 2=>array('MAIN_MENUFRONT_STANDARD_FORCED','chaine','mimenu.php','Force menu handler to this value',1,'current',1),
* 3=>array('MAIN_MENU_SMARTPHONE_FORCED','chaine','mimenu.php','Force menu handler to this value',1,'current',1),
* 4=>array('MAIN_MENUFRONT_SMARTPHONE_FORCED','chaine','mimenu.php','Force menu handler to this value',1,'current',1),

Cuando se active el módulo, se utilizará su gestor de menú, cualquiera que sea la configuración.