Come creare un circuito di rotazione per i nostri banners

di Daniele Bochicchio, in ASP - Scripting,

In questo articolo, verrà illustrato come crearsi da soli, senza bisogno quindi di appoggiarsi ad altri, un semplicissimo e praticissimo circuito di rotazione per i propri banners.
E lo faremo in modo che funzioni anche se richiamato da normalissime pagine HTML.

Per cominciare...

... si consiglia di approfondire le proprie conoscenze per quanto concerne l'accesso ai database tramite ASP (si veda l'apposito tutorial ). Essendo un progetto abbastanza complesso, si presuppone una conoscenza abbastanza approfondita delle tecniche di programmazione ASP.

Si inizia!

Lo scopo del nostro progetto è quello di creare un sistema di rotazione banner semplice ed immediato da implementare.
Per questo useremo un semplice database Access, e cercheremo di essere il meno possibili dipendenti dall'amministratore del server, in modo da essere produttivi in poco tempo.
Primo passo, prima di ogni altro, è quello di creare il database in cui andremo a memorizzare tutti i nostri dati.
Creiamo in Access una nuova tabella, e diamole come nome "banners". All'interno di questa tabella, andiamo a definire i vari campi.
Un riassunto si trova nella tabella sottostante.

Nome Tipo Ordine
IDPrimary Key0
URLText(150)1
ImmagineText (200)2
ImpressionsLong3

L'ordine in cui vanno inseriti è esattamente quello mostrato nella tabella. Un ordine diverso potrebbe portare a malfunzionamenti del codice.

Potere alla fantasia

Creato il database, non ci resta che occuparci del codice ASP.

In questo articolo tratteremo la creazione di un semplice sistema, ma è utile sapere che a partire da questo se ne possono creare delle varianti molto interessanti, che ad esempio mostrano certi banner solo in certe aree/pagine, o che li mostrano solo a certi orari, etc...
Il mio intento, invece, è solo quello di tracciare la strada, lasciandovi il compito di eventuali personalizzazioni.

Il primo passo

Siccome vogliamo gestire tutto da una pagina, sarà bene dividere usando un semplice parametro (quale un valore di un campo GET), da inserire quando andiamo a richiamare il banner dalle nostre pagine, o quando lo linkiamo.
Detto questo, creiamo un nuovo file e chiamiamolo banner.asp . Scriviamoci dentro queste prime righe:

 Response.Expires=0
Response.Buffer=True

informazioni="/banner/"
predefinita="/banner/images/predefinito.gif"

Ci servono per fare funzionare tutto per il meglio.
L'analisi delle prime due si tralascia, visto che dovrebbe essere nota a chi si accinge ad implementare questo progetto.
Invece l'uso delle variabili "informazioni" e "predefinita" risulta alquanto interessante. Infatti al loro interno andrà specificato, rispettivamente, una pagina web a cui rimandare in caso di errori, ed un'immagine da mostrare sempre in caso di errori, come nel caso non sia possibile visualizzare altri banner, in quanto le relative impressions sono state esaurite.

La gestione del reindirizzamento

A quanto appena inserito, dobbiamo aggiungere, sempre nella stessa pagina, questo codice:

 if Request.QueryString("action")="go" then
  ' routine di gestione reindirizzamento

  if len(Session("sponsor_banner"))>0 then
   sponsor=Split(Session("sponsor_banner"),"|")
  else
   dim sponsor(1)
   sponsor(0)=informazioni
   sponsor(1)=0
  end if

  Session("sponsor_banner")=""

  if Len(sponsor(0))>0 then
   Response.Redirect(sponsor(0))
  else
   Response.Redirect(informazioni)
  end if

Questo codice, oltre al reindirizzamento vero e proprio, si occupa anche della gestione di tutti gli eventuali errori che possano capitare in questa fase, come la mancanta creazione dell'oggetto Session, tramite cui i dati vengono passati dal modulo di visualizzazione dell'immagine a quello di reindirizzamento verso l'url associato a questa immagine.

E per finire...

