Estoy realizando un CMS (pequeña duda de lógica)

Iniciado por dimitrix, 4 Marzo 2011, 00:58 AM

0 Miembros y 1 Visitante están viendo este tema.

dimitrix

Vamos a ver, estoy realizando un pequeño CMS tipo Joomla (digo el panel y como está dividido), no tengo ningún problema en nada... excepto... en como hacer cuando por ejemplo hay un menú dentro de otro menu por ejemplo:

- Inicio
- Donde Estamos

--> En Valencia
--> En Barcelona

-----> En Tarrassa
-----> Otros lugares
--> En Alicante
--> En Madrid

- Servicios que ofrecemos



Es decir, un sección dentro de otra, así hasta 3 nivele en este caso.
El problema es que en el desplegable para seleccionar la 'sección' me salen en lista:

CitarInicio
Donde Estamos
En Valencia
En Barcelona
En Tarrassa
Otros lugares
En Alicante
En Madrid
Servicios que ofrecemos

y yo quiero que me salgan tipo

CitarInicio
Donde Estamos
|-> En Valencia
|-> En Barcelona
|---> En Tarrassa
|---> Otros lugares
|-> En Alicante
|-> En Madrid
Servicios que ofrecemos

Y no tengo ni idea de como hacerlo. Los tengo en la base de datos y todas las secciones tienen un ID y un ID_Padre que el ID_Padre es la sección dentro de la que van o si es el Índice(la principal el valor es 0).

Había pensado en un While dentro de otro While dentro de otro, pero me gustaría algo que no sea tan cutre, sobretodo por que si tiene 5 niveles ya la he cagado.

¡Un saludo!




Castg!

entonces quiere decir que:
CitarInicio   ID_PADRE=0
Donde Estamos   ID_PADRE=0
|-> En Valencia   ID_PADRE=1
|-> En Barcelona   ID_PADRE=1
|---> En Tarrassa   ID_PADRE=2
|---> Otros lugares    ID_PADRE=2
|-> En Alicante   ID_PADRE=1
|-> En Madrid   ID_PADRE=1
Servicios que ofrecemos   ID_PADRE=0

Si esto es asi, trata de tener una idea segun este codigo:
Código (php) [Seleccionar]
//$items[] es un array('nombre','id','id_padre')
foreach($items as $item){
echo (($item['id_padre']>0)?'|'.str_repeat('-',$item['id_padre']).'>':NULL)." {$item['nombre']}";
}


Lógicamente faltan links y tendrias que adaptarlo a TU diseño HTML, que si trabajas con listas, en vez de agregar caracteres ("|-->"), agregar <ul>.

Espero serte de ayuda, si no trabajas de esta forma con los items, o no podes implementarlo, un poco de código no viene mal, aunque esta bien que por ahora no quieras dar código.

PD: Yo también estoy con un proyectito algo asi: "Blotg!" un blog programado unicamente por mi, llevo ya 3 semanas de su comienzo y ya estoy imprimiendo/subiendo/modificando posts,tags,categorias y comentarios. Ya lo vas a ver por aca...

Lunfardo

fijate en usar una solucion recursiva sino te queres enroscar con los while

Castg!

Yo creo que de esa solucion recursiva que hablas ya se encargo, porque por lo que pienso guarda en la base de datos con un "ID_PADRE" y ya ahi entra en juego la logica con respecto a este id.

dimitrix

Me gustaría publicarlo para uso no empresarial, pongo parte del código:

Código (php-brief) [Seleccionar]

   <option value="0">&Iacute;ndice</option>');
while ($valores = mysql_fetch_array($resultados)){
echo('<option value="'.$valores["ID"].'">'.$valores["Titulo"].'</a><br>');
};


El $valores es un array que contiene: ID, ID_padre y Titulo.

El value de la opción tiene que ser el ID y el título lo que aparezca en el seleccionador. Lo único que me falta es poner lo de -> -->.

Lo que está claro que esa parte la tengo que cambiar, que no puede ir con WHILE.




Lunfardo

#5
edit: jaja entendi el problema tarde , =P

dimitrix

No SmogMX, no tiene nada que ver con eso, pero gracias por el intento.
Tiene algo que ver más bien con lo de 'Castg!'.




Spider-Net

No me he fijado del todo bien en el código, pero así por encima yo hice un proyecto parecido e hice algo así:

El mismo while que tú, mas o menos, pero dentro del while pones un swtich.

Si el ID_PADRE == 0 por ejemplo no pones nada, si es 1 pones delante -> y si es 2, pones delante -->, de esta forma conseguirás la estructura en árbol que buscas. Así al menos lo hice yo y me funcionó bastante bien.

dimitrix

Cita de: Spider-Net en  4 Marzo 2011, 18:37 PM
No me he fijado del todo bien en el código, pero así por encima yo hice un proyecto parecido e hice algo así:

El mismo while que tú, mas o menos, pero dentro del while pones un swtich.

Si el ID_PADRE == 0 por ejemplo no pones nada, si es 1 pones delante -> y si es 2, pones delante -->, de esta forma conseguirás la estructura en árbol que buscas. Así al menos lo hice yo y me funcionó bastante bien.

Pero no serviría puesto que en la base de datos no está el nivel de cada uno 0, 1 o 2, por que puede llamar hasta 10.




Castg!

Código (php) [Seleccionar]

//...
'<option value="0">&Iacute;ndice</option>');
while ($valores = mysql_fetch_array($resultados)){
echo('<option value="'.$valores["ID"].'">'(($valores['ID_padre']>0)?'|'.str_repeat('-',$valores['ID_padre']).'>':NULL)..$valores["Titulo"].'</a><br>');
};


Así tendría que funcionar bien, eso creo... jeje.