Comunidad de diseño web y desarrollo en internet

Menú con XML y PHP

Que tal! Este es mi primer aporte y espero en verdad les sea de utilidad. En este tutorial les intentaré explicar sobre el manejo de un menú en XML, usando cada elemento como VAR.

Nos manejaremos de esta manera: por medio de PHP se cargan los elementos de mi menú como un array, lo que nos lleva sólo a ejecutar una acción en lugar de invocar cada elemento por separado.

Espero lo comprendan un poco mas con estas líneas.

Código :

<item id="MN_CURSOS" text="Cursos">
      <item id="MNCTSS_AREAS" text="Areas">
            <userdata name="url">
               <!--  Declaracion del elemento VAR:   -->
               <VAR:WSCATALOGOSAREAS/> 
               <!--  Para el catalogo de Areas  -->
            </userdata>
            <userdata name="qs">
               <VAR:LOADFORM/>
            </userdata>
         </item>
      <item id="MNCTSS_CURSOS" text="Admon de Cursos">
            <userdata name="url">
               <VAR:WSCATALOGOSCURSOS/>
            </userdata>
            <userdata name="qs">
               <VAR:LOADFORM/>
            </userdata>
      </item>
      <item id="MNCTSS_DOCENTES" text="Admon de Docentes">
            <userdata name="url">
               <VAR:WSCATALOGOSDOCENTES/>
            </userdata>
            <userdata name="qs">
               <VAR:LOADFORM/>
            </userdata>
      </item>
   </item>


En la línea 4 "VAR:WSCATALOGOSAREAS" puse un pequeño comentario sólo en esta parte, sin embargo en las demás líneas aparecen otras variables que uso de igual forma.


A continuación pasamos a la parte de PHP que es donde se carga el Array, en mi caso lo hago con un Switch dependiendo de la petición que se obtenga de otra de las peticiones que se efectúan en mi framework (cosa que espero poder compartir más adelante). Para este caso sólo pondré el Switch con el Case que quiero explicar:

Código :

switch ($oGET->do) {
      case 'load_menu' : {
         header ("Content-Type:text/xml");
         
         $oTpl->load(FS_ADMIN . 'menu.xml');
         $oTpl->setVar(
            array(
               'LOGOUT' => encodeQueryString(array('do' => 'logout')),
               'LOADFORM' => encodeQueryString(array('do' => 'load_form')),
               'WSCATALOGOSPERFILES' => WS_CATALOGOS_PERFILES,
               'WSCATALOGOSAREAS' => WS_CATALOGOS_AREAS,
               'WSCATALOGOSUSUARIOS' => WS_CATALOGOS_USUARIOS,
               'WSCATALOGOSCURSOS' => WS_CATALOGOS_CURSOS,
               'WSCATALOGOSDOCENTES' => WS_CATALOGOS_DOCENTES,

            )
         );

         $xml = $oPerfil->parseDHTMLXMenu($oTpl->publish(true));
         
         echo $xml;
         
         break;
      }


El objeto "$oGET" es un elemento global que uso para el manejo del Frame, este objeto ejecuta la acción "do" a la acción "load_menu". Dentro de este se encuentra el objeto "$oTpl" (ObjectTemplate) que es usado como plantilla, después carga con la acción "load" el menu.xml, la variable "FS_ADMIN" es sólo la dirección de la carpeta, esto con el fin de no tener que estar poniendo las rutas cada vez que quiera cargar algo, sólo use un archivo de constantes, esto es de mucha utilidad ya que evita pérdida de tiempo innecesaria en especificar las rutas.

Continuando, una vez cargado el menu.xml, el objeto "$oTpl" carga las variables de nuestro menu.xml, estas variables ya están definidas en mi archivo de constantes.

Esta es la parte para esta variable, "constantes.php" y cada uno de ellos es sólo el direccionamiento de las carpetas.

Código :

//Constantes para catalogo de Areas
define('WS_CATALOGOS_AREAS', WS_CATALOGOS . 'areas/');
define('FS_CATALOGOS_AREAS', FS_CATALOGOS . 'areas/');
define('FS_CATALOGOS_AREAS_GRID', FS_CATALOGOS_AREAS . 'grid/');
define('FS_CATALOGOS_AREAS_CONSULTA', FS_CATALOGOS_AREAS . 'editar/');
define('FS_CATALOGOS_AREAS_NUEVO', FS_CATALOGOS_AREAS . 'agregar/');


Una vez que se carga el Array lo asigno al objeto $xml, por ahí se observa lo siguiente:

Código :

$xml = $oPerfil->parseDHTMLXMenu($oTpl->publish(true));


Partiendo esta línea de derecha a izquierda sería:

Código :

$oTpl->publish(true)

Esto no tiene mucha ciencia, es sólo la acción de "publicar" el objeto $oTpl.

Código :

$oPerfil->parseDHTMLXMenu($oTpl->publish(true));

Aquí solo se pasa al modo de DHTMLX cuya referencia dejo aquí: http://docs.dhtmlx.com/doku.php

El objeto $oPerfil, lo uso para que dependiendo del perfil del usuario, se carguen o no las opciones del menú, por medio de validaciones y permisos asignados.

Este es un complemento para que nuestros menúes tengan cierta presentación y algunas animaciones.

Y LISTO! una vez que se genera esta variable $xml, sólo se le hace un "echo" y se hace un "break" para especificar que la petición ha sido terminada.

Yo les llamo OBJETOS entendiendo que ya se sabe que una variable puede ser manejada como tal.

Espero sus comentarios y espero que esto les sirva, aquí he aprendido mucho y espero seguir aportando.

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate