funcionamiento-aspEn esta entrada vamos a mostrar el código fuente del portal Web, en este caso desarrollado bajo el lenguaje de script ASP. Recordaremos en primer lugar la estructura lógica del portal, analizaremos el pseudocódigo de las dos funciones que lo gestionan y finalmente el código fuente del programa.

Señalar que buscamos un código fuente compacto y generalista, que resuelva el acceso a diferentes tablas de la base de datos para extraer de cada una de ellas los elementos que “rellenarán” los componentes de la estructura del portal. Apasionante.

Estructura del portal

En el segundo artículo de este entregable, vimos como podría ser una de las estructuras de portal web que podemos almacenar en la tabla SITES de nuestra base de datos. Recordemos:

estructura-portal-web
Estructura descriptiva de un modelo de portal web

Lo que necesitaremos será sustituir cada elemento (Pie, Cabecera, Cuerpo, etc.) por su código real almacenado en la tabla correspondiente (PIES, CABECERAS, CUERPOS, etc.).

Para ello en el código fuente del portal, almacenado en la tabla SITES, introduciremos una secuencia de texto concreta e inconfundible en cada zona definida del portal. Recordemos Cabecera, Pié, Menú, etc. Esta secuencia tendrá la siguiente estructura:

texto especial portal web

De esta forma cuando nuestro programa acceda al código fuente del portal web que tengamos activo, buscará estas secuencias de texto. Con cada secuencia localizada:

  • Verificará que el primer elemento sea el texto fijo BuscaR (a modo de garantía).
  • Si es así, llamará a otra función con los parámetros tabla y elemento para extraer el código html y sustituirlo en el lugar adecuado de la estructura del portal web.

En base a estas secuencias de texto, la estructura del portal web tendría a nivel lógico el siguiente aspecto:

estructura 2 portal web
Estructura descriptiva  del portal web con los textos a sustituir

Observamos que de obtener el código html de la estructura del portal se encargará la función MostrarPortalWeb, y de obtener el código html de cada elemento se encargará la función BuscaDatos.

Pseudocódigo

Veamos ahora el pseudocódigo del programa que contiene las funciones MostrarPortalWeb y BuscaDatos. Lo “normal” es que a este programa principal se le denomine index.asp (o index.php, según el lenguaje de script utilizado).

Funcion MostrarPortalWeb

Abrir conexión con base de datos

Acceder a la tabla SITES y sacar el CodigoHTML del portal activo

Si hay portal activo

Buscar cadenas del tipo ~BuscaR,MENUSUP,MenuGuapoNegro~

Para cada cadena de este tipo localizadas (que tengan ~)

Si el primer elemento es BuscaR

Si el segundo elemento es PAGINAS

Llamar a Funcion BuscaDatos (PAGINAS, Request)

Si no,    Llamar a Funcion BuscaDatos (tabla, elemento)

Si no es BuscaR, Escribimos la cadena (puede ser ~UnTexto~)

Fin para cada cadena

Si no hay portal activo

Mensaje de aviso PortalNoActivo

Cerrar conexión con base de datos

Fin función

Destacar que cuando llamamos a “index.asp” lo hacemos con una página a mostrar, por ejemplo “index.asp?Pagina=Bienvenida”. La zona del portal web que muestra los contenidos de las páginas es la que ha de mostrar en este caso la página “Bienvenida”. En general esta zona siempre mostrará el contenido de las páginas que se pasen a través de la URL de llamada (Request).

Veamos ahora la función BuscaDatos:

Funcion BuscaDatos (tabla, elemento)

Abrir conexión con la base de datos

Acceder a la tabla y sacar el CodigoHTML del elemento indicado

Si el elemento existe en la tabla y está activo

Escribir CodigoHTML

Si el elemento no esta activo o no existe

Mensaje de aviso PaginaNoActiva

Cerrar conexión con base de datos

Fin función

En el caso de la función BuscaDatos su código es más simple, pues su función es la de acceder a la tabla indicada y obtener el código HTML del elemento indicado. Por ejemplo, si estamos localizando uno de los piés de página que hemos diseñado en color azul, los parámetros enviados a la función serían por ejemplo “PIES” (la tabla) y “PieAzulGrande” (el elemento).

Lógica de la página index.asp

Completamos las explicaciones anteriores con la lógica que subyace en las llamadas a la página index.asp. Veamos.

