Vemos todo el código de la aplicación que se ha centralizado en un único archivo. El código tiene comentarios, aunque se describirá también más adelante.
El siguiente ejemplo muestra un pequeño esqueleto de lo que seria una tienda virtual. Únicamente hay implementado un motor para mostrar un catálogo de productos basándose en los registros de una base de datos Access.
Nota: Se han colocado comentarios en el código para que sea más fácil de seguir. De todos modos en un capítulo más adelante se comentará de nuevo para que se entiendan sus diferentes partes. |
<%@ LANGUAGE="VBScript" %>
<% Option Explicit Dim Nivel ' Nivel de anidación en los menus. Dim FamiliaEnCurso ' Determina por que rama del menú de artículos va. Dim ConexionBD ' Conexión con la base de datos. Dim Familias ' Tabla de familias. Dim Articulos ' Tabla de artículos. Dim SesionID ' parametro. Dim Explosion ' parametro. Dim Info ' Parametro. Dim Cesta ' Parametro. Dim t ' Contador. ' Conexión con la base de datos Set ConexionBD = Server.CreateObject("ADOdb.Connection") ConexionBD.Open "DSN=arbol" ' Para SQL : "driver={SQL Server};server=sql.midominio.com;uid=identificacion;pwd=clave;database=base" ' Recupera parámetros. SesionID=request.querystring("SesionID") Explosion=request.querystring("Explosion") Info=request.querystring("Info") Cesta=request.querystring("Cesta") ' Inserta una opción del menú del arbol de familias. Sub InsertaMenu(Familia) %> <SPAN ID=<%= Familia("IDFamilia")%> CLASS=Menu STYLE="cursor: hand; color: #0000A0; font-bold: true;" OnClick="CambiarImagen('i<%= Familia("IDFamilia")%>');"> <IMG NAME="i<%= Familia("IDFamilia")%>" Src="imagenes/cerrar.gif"> <%= Familia("Descripcion")%><BR> </SPAN> <% End Sub ' Inserta el arbol de menú de la familia de productos definida. Function InsertaFamilias(Padre) Dim Familias ' Tabla de familias. ' Si no se indica rama de la familia inserta todo el arbol. If IsNull(Padre) Then Set Familias = ConexionBD.Execute("select EsUltima,IDPadre,IDFamilia,Descripcion from Familias WHERE IDPadre IS NULL ORDER BY IDPadre") Else Set Familias = ConexionBD.Execute("select EsUltima,IDPadre,IDFamilia,Descripcion from Familias WHERE IDPadre = '" & Padre & "' ORDER BY IDPadre") end if Familias.MoveFirst Do while Not Familias.EOF FamiliaEnCurso = Familias("IDFamilia") ' Ha llegado al final de una rama. If Familias("EsUltima") Then For t = 1 to Nivel ' Indenta los hijos pertenecientes al padre actual. Response.Write(" ") Next ' Escribe el hijo en curso. Response.Write("<A HRef='index.asp?Explosion=" & Familias("IDFamilia") & "&SesionID=" & SesionID & "'><Img Src='imagenes/new.gif' Border='0'>" & Familias("Descripcion") & "</A><BR>") Else ' Todavia hay hijos por explosionar. InsertaMenu(Familias) ' Manda escribir el menú del padre actual. Nivel = Nivel + 1 ' Sube un nivel para indentar los hijos. Response.Write ("<DIV ID=" & FamiliaEnCurso & "Detalles style='display:None; position:relative; left:12;'>") ' Se rellama para insertar los hijos del padre que ha localizado. InsertaFamilias(Familias("IDFamilia")) Response.Write("</DIV>") Nivel = Nivel - 1 ' Desciende un nivel al acabar con el padre actual. End if Familias.MoveNext Loop End function %> <html> <link rel="stylesheet" type="text/css" media="screen" href="estilos.css"> <head> <title>My Shop</title> <!--#include file=funcioneshead.inc--> </head> <BODY LeftMargin=3 BackGround="imagenes/fondo.gif"> <TABLE BORDER="0" CellSpacing="0" CellPadding="0" Width=750> <TR> <!-- ********** --> <!-- Opciones --> <!-- ********** --> <TD ALIGN="LEFT" VALIGN="TOP" WIDTH=180> <TABLE Width=145 Border=0 CellSpacing=0> <TH BGColor="#7F4211" Align="left" Style="Color: White;"> Artículos </TH> <TR> <TD VAlign="Top"> <FONT COLOR="#FF0000"> <% ' Inserta el arbol de productos. Nivel = 0 InsertaFamilias(Null) ' Null = Inserta todo el arbol. %> </FONT> </TD> </TR> </TABLE> <BR> </TD> <TD Width=50> </TD> <TD ALIGN="LEFT" VALIGN="TOP"> <CENTER> <TABLE Border=3 CellSpacing=0 CellPadding=0 Width=600 Style="Border-Style: inset;"> <TH BGCOLOR="#03A7CF" Align="Right"> <FONT style="font-family: Arial Black; font-size: 22pt; font-weight : bold; color : White;"> Como mostrar un arbol de productos para una tienda con ASP </FONT> </TH> </TABLE> </CENTER> <% ' ********************************* ' Añadir a la cesta. ' ********************************* If Cesta <> "" Then End If ' ********************************* ' Información sobre un artículo. ' ********************************* If Info <> "" Then Set Articulos = ConexionBD.Execute("select * from Articulos WHERE IDArticulo = '" & Info & "'") If Articulos.EOF Then Response.Write("<H2>Artículos solicitado no existe</H2>") Else Response.Write("<TABLE Border='1'>") Response.Write("<TH>Información sobre el artículo : " & Articulos("IDArticulo") & "</TH>") Response.Write("<TR><TD>") Response.Write("<B>" & Articulos("IDArticulo") & "</B> - " & Articulos("Descripcion") & "<BR>") Response.Write("PVP : " & Articulos("PVP") & " PVP en la calle : " & Articulos("PVPEnlaCalle") & "<BR>") Response.Write("Descripción : " & Articulos("DescAmpliada") & "<BR>") Response.Write("Foto : " & Articulos("Foto") & " Medidas : " & Articulos("Medidas") & "<BR>") Response.Write("</TD></TR>") Articulos.MoveNext Response.Write("</TABLE>") End If End If ' ************************ ' Explosionar una familia ' ************************ If Explosion <> "" Then ' Al seleccionar una familia en el arbol previamente creado... ' ... La variable "explosion" adquiere el valor del ID de la familia seleccionada. Response.Write("<H1>Articulos</H1>") ' Carga la familia para mostrar su referencia. Set Familias = ConexionBD.Execute("select IDFamilia, Descripcion from Familias WHERE IDFamilia = '" & Explosion & "'") If Not Familias.EOF Then ' Si se encuentra la familia. Response.Write("<H2>(" & Familias("IDFamilia") & ") " & Familias("Descripcion") & "</H2>") End If ' Carga todos los artículos correspondientes a la familia seleccionada. Set Articulos = ConexionBD.Execute("select * from Articulos WHERE IDFamilia = '" & Explosion & "'") If Articulos.EOF Then ' Si no hay artículos para la familia seleccionada. Response.Write("<H2>No hay artículos en esta categoria</H2>") Else ' La familia tiene artículos. Articulos.MoveFirst Response.Write("<TABLE Border='1'>") Do While Not Articulos.EOF Response.Write("<TR><TD>") Response.Write("<B>" & Articulos("IDArticulo") & "</B> - " & Articulos("Descripcion") & "<BR>") Response.Write("PVP : " & Articulos("PVP") & " PVP en la calle : " & Articulos("PVPEnlaCalle") & "<BR>") Response.Write("Descripción : " & Articulos("DescAmpliada") & "<BR>") Response.Write("Foto : " & Articulos("Foto") & " Medidas : " & Articulos("Medidas") & "<BR>") Response.Write("</TD><TD>") Response.Write("<A HRef='index.asp?Explosion=" & Explosion & "&Cesta=" & Articulos("IDArticulo") & "&SesionID=" & SesionID & "'>Añadir a la cesta</A><BR>") Response.Write("<A HRef='index.asp?Explosion=" & Explosion & "&Info=" & Articulos("IDArticulo") & "&SesionID=" & SesionID & "'>Mas información</A><BR>") Response.Write("</TD></TR>") Articulos.MoveNext Loop Response.Write("</TABLE>") End If End If %> </TD> </TR> </TABLE> <!--#include file=funcionesbody.inc--> </BODY> </HTML> |
Jose Luis Monte Galiano