Sistema de menús: Difference between revisions

From Dolibarr ERP CRM Wiki
Jump to navigation Jump to search
Line 48: Line 48:


* Para desarrollar su '''sistema de menú izquierdo''', el principio es igualmente simple.
* Para desarrollar su '''sistema de menú izquierdo''', el principio es igualmente simple.
# Copiar el fichero htdocs/includes/menus/barre_left/eldybackoffice.php baojo otro nombre, como por ejemplo  htdocs/includes/menus/barre_left/mimenu.php.
# Copiar el fichero htdocs/includes/menus/barre_left/eldybackoffice.php bajo otro nombre, como por ejemplo  htdocs/includes/menus/barre_left/mimenu.php.
# Seguidamente modificar la función showmenu() para construtir su menú izquierdo. Si desea visualizar el menú o simplemente modificarlo ligeramente sin llegar a recrearlo completamente,
# Seguidamente modificar la función showmenu() 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, inicializada por Dolibarr "por defecto" gracias al fichero pre.inc.php existente en la misma carpeta que la página llamada. Si desea mostrar un menú completamente diferente y controlado totalmente por usted (ignorando los ficheros pre.inc.php), 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.
 
 
, simplemente recorra el contenido de la colección $menu->liste, inicializada por Dolibarr "por defecto" gracias al fichero pre.inc.php existente en la misma carpeta que la página llamada. Si desea mostrar un menú completamente diferente y controlado totalmente por usted (ignorando los ficheros pre.inc.php), 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/includes/menus/barre_left/mimenu.php
Ejemplo de fichero htdocs/includes/menus/barre_left/mimenu.php

Revision as of 14:10, 1 April 2009

En verysmall.png Page waiting for translation. To translate, create an account, go back and clic on "Modify".
Fr verysmall.png Page en attente de traduction. Pour traduire, créez un compte, revenez et cliquez sur "Modifier".
Es verysmall.png Página a traducir. Para traducirla, cree una cuenta, vuelva a la página y haga clic en "editar".
It verysmall.png Pagina da tradurre. Per tradurla, crea un utente, torna indietro e clicca su "modifica".
Pt verysmall.png Página a aguardar por tradução. Para traduzir, crie uma conta, volte atrás e clique em "Modificar".
De verysmall.png Seite wartet auf Übersetzung. Um Übersetzung zu erstellen, richte einen Account ein, geh zurück und klicke auf "bearbeiten".
Zh verysmall.png 页面等待翻译。若要翻译本页,先创建一个帐户、登录并返回本页后单击“编辑”。

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 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/includes/menus/barre_top/eldybackoffice.php bajo otro nombre, como por ejemplo: htdocs/includes/menus/barre_top/mimenu.php
  2. 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>';
    }


  • Para desarrollar su sistema de menú izquierdo, el principio es igualmente simple.
  1. Copiar el fichero htdocs/includes/menus/barre_left/eldybackoffice.php bajo otro nombre, como por ejemplo htdocs/includes/menus/barre_left/mimenu.php.
  2. Seguidamente modificar la función showmenu() 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, inicializada por Dolibarr "por defecto" gracias al fichero pre.inc.php existente en la misma carpeta que la página llamada. Si desea mostrar un menú completamente diferente y controlado totalmente por usted (ignorando los ficheros pre.inc.php), 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/includes/menus/barre_left/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 '    <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";
            }
        }

    }