Llamaremos al portal en la forma index.asp?Pagina=Bienvenida.

Es decir, indicamos en la llamada a index.asp la página que deseamos visualizar, que va como parámetro. Por ejemplo inicialmente podemos llamar a index con la página Bienvenida.

Cuando un usuario pulsa en una opción del menú, se llamará a index.asp con la página a la que referencia esa opción de menú, por ejemplo index.asp?Pagina=AvisoLegal o index.asp?Pagina=NoticiasDeHoy

Index.asp lo primero que hace es cargar la estructura del SITE y localizar, a través de los textos especiales, la página llamada para ubicarla en la zona de paginas, junto con los elementos auxiliares del portal (cabecera, menú superior, pié de página, etc.).

 

Código fuente en ASP

Finalmente os dejo el código fuente de la página index.asp, el cual podréis adaptar al lenguaje de programación que utilicéis vosotros.

<%@LANGUAGE=”JSCRIPT”%>
<!– #include file=”adojs.inc” –>
<!– #include file=”bm.inc” –>
<head>
<meta http-equiv=”Content-Language” content=”es”>
<meta http-equiv=”Content-Type” content=”text/html; charset=windows-1252″>
</head>
<%
Response.ContentType=”text/html; charset=utf-8″;
function BuscaDatos(tabla, elemento)
{
var datos = “”;
var consul = Server.CreateObject(“ADODB.Recordset”);
SQL = “select CodigoHTML from ” + tabla + ” where Activa = true AND PageNombre = ‘” + elemento + “‘;”;
consul.Open(SQL,Webb,adOpenStatic,adLockReadOnly,adCmdText);
if (consul.recordCount > 0)
{
//verificamos que CodigoHTML no esté vacío
if ((datos = String(consul(“CodigoHTML”))) == ‘null’) datos = “”;
}
else Response.Redirect(“index.asp?Pagina=PagNoActiva”);
Response.Write(datos);
//cerramos la conexión con la base de datos
consul.Close();
delete consul;
}
function MostrarPortalWeb(pagina)
{
var datos = trozos = “”;
var consul = Server.CreateObject(“ADODB.Recordset”);
//podemos tener varios modelos de portal web, cogemos el modelo activo
SQL = “select * from SITES where Activa = true;”;
consul.Open(SQL,Webb,adOpenStatic,adLockReadOnly,adCmdText);
if (consul.recordCount > 0)
{
//verificamos que CodigoHTML no esté vacío
if ((datos = String(consul(“CodigoHTML”))) == ‘null’) datos = “”;
   trozos = datos.split(“~”);
   for (i=0; trozos[i]; i++)
{
//Verificamos que el primer elemento sea el texto BuscaR
if (trozos[i].indexOf(“BuscaR”) != -1)
{
elementos = trozos[i].split(“,”);
          if (elementos[1] == “PAGINAS”)
//si el texto especial es PAGINA pasamos la pag. pedida
BuscaDatos(“PAGINAS”,Request(“pagina”));
else BuscaDatos(elementos[1],elementos[2]);
}
else Response.Write(trozos[i]);
}
}
else Response.Redirect(“index.asp?Pagina=PortalNoActivo”);
//cerramos la conexión con la base de datos
consul.Close();
delete consul;
}
%>
<%=Pagina(Request(“pagina”))%>

Reflexión final

Ahora que ya entendemos como “funciona” este mecanismo de “sustitución” de elementos del portal web, distribuyendo esos elementos en diversas tablas (PIES, CABECERAS, PAGINAS, etc.) en las que localizar sus contenidos, os dejo la siguiente reflexión como reto intelectual:

  • Supongamos que dentro de algunos elementos del portal, por ejemplo en los pies de página, incluyésemos también segmentos de texto “especiales” del tipo que hemos visto (~BuscaR,MENUSUP,MenuGuapoNegro~).
  • Ahora necesitaríamos que nuestra función BuscaDatos también “desgajase” esos segmentos de código y se llamase a sí misma para buscar nuevo contenido “anidado”. Debería de ser una función “recursiva”.

¿Os atrevéis a convertir dicha función en recursiva? Parece fácil, pero …. tiene lo suyo.

Ánimo y os invito a que diseñéis la función recursiva. Podéis enviármela para revisión a través de la web valentingom.com o del mail valentingom@gmail.com.

Anuncios