PHP: Una clase para generar menus basadas en una tabla con relacion ciclica

Bien el problema es el siguente se tiene una tabla que esta formda por tres campos el primero la llave primaria, el segundo una descripcion y el tercero un campo que puede hacer referencia hacia una de las llaves primarias y es una llave foranea algo cmo esto:

codigo   titulo                                   idcodigo

1              Mantenimientos              null

2              Productos                          1

3             Clientes                                1

4             Proveedores                      1

5             Operaciones                       null

6             Ventas                                  5

7             Compras                              5

8             Almacen                              5

9             Entradas                              8

10          Salidas                                   8

El resultado de eso tiene que ser una lista en html para que luego se le aplique un css y se forme un menu algo como:

  • Mantenimientos
    • Productos
    • Clientes
    • Proveedores
  • Operaciones
    • Ventas
    • Compras
    • Almacen
      • Entradas
      • Salidas

Como se ve basado en los ID’s del FK se tienen que generar los menus y submenus bien para ello he creado la clase llamada menubuillder yes esta:

Archivo menubuillder.php

class menubuillder
{
public $menu;
private $aElementos;
private $mnuact;
public $html;
function __construct($_aelementos)
{
$this->menu =array();
$this->aElementos = $_aelementos;
$this->mnuact=-1;
$this->html="<ul>\n";
}
function makemenu($mimenu=array())
{
$mimenu= array();
foreach($this->aElementos as $reg)
{

if($reg[2]== 0) //es menu principal
{
$ar = $this->filterarra($reg[0]);
if(sizeof($ar)>0)
{
$this->html.=”<li id='”.$reg[0].”‘ name='”.$reg[0].”‘>”.$reg[1].”</li>\n”;
$mival = $this->makesubitems($ar);
$mimenu[$reg[1]]=array($reg[0],$reg[1],$mival);
}
else
{
$mimenu[$reg[1]]=array($reg[0],$reg[1],null);
$this->html.=”<li id='”.$reg[0].”‘ name='”.$reg[0].”‘>”.$reg[1].”</li>\n”;
}
}

}
$this->html.=”</ul>\n”;
$this->menu= $mimenu;
}
function makesubitems($arr)
{
$mnu =array();
$this->html.=”<ul>\n”;
foreach($arr as $reg)
{
$ar = $this->filterarra($reg[0]);
if(sizeof($ar)>0)
{
$this->html.=”<li id='”.$reg[0].”‘ name='”.$reg[0].”‘>”.$reg[1].”</li>\n”;
$mnu[$reg[1]]=array($reg[0],$reg[1],$this->makesubitems($ar));
}
else
{
$this->html.=”<li id='”.$reg[0].”‘ name='”.$reg[0].”‘>”.$reg[1].”</li>\n”;
$mnu[$reg[1]]=array($reg[0],$reg[1],null);
}
}
$this->html.=”</ul>\n”;
return $mnu;
}
function filterarra($valor)
{
$newarray = array();
foreach($this->aElementos as $elem)
{
if($elem[2]==$valor)
{
$newarray[]=$elem;
}
}
return $newarray;
}
}

Su aplicacion seria esta:

Archivo testmenubuilder.php

include(“menubuillder.php”);

$aregistros = array();

$aregistros[] = array(1,”mantto”,0);

$aregistros[] = array(2,”productos”,1);

$aregistros[] = array(3,”clientes”,1);

$aregistros[] = array(4,”proveedores”,1);

$aregistros[] = array(5,”operaciones”,0);

$aregistros[] = array(6,”ventas”,5);

$aregistros[] = array(7,”compras”,5);

$aregistros[] = array(8,”almacen”,5);

$aregistros[] = array(9,”ingresos”,8);

$aregistros[] = array(10,”salidas”,8);

$aregistros[] = array(11,”ingresos”,10);

$aregistros[] = array(12,”salidas”,10);

$aregistros[] = array(12,”mantenimiento1″,1);

$mnu = new menubuillder($aregistros);

$mnu->makemenu();

print_r($mnu->html);

Acerca de

Antes que nada voy a dejar en claro algo, en este blog escribo como se me place, asi que no busquen errores de ortografia o de redaccion que los van a encontrar a montones y tampoco me critiquen o me digan nada sobre ellos pues no tengo intencion alguna de cambiarlos, lo que escribo lo dejo asi y no lo corrijo,claro esta a menos que sean lineas de codigo. Jorge Prado Anci, profesional en desarrollo de aplicaciones, en especial las dirigidas a bases de datos. He trabajado con VFP en casi todas sus versiones, se algo de Java (que no me gusta, es eso solo no me gusta, es bueno pero no me gusta), lo suficiente de PHP como para tener mi propio CMS(es que sigue sin gustarme por la capacidad de desorden que te permite este “lenguaje”), VB lo conoci y lo deteste tanto que lo olvide al punto de no querer adoptar ni por obligacion a su reemplazante VB .NET (por lo mismo de Java) y si C# este si me encanta y aun que conozco bastante bien el lenguaje, la verdad es que me falta mucho del Framework (del 100% estare en un 65%). Soy un apasionado por el orden (en los proyectos de desarrollo), de la programacion en capas (de MVC conozco pero no he aplicado mucho), los estandares y las condenadas pruebas unitaria. Venga creo que ya con esto fue suficiente.

Tagged with: , , ,
Publicado en php
One comment on “PHP: Una clase para generar menus basadas en una tabla con relacion ciclica
  1. […] en los dos primeros meses me desquité en este mes tambien publiqué un post que hablaba de como hacer un menu basado en una tabla que tenia una relación ciclica osea se relaciona asi misma, en ese mismo mes al fin pude acceder a Openshift de RedHat un […]

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Escribe tu dirección de correo electrónico para suscribirte a este blog, y recibir notificaciones de nuevos mensajes por correo.

Únete a otros 441 seguidores

Blog Stats
  • 304,391 hits
A %d blogueros les gusta esto: