> Manuales > Árbol de productos para una tienda ASP

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

Manual