Foros del Web » Programando para Internet » ASP Clásico »

Menú dinámico asp - xml

Estas en el tema de Menú dinámico asp - xml en el foro de ASP Clásico en Foros del Web. Hola a todos: Necesito un menú dinámico. Un menú, multilevel, que se genere solo. El menú va a ser del tipo <ul><li>......</ul>. Desde una CSS ...
  #1 (permalink)  
Antiguo 02/01/2008, 19:15
 
Fecha de Ingreso: abril-2006
Mensajes: 69
Antigüedad: 18 años, 1 mes
Puntos: 0
Menú dinámico asp - xml

Hola a todos:

Necesito un menú dinámico. Un menú, multilevel, que se genere solo. El menú va a ser del tipo <ul><li>......</ul>. Desde una CSS tengo ya todas las características del menú montadas, tanto de diseño como para que los submenús se oculten y muestren. Sin embargo, no sé cómo recuperar los registros, dado el problema del multilevel. Tengo dos opciones en mente: coger los datos de un xml, o leerlos de una bbdd.

CON ACCESS Y SQL
=============

El problema es que el menú tiene varios levels, y todo eso lo tengo definido en dos tablas, con lo cual necesito un select dentro de otro select.

Me estoy volviendo loco para hacer que un select esté dentro del otro. Estoy probando con subconsultas, con arrays, y con varias cosas que voy encontrando, pero no hay manera. Por eso acudo, en última instancia, solicitando ayuda.

Os explico cómo está el tema:

TABLA 1 (id y familia):

1 - Rodríguez
2 - Gutiérrez
3 - Pérez
4 - Serrano
5 - García
Etc...

TABLA 2 (id, nombre, id_tabla1):

1 - Pedro - 1
2 - María - 1
3 - Luis - 2
4 - Manuel - 2
5 - Lola - 3
6 - Alicia - 3
7 - Roberto - 3
8 - Pablo - 4
9 - Silvia - 5

Etc.

Es decir, los registros de la segunda tabla se enlazan con la primera mediante el campo id_tabla1, que se refiere al id (valor único) de la tabla 1.

Y el resultado que busco es, ya en HTML:

RODRÍGUEZ
Pedro
María

GUTIÉRREZ
Luis
Manuel

PÉREZ
Lola
Alicia
Roberto

SERRANO
Pablo

GARCÍA
Silvia

Es decir: por cada valor de la tabla 1, escribo todos los valores de la tabla 2 cuyo id_tabla1 coincida con el id de ese valor de la tabla 1.

Si no me corregís, creo que habría que hacer algo así:

SELECT de la tabla 1 todos los registros; por cada registro, me escribes su nombre, y me haces ahora un SELECT de la tabla 2, DONDE el id_tabla1 sea = al id de la tabla 1 en la que estamos.

Y no sé hacerlo, claro. No sé hacer selects dentro de selects.

También había pensado con un array:

SELECT de la tabla 1 todos los registros, y me los guardas en un array, de varias columnas; por cada registro del array, me escribes el valor del nombre y me das el valor del id, y haces un SELECT con ese id a la tabla 2, para que me devuelva todos los registros con ese id.

Qué facil es escribirlo en castellano, ¿verdad? El problema es cómo se pasa a lenguaje máquina, je, je...

CON XML
======

Básicamente mi problema es el mismo. Tengo una serie de nodos padre, con la información de la tabla 1, y varios nodos hijo, con la información de la tabla 2. Ejemplo:

<Rodriguez>
<Pedro></Pedro>
<María></María>
</Rodriguez>
<Gutiérrez>
<Luis></Luis>
<Manuel></Manuel>
</Gutiérrez>
<Pérez>
<Lola></Lola>
<Alicia></Alicia>
<Roberto></Roberto>
</Pérez>

Etc...

Pues se trata de lo mismo: léeme todos los nodos padre, y, por cada nodo padre, escríbeme primero su nombre, y luego todos los nodos hijo que lleva dentro.

Pero hay que hacer también un doble bucle, un doble select, una doble consulta... como queráis llamarlo, pero no sé hacerlo.

CONCLUSIÓN
=========

Pues ya véis... Yo creo que es muy interesante el contar con menús dinámicos, pues no hacemos nada separando contenidos de formatos, si no podemos hacer que los menús crezcan de forma automática. Bueno, sí, se pueden hacer muchas cosas, pero quiero decir que un menú dinámico es el complemento perfecto para una web de contenidos dinámicos.

