Utilizamos cookies propias y de terceros para mejorar nuestros servicios y mostrarle publicidad relacionada con sus preferencias mediante el análisis de sus hábitos de navegación. Si continúa navegando, consideramos que acepta su uso.
Las cookies de este sitio web se usan para personalizar el contenido y los anuncios, ofrecer funciones de redes sociales y analizar el tráfico. Además, compartimos información sobre el uso que haga del sitio web con nuestros partners de redes sociales, publicidad y análisis web, quienes pueden combinarla con otra información que les haya proporcionado o que hayan recopilado a partir del uso que haya hecho de sus servicios. Puede cambiar la configuración u obtener más información aquí

Aceptar

Google

tunait.com » Tutorial » Listas dependientes


Listas dependientes desde base de datos con ASP y Access (II)

Listas dependientes con ASP y Access (I)

Generando el código

A continuación deberemos colocar las líneas de código que definan los contenidos de cada una de las listas dependientes. Esto es lo que vamos a escribir en el servidor usando ASP sacando los datos desde la base de datos.

Asumo que ya sabes realizar la conexión con la base de datos o no estarías leyendo este tutorial, de manera que nos saltaremos esa parte.

Realizamos una consulta a la base de datos pidiendo todas las categorías existentes en la tabla categorias_productos y las ordenamos por el id de su categoría padre.

query = "select * from categorias_productos order by id_categoria_padre"
set rc = conec.execute(query)

Creamos un bucle para pasar por cada uno de los registros devueltos por la consulta a la base de datos

do while not rc.eof

A continuación escribimos los arrays javascript;

En el script Javascript de las listas dependientes se crean arrays para guardar las opciones que se cargarán en los selectores. En la configuración del script se indica que:

" Crear un Array que lleve por nombre el valor enviado por el selector que llamó a la función:

por ejemplo, si se escoge en el primer selector la opción "herramientas" que lleva también "herramientas" por value llamará al Array (lista) del mismo nombre."

Como los nombres de las categorías pueden llevar acentos u otros caracteres extraños y nos daría entonces problemas con Javascript vamos a usar, como nombre de estos arrays, el identificador en la base de datos de la categoría. Como los nombres de las variables no pueden comenzar por un número vamos a anteponer cat_ al nombre de estas variables, de forma que cada array lleve por nombre cat_1, cat_2, cat_3, etc.

var cat_<%=rc("id_categoria") %>=new Array()

ok, ahora deberemos escribir cada uno de los elementos del array asignando un índice de posición correlativo. Para ellos creamos una variable contador que inicializamos a cero

contador = 0;

y escribimos la primera opción de la lista que siempre será el nombre de la categoría

cat_el id de la categoría[el valor de la variable $contador inicializada a cero] = new slctr('-- el nombre de la categoría --')

cat_<%=rc("id_categoria") & "[" & contador %>] = new slctr('- -<%= rc("nombre_categoria") %>- -')

Si el primer registro devuelto por la base de datos fuera

id_categoria: 1
nombre_categoria: Herramientas
id_categoria_padre: 0

Lo que se escribiría en el documento sería

var cat_1=new Array()
   cat_1[0] = new slctr('- -Herramientas- -')

A continuación escribiremos los elementos asociados a ese registro. En caso de ser una categoría principal lo que se escribirá serán las subcategorías asociadas; en el caso de ser una subcategoría lo que se escribirá serán los productos asociados a esa subcategoría.

Para ello necesitamos realizar otra consulta a la base de datos pero esta consulta deberemos hacerla a una u otra tabla dependiendo de si lo que debemos buscar son subcategorías (en el caso de estar escribiendo una lista de una categoría principal) o de si lo que debemos buscar son ya los productos asociados a una subcategoría (en el caso de que estemos escribiendo una lista de una subcategoría)

Lo primero que haremos al respecto será verificar si estamos con una lista de categoría principal o de subcategoría. El patrón común que las distingue es el campo id_categoria_padre que si es una categoría principal tendrá siempre un valor de 0 (cero) y si es una subcategoría tendrá siempre un valor superior a cero.

if rc("id_categoria_padre") = 0 then

Si la condición es cierta realizaremos la consulta a la tabla categorias_productos pidiendo las subcategorías cuyo id_categoria_padre sea igual al identificador del registro con el cual estamos actuando.
En el ejemplo anterior del registro 1 Herramientas pediríamos lo siguiente:

Select *_categoria from categorias_productos where id_categoria_padre = 1 order by nombre_categoria

Tanto si la consulta se realiza a la tabla de categorías como si se realiza a la tabla de productos necesitaremos averiguar su nombre descriptivo. En el ejemplo que estamos usando los nombres de los campos son distintos de una tabla a la otra: nombre_categoria y nombre_producto. Usaremos una variable sufijo que guarde el valor necesario. Si consultamos a la tabla de categorías la variable sufijo tomará el valor de 'categoria'; si consultamos a la tabla de productos tomará el valor de 'producto'.

Finalmente debemos usar el valor del id de la categoría padre del registro con el que estamos trabajando. La petición a la base de datos nos queda como sigue:

query2 ="select * from categorias_productos where id_categoria_padre = " & rc("id_categoria") & " order by nombre_" & sufijo

sufijo = "categoria"

Ahora bien, en el caso de que la categoría padre sea distinta a cero, es decir, que estemos escribiendo los datos de una subcategoría, la tabla a la que deberemos consultar será la de productos.

query2 = "select * from productos where id_categoria = " & rc("id_categoria") & " order by nombre_" & sufijo

sufijo = "producto"

Bien, una vez tengamos una u otra petición a la base de datos (a la tabla de categorías o a la tabla de productos) y asingnado el valor de sufijo ya podemos ejecutar la petición y crear un bucle que pase por cada uno de los registros devueltos


set rc2 = conec.execute(query2)
do while not rc2.eof 
contador = contador + 1
%>
cat_<%= rc("id_categoria") & "[" & contador %>] = new slctr("<%=rc2("nombre_" & sufijo)%>",'cat_<%=rc2("id_categoria")%>')
<% 
rc2.moveNext
Loop

El bloque entero quedaría de la siguiente forma:


<%
query = "select * from categorias_productos order by id_categoria_padre" 
set rc = conec.execute(query)
do while not rc.eof contador = 0 %> var cat_<%=rc("id_categoria") %>=new Array() cat_<%=rc("id_categoria") & "[" & contador %>] = new slctr('- -<%= rc("nombre_categoria") %>- -') <% if rc("id_categoria_padre") = 0 then sufijo = "categoria" query2 ="select * from categorias_productos where id_categoria_padre = " & rc("id_categoria") & " order by nombre_" & sufijo else sufijo = "producto" query2 = "select * from productos where id_categoria = " & rc("id_categoria") & " order by nombre_" & sufijo
end if
set rc2 = conec.execute(query2) do while not rc2.eof contador = contador + 1 %>
cat_<%= rc("id_categoria") & "[" & contador %>] = new slctr("<%=rc2("nombre_" & sufijo)%>",'cat_<%=rc2("id_categoria")%>') <% rc2.moveNext Loop rc.moveNext Loop
set rc = nothing
set rc2 = nothing
%> //--> </script>

Listas dependientes con ASP y Access (III) - Escribiendo el HTML


Copyright © 2006 www.tunait.com todos los derechos reservados