Gestión de Publicidad en ASP .NET

Por Marc Marsiñach

Contenido

 Introducción
 Desarrollo
 Conclusión

Introducción

Para evitar el trabajo que supone añadir o modificar página por página las llamadas de publicidad en nuestro sitio, voy a mostrar un sistema para centralizarls y gestionarlas de manera automática. Para encapsular esta funcionalidad utilizaremos un Web User Control (ASCX), el cual a su vez leerá los distintos valores de configuración de un archivo de recursos (RESX).

 

Desarrollo

Empezamos creando un proyecto Web llamado “MiWeb”. Seguidamente añadimos los siguientes archivos al proyecto (Ver Figura 1):

  • Un Web User Control al que llamaremos Publicidad.ASPX 

  • Un archivo de recursos al que llamaremos Publicidad.RESX 

  • Un Web Form al que llamaremos Inicio.ASPX

    Bb972206.art207-img01-319x359(es-es,MSDN.10).jpg
    Figura 1: Vista del Explorador de Soluciones. Volver al texto.

Abrimos el archivo de recursos y añadimos las siguientes entradas de configuración (Ver Figura 2):

  • Inicio.Zonas , donde indicamos el número de contenedores o zonas de publicidad. Le decimos que hay 2.

  • Inicio.Zona1.Style e Inicio.Zona2.Style , donde especificamos los atributos de estilo de los dos contenedores.

  • Inicio.Zona1 e Inicio.Zona2 donde pondremos las llamadas de publicidad.

    Bb972206.art207-img02-570x197(es-es,MSDN.10).jpg
    Figura 2: Vista del archivo de recursos. Volver al texto.

Fíjate que el nombre Inicio se corresponde con el nombre del Web Form dónde vamos a insertar el Módulo de Publicidad; así, si nuestra página se llamase Default en vez de Inicio.Zonas, pondríamos Default.Zonas.

Una vez que tenemos definidos el número de zonas y sus atributos, pasamos a crear el gestor de publicidad.

Para ello abrimos el archivo VB del Web User Control e importamos los siguientes espacios de nombre:

Imports System.Text
Imports System.Resources

El espacio de nombres System.Text lo necesitamos para utilizar el objeto StringBuilder en la concatenación de cadenas de carácteres, y System.Resources para poder llamar al archivo Publicidad.RESX.

Ahora vamos a añadir al Page_Load todo el código que necesitamos.

Primero, vamos a cargar en memoria el archivo de recursos. Para ello utilizamos el siguiente código:

Dim rm As ResourceManager
Dim objAssembly As System.Reflection.Assembly
rm = New ResourceManager("MiWeb.Publicidad", objAssembly.GetExecutingAssembly())
If Not rm Is Nothing Then
   rm.IgnoreCase = True
End If 

Fíjate que con la propiedad IgnoreCase del objeto ResourceManager he obligado al gestor a ignorar la distinción entre mayúsculas y minúsculas. Esto nos facilitará el trabajo y evitará posibles errores. Con el siguiente código obtendremos el nombre de la página que se haya solicitado:

CODE 3 Dim Pagina As String = ""
Dim arr() As String
arr = Request.ServerVariables("URL").Split("/")
Pagina = arr.GetValue(arr.GetUpperBound(0))
Pagina = Pagina.Remove(Pagina.Length - 5, 5)

Una vez que conocemos el nombre de la página y hemos cargado el archivo de recursos podemos ir a buscar su configuración. Obtenemos así, el número de Zonas con publicidad en la página:

Dim NumZonas As Int32 = 0 
NumZonas = rm.GetString(Pagina + ".Zonas")

Ejecutamos ahora la siguiente iteración tantas veces como Zonas tengamos:

Dim i As Int32 = 0
For i = 1 To NumZonas
Dim lbl As New System.Web.UI.WebControls.Label
Dim sb As New StringBuilder
With sb
     .Append(Pagina)
     .Append(".Zona")
     .Append(i.ToString)
End With
      lbl.ID = "Zona" + i.ToString
      Dim Zona As String
      Zona = rm.GetString(sb.ToString)
      lbl.Text = Zona
      sb.Append(".Style")
      lbl.Attributes("style") = rm.GetString(sb.ToString)
      Controls.Add(lbl)
Next i

Con este código hemos creado un control para cada zona en tiempo de ejecución. En este caso se trata de controles del tipo Label , los cuales nos hacen las veces de contenedores. Les hemos añadido la etiqueta Style para marcar su posición en la pantalla y hemos llenado la propiedad Text con la llamada al servidor de banners.

Ahora solo nos resta arrastrar el control al Web Form donde queremos que aparezca la publicidad. En el caso que nos ocupa, el formulario Inicio.ASPX.

Una cosa muy interesante y a tener en cuenta es que debemos colocar la llamada al Web User Control al final del código HTML, justo después de la etiqueta </FORM>. Con esto conseguimos que la publicidad se cargue en última instancia evitando que el contenido de la página tarde en aparecer en el cliente.

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="Inicio.aspx.vb" Inherits="MiWeb.Inicio"%> 
<%@ Register TagPrefix="uc1" TagName="Publicidad" Src="Publicidad.ascx" %>
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
< HTML >
      < HEAD >
            <title>WebForm1</title>
            < meta name ="GENERATOR" content ="Microsoft Visual Studio .NET 7.1">
            < meta name ="CODE_LANGUAGE" content ="Visual Basic .NET 7.1">
            < meta name ="vs_defaultClientScript" content ="JavaScript">
            < meta name ="vs_targetSchema" content ="https://schemas.microsoft.com/intellisense/ie5"> 
      </ HEAD >
      < body MS_POSITIONING ="GridLayout">
            < form id ="Form1" method ="post" runat ="server">
            </ form >
            < uc1:Publicidad id ="uscPublicidad" runat ="server"></ uc1:Publicidad >
      </ body >
</ HTML >

 

Conclusión

Con este sistema resulta mucho más escalable la gestión de la publicidad de un sitio ya que tenemos las llamadas centralizadas en un solo lugar. Tan solo necesitamos arrastrar el Web User Control en aquellas páginas donde se requiere publicidad.

Con la siguiente versión ASP .NET 2.0 podemos utilizar nuestro User Control conjuntamente con el uso de Master Pages; con lo cual ya no necesitaremos arrastrar página a página nuestro control, si no tan sólo especificar en el archivo de recursos las zonas de una determinada página.

Marc Marsiñach es estudiante de la Ingeniería Técnica en Informática de Gestión en la Universitat Oberta de Catalunya. Trabaja como Responsable Técnico. Ha realizado los cursos MOC para la certificación MCAD.