Espero que podáis iluminarme un poco (cuanto más mejor, je, je...) y que este la solución a este problema os sirva a muchos de vosotros, ya que he sido incapaz de encontrar la respuesta por Internet).

Un saludo y muchísimas gracias (aunque sea sólo por leer este peñazo).

Moleman.
  #2 (permalink)  
Antiguo 03/01/2008, 08:59
Avatar de JuanRAPerez
Colaborador
 
Fecha de Ingreso: octubre-2003
Mensajes: 2.393
Antigüedad: 20 años, 6 meses
Puntos: 27
Re: Menú dinámico asp - xml

oki

seria algo asi

- select * from tutabla 1 order by Familia
- hacemos el RecordSet RSTB1 en donde colocaremos los datos encontrados
- hacemos un do while mientras no sea EOF o BOF
- imprimimos el primer registro
-- select * from tutabla2 where id = '"& RSTB1("ID") &"' order by Nombre
-- hacemos el RecordSet RSTB2" en donde colocaremos los datos encontrados
-- imprimimos todos los registros de este RecordSet (do while... movenext... loop)
- nos movemos en el siguiente registro del RSTB1
- loop

suerte
__________________
JuanRa Pérez
San Salvador, El Salvador
  #3 (permalink)  
Antiguo 03/01/2008, 20:01
 
Fecha de Ingreso: abril-2006
Mensajes: 69
Antigüedad: 18 años, 1 mes
Puntos: 0
Re: Menú dinámico asp - xml

¡Perfecto!

Muchísimas gracias.

Yo no sabía que se podía hacer un segundo recordset. Yo siempre ponía a todos los recordset el nombre "rs". Entonces, claro, no podía hacer más de uno. Pero ahora puedo poner un "rs1", otro "rs2", etc. Como tú decías. Y me ha funcionado.

He hecho una base de datos con dos tablas, la primera correspondiendo al primer nivel de menús, y la segunda con todos los sublevels. Y todo dinámico, de tal modo que el menú y los submenús se generan solos. Con una buena hoja de estilos, este menú me puede dar mucho juego.

Seguiré intentando lo de importar los datos de un xml, que ahora es la duda que tengo, je, je...

De todos modos, muchas gracias. Si alguien quiere el ejemplo final, que me escriba, y se lo paso.

Muchas gracias y un saludo.
  #4 (permalink)  
Antiguo 03/01/2008, 20:33
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 17 años, 2 meses
Puntos: 88
Re: Menú dinámico asp - xml

Algo asi???
basandonos en la idea de Juan()
Código PHP:
response.Buffer=true
'creacion de la conexion a base de datos
StrCxn="PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE="
StrCxn=StrCxn & server.MapPath("./bd1.mdb;")
'
creacion de la variable a manejar la base
set conexion
=server.CreateObject("ADODB.Connection")
'abriendo la conexion
conexion.open StrCxn
'
construccion primaria de los ids
mainsqlstr
="select id,familia from tabla1"
'realizando la obtencion de los ids, de las familias
set rs=conexion.execute(mainsqlstr)
'
obteniendo todos los resultados
if rs.eof=false then 
    listado
=rs.getrows 
end 
if
'cerrando el recordset
rs.close
'
obteniendo todos los referentes al apellido dado
for i=0 to ubound(listado,2)
    for 
j=0 to ubound(listado,1)
        
'listando los resultados por apellido
        %><ul><%response.Write listado(1,i)
        '
construccion secundaria de todos los nombres referentes a ese apellido
        submainsqlstr
="select id,nombre from tabla2 where id_tabla1=" listado(0,i)
        
set rs=conexion.execute(submainsqlstr)
        
'obteniendo los nombres, creandose un arreglo vistual para cada familia
        while rs.eof=false
            '
imprimiendo
            
%><li><%response.Write rs.fields.item(1)%></li><%
            
'hasta el ultimo por cada familia
            response.Flush()
            rs.movenext
        wend
        '
cerrando la consulta
        rs
.close%>
        </
ul><%'hasta la ultima familia
        response.Flush()
    next
next

'
liberando memoria
set rs
=nothing
set conexion
=nothing
redim listado
(0)
set listado=nothing 
__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 17:50.