Tema destacado: Nueva página de elhacker.net en Google+ 
Autor
|
Tema: Estoy realizando un CMS (pequeña duda de lógica) (Leído 2,456 veces)
|
|
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: Inicio Donde Estamos En Valencia En Barcelona En Tarrassa Otros lugares En Alicante En Madrid Servicios que ofrecemos y yo quiero que me salgan tipo Inicio 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!
|
|
|
|
|
En línea
|
|
|
|
Castg!
Wiki
Desconectado
Mensajes: 1.187
|
entonces quiere decir que: Inicio 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: //$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...
|
|
|
|
|
En línea
|
|
|
|
Lunfardo
Desconectado
Mensajes: 560
|
fijate en usar una solucion recursiva sino te queres enroscar con los while
|
|
|
|
|
En línea
|
|
|
|
Castg!
Wiki
Desconectado
Mensajes: 1.187
|
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.
|
|
|
|
|
En línea
|
|
|
|
|
dimitrix
|
Me gustaría publicarlo para uso no empresarial, pongo parte del código: <option value="0">Í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.
|
|
|
|
|
En línea
|
|
|
|
Lunfardo
Desconectado
Mensajes: 560
|
edit: jaja entendi el problema tarde , =P
|
|
|
|
« Última modificación: 4 Marzo 2011, 18:56 por SmogMX »
|
En línea
|
|
|
|
|
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!'.
|
|
|
|
|
En línea
|
|
|
|
Spider-Net
Desconectado
Mensajes: 1.052
Un gran poder conlleva una gran responsabilidad
|
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.
|
|
|
|
|
En línea
|
"Si cuando hablas nadie se molesta, eso es que no has dicho absolutamente nada."
|
|
|
|
dimitrix
|
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.
|
|
|
|
|
En línea
|
|
|
|
Castg!
Wiki
Desconectado
Mensajes: 1.187
|
//... '<option value="0">Í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.
|
|
|
|
|
En línea
|
|
|
|
|
dimitrix
|
Mmmm... Castg! me da error, he intentado arreglarlo pero no anda bien.
Pero una cosa, timas el ID_padre como la cantidad de guines que hay que poner ¿No? Es que eso no es :-/
|
|
|
|
|
En línea
|
|
|
|
Castg!
Wiki
Desconectado
Mensajes: 1.187
|
aaaaaaaaa, entonces, id_padre que es? Por qué no me dlo dijiste antes con el ejemplo que te di?  Inicio 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 Que error te da?
|
|
|
|
|
En línea
|
|
|
|
|
Freeze.
|
Esa variable ID_PADRE no tiene sentido de la manera en que la están implementando. o.O
Me parece que para hacer ese menu, nunca lo he intentado con niveles "infinitos". Solamente lo hago de 2 niveles. Nivel Padre y Nivel Hijos, por decirlo asi. Y luego las relaciono.
|
|
|
|
|
En línea
|
|
|
|
Lunfardo
Desconectado
Mensajes: 560
|
Mmmm... Castg! me da error, he intentado arreglarlo pero no anda bien.
Pero una cosa, timas el ID_padre como la cantidad de guines que hay que poner ¿No? Es que eso no es :-/
basicamente la funcion de cast hace lo mismo que lo que te habia puesto pero nada mas que yo no sabia que id_padre era un datos. creo que recien entiendeo el problema estoy igual que freeze, no entiendo la funcion de la varible "ID_PADRE" , solo te dice el nivel al que pertenece pero no da informacio util de los niveles superiores
|
|
|
|
« Última modificación: 4 Marzo 2011, 20:29 por SmogMX »
|
En línea
|
|
|
|
Lunfardo
Desconectado
Mensajes: 560
|
solo para saber si entendi, vos queres algo asi pero mas elegante? ' <option value="0">Índice</option>'); $valores = mysql_fetch_array($resultados); while ($valores){ $nivelActual=$valores["ID_PADRE"]; while($valores["ID_PADRE"]==$nivelActual){ echo('<option value="'.$valores["ID"].'">'.$valores["Titulo"].'</a><br>'); $valores = mysql_fetch_array($resultados); } };
|
|
|
|
« Última modificación: 4 Marzo 2011, 20:42 por SmogMX »
|
En línea
|
|
|
|
|
|