...ecco il codice che si occuperà della gestione delle immagini:

 elseif Request.QueryString("action")="display" then

  Session("sponsor_banner")=Null

  dbfile=Server.MapPath("/banner/banner.mdb")

  Set OBJdbConnection=Server.CreateObject("ADODB.Connection")
  OBJdbConnection.Open "driver={Microsoft Access Driver (*.mdb)};dbq="&dbfile
  Set rs=Server.CreateObject("ADODB.Recordset")
  rs.ActiveConnection=OBJdbConnection
  rs.CursorType=1
  rs.LockType=2
  rs.Source="banners"
  rs.Open

  Dim url
  Dim img
  Dim ids

  rec_count=Rs.RecordCount

  ReDim url(rec_count)
  ReDim img(rec_count)
  ReDim ids(rec_count)
  max=0
  Do until rs.EOF
   if rs.Fields(3).Value>0 then
     max=max+1
     ids(max)=rs.Fields(0).Value
     url(max)=rs.Fields(1).Value
     img(max)=rs.Fields(2).Value
   end if
   rs.MoveNext
  loop

  Randomize
  scelto=Int(Rnd*max)+1

  rs.MoveFirst

  Do until rs.EOF
   if ids(scelto)=rs.Fields(0).Value then
     hits=rs.Fields(3).Value-1
     rs.Update 3, hits
     exit do
   end if
   rs.MoveNext
  loop

  if max=0 then
   sponsor=informazioni
   image=predefinita
  else
   sponsor=url(scelto)
   image=img(scelto)
  end if

  Session("sponsor_banner")=sponsor&"|"&ids(scelto)

  ReDim url(0)
  ReDim img(0)
  ReDim ids(0)
  Erase url
  Erase img
  Erase ids
  scelto=Null
  max=Null
  sponsor=Null

  rs.Close
  OBJdbConnection.Close
  set rs=Nothing
  Set OBJdbConnection=Nothing

  Response.ContentType="image/gif"
  Response.Redirect(image) ' visualizza il banner

else
  ' routine di intercettazione furboni... ;-)
  Response.Redirect(informazioni)
end if

Il codice è di facile comprensione, per cui mi limiterò a spiegare il suo funzionamento in generale.
Come prima cosa è necessario specificare nella variabile dbfile il nome del database Access, completo di percorso.
Questo codice si occupa di trovare il numero totale di records nella tabella corrente, e creare dei vettori dinamici, in modo da immagazzinarci dentro le informazioni che verrano usate in seguito per completare l'opera.
Quindi passa ad immagazzinare nei vari vettori solo quei record il cui campo 3 (cioè quello corrispondente alle impressions) contenga un valore maggiore di 0.
Sceglie un numero a caso, e va a pescare i dati relativi a quel numero nei vari vettori.
Il resto è presto detto: reindirizza l'utente alla gif, e crea la variabile di sessione tramite l'oggetto Session, in modo che il modulo di reindirizzamento sia in grado di ricostruire l'indirizzo a cui rimandare al momento del click.

Nota: l'approccio usato (quello con i vettori) può essere tranquillamente sostituito con un altro, tuttavia credo che sia il modo migliore e più pratico. Inoltre l'uso di vettori dinamici permette di liberare memoria alla fine dell'esecuzione della pagina, rendendo più performante la nostra applicazione.

Ed ora: proviamolo!

Per provare se tutto è andato a buon fine, possiamo usare questo codice HTML, che funzionerà da qualsiasi pagina web:

 <a href="/banner/banner.asp?action=go">
<img src="/banner/banner.asp?action=display">
</a> 

Se tutto sarà andato a buon fine, ed avrete aggiunto delle campagne nel vostro database, allora potrete vedere il vostro ultimo lavoro all'opera!

Naturalmente questo è un sistema rudimentale, simile in tutto e per tutto a quanto fa il component ADRotator fornito con il web server. Tuttavia con un minimo di sforzo in più è possibile personalizzarlo ulteriormente, magari aggiungendo un comodo sistema di logging, oppure un filtro per data, o meglio ancora, per pagina web.

Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Nessuna risorsa collegata