>> Torna all'Homepage <<
Contattaci Entra nei forum Cerca nel sito
News della settimana ASP: esempi di pagine dinamiche Trucchi e suggerimenti per il PC Manuali e guide I dossier e gli approfondimenti di AmicoPc Il sito della settimana I racconti di Armando Staffa Chi siamo
     
 

 


Guarda il sistema
in funzione

Scarica i file
Scarica i file
citati in questa pagina

 


SISTEMA DI ROTAZIONE BANNER

SELECT.ASP

Per visualizzare il banner all'interno di una pagina, abbiamo visto che è sufficiente inserire un javascript che mi richiami il file select.asp.
Infatti questo è file incaricato di prelevare dal database un banner e di visualizzarlo.
Prima di visualizzare il banner però dobbiamo compiere alcune operazioni: innanzitutto vedere se il banner cercato è un banner fisso o a rotazione. Nel caso incui il banner sia fisso non abbiamo grossi problemi: preleviamole informazioni su questo banner nel database e le mostriamo a schermo.

Nel caso invece di banner a rotazione dobbiamo innanzitutti selezionare solo i banner che sono ancora attivi, ovvero i banner in cui non sia ancora raggiunto il numero massimo di impression, di click o la data di scadenza. Oltre a questi sono visualizzabili i banner per cui non è stato fissato alcun limite.
Nel caso in cui non ci sia alcun banner valido (o perché tutti hanno raggiunto i limite fissati o la data di scadenza) faremo in modo di visualizzare un banner di default.

Una volta trovati i banner occorre selezionarne uno a caso, tenendo però presente il fattore importanza: un banner con importanza doppia rispetto a dun altro dovrà avere il doppio delle probabilità di essere visualizzato.

A questo punto possiamo visualizzare il banner e le informazioni ad esso associate.

Vale la pena far notare che la seconda riga del codice riportato serve ad evitare che le informazioni visualizzate siano memorizzate nella cache: infatti abbiamo posto come scadenza il valore zero.
In questo modo, ogni volta che viene richiamata la pagina, avremo un banner diverso.
In caso contrario la pagina select.asp verrebbe memorizzata nella cache del browser con il risultato di visualizzare sempre lo stesso banner.

<%
Response.Expires=0

Ora creiamo la connessione al database banner.mdb memorizzato nella cartella mdb-database e successivamente dobbiamo verificare se il banner da visualizzare è fisso o a rotazione.
Se il banner è fisso la stringa javascript che richiama questo file contiene il parametro like=fisso, in caso contrario il parametro like ha rotazione come valore.
Pertanto facciamo un request.querystring per verificare il valore di tale parametro. Se tale parametro coincide con rotazione il banner è a rotazione.

Dim Conn
Set Conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("mdb-database/banner.mdb")

come=request.querystring("like")
if come="rotazione" then

Come si può vedere abbiamo utilizzato il metodo mappath in quanto non richiede alcun intervento da parte del provider (al contrario dei DSN di sistema).
Secondo alcuni inoltre tale metodo sarebbe più performante della stessa connessione con DSN (al contrario di quanto afferma la stessa Microsoft).

Creata la connessione definiamo il recordset che conterrà le informazioni prelevate dal database.

Dim rs
set rs=Server.CreateObject("adodb.recordset")

Fatto questo prepariamo la stringa di ricerca che dovrà selezionare tutti campi (select *) dalla tabella banner (from banner) dove (where) il numero di impression registrate (totHits) sia minore del limite fissato (maxHits) e dove il numero di click ricevuti dal banner stesso (totClick) sia minore del numero massimo di click impostato (maxHits). Inoltre, dato che i banner senza un limite di impression o di clic hanno questi campi contrassegnati dal numero zero, chiediamo di selezionare anche i banner i cui campi maxHits e maxliClick contengano il numero zero (or maxHits=0... or maxClick=0).
Inoltre dobbiamo evitare di caricare il banner associato all'utente default: infatti questo banner viene visualizzato solo quando non ci sono altri banner disponibili.
Ultima condizione è che non si sia ancora raggiunta la data di scadenza. Per verificare questo utilizziamo la funzione

dateDiff(criterio, data1, data2)

dove per criterio utilizzo i giorni (quindi 'd'), data1 è la data odierna che si ottiene grazie a date() e data2 è invece il secondo termine di confronto ovvero il valore prelevato dal campo enddata del database; campo in cui inseriamo la data di scadenza del banner stesso, raggiunta la quale il banner non dovrà essere più visualizzato. Quando data2 è posteriore a data1 (quindil la data di scadenza è nel futuro) si ha un risultato positivo. In tutti gli altri casi (anche nel caso di uguaglianza) si ha un risultato negativo. Quindi se endData (la data di scadenza) è non è ancora passata, avrò un numero positivo (> 0) e il banner può essere visualizzato.

SQL="SELECT * FROM banner where utente <> 'default' and ((tothits < maxhits or maxhits=0) and (totClick < maxClick or maxclick=0)) and Datediff('d',"& Date() &", endData)>0"

Come già abbiamo anticipato, noi vogliamo fare in modo che sia possibile fissare dei limiti al numero di impression, di click e una data di scadenza.
Tali limiti sono però facoltativi, non certo obbligatori. Quindi posso decidere di non impostare nessun limite.
Per la data non abbiamo problemi: fissiamo una data estremamente lontana (per esempio 01/01/3000) e questo è sufficiente a garantirci la corretta funzionalità del sistema.
Per quanto riguarda il numero di click e di impression, fissare un limite, seppur molto alto, può non essere una soluzione ottimale, in quanto esiste la possibilità (seppur remota) di raggiungerlo.
Quindi quando non vogliamo fissare un limite alle impression o ai click, il campo maxHits e maxClick del database, conterranno il numero zero.
In questo modo la disuguaglianza totHits < maxHits (o totClick < maxClick) non è verificata. Aquesto limite sopperisce l'istruzione seguente: or maxHits=0
In questo modo vengono selezionati i banner che hanno il numero di impression inferiore al limite oppure i banner con il limite impostato a zero.

Ora eseguiamo la query nel nostro database, impostando il tipo di cursore e il blocco del database (cursore statico e blocco ottimistico)

rs.open SQL, Conn, 3,3

Controlliamo quindi che l'interrogazione del database abbia dato almento un risultato: se così non fosse significa che non ci sarebbero banner visualizzabili e di conseguenza deve essere visualizzato il banner di default.
Per conoscere il numero di risultati dell'interrogazione utilizziamo rs.recordcount: se questo numero è uguale a zero dovrò eseguire il codice relativo alla visualizzazione del banner di default.

if rs.recordcount="0" then

Quindi preparo il recordset

set rs=Server.CreateObject("adodb.recordset")

e seleziono i campi relativi all'utente default.

SQL="SELECT * FROM banner where utente='default'"
rs.open SQL, Conn, 3,3
%>

Fatto questo possiamo mostrare il banner.
Dato che ilfile select.asp viene richiamato da una riga di codice javascript, il banner e le relative informazioni dovranno essere visualizzate in un modo compatibile con questo linguaggio ovvero dovrà essere visualizzato qualcosa del tipo document.write("risultato dell'elaborazione")
Per far ciò utilizziamo il consueto response.write, prelevando i valore che ci necessitano dal recordset stesso (esempio rs("url")).

document.write("<a href='<% response.write(rs("url"))%>' target='<% response.write(rs("target"))%>'><img border='0' src='<% response.write(rs("immagine")) %>' alt='<% response.write (replace(rs("alt"),"'","&#39;")) %>'></a>")

Sicuramente avete notato che per quanto riguarda l'etichetta di testo del banner abbiamo scritto
response.write (replace(rs("alt"),"'","&#39;"))
ovvero chiediamo di sostituire tutti gli apici (ovvero gli apostrofi) contenuti nel testo da associare al banner, con &#39;
Infatti tutti i caratteri possono essere scritti come nella modalità &#nn; dove nn é il valore ASCII a 7 bit del carattere stesso.
Nel nostro caso l'apostrofo ha valore 39, quindi scriveremo &#39;
Per l'utente non cambia nulla: infatti sia che si scriva direttamente l'apostrofo sia che si scriva il suo valore in ascii, il risultato è lo stesso.

Perché tutto questo?
Il motivo è semplice: se nell'etichetta di testo abbiamo uno o più apici, l'etichetta stessa verrebbe troncata al primo di questi.
Infatti il codice html generato ha una forma del tipo

<img border='0' src='.....'><alt='......'>

Come si vede anziché le virgolette doppie utilizzate normalmente nell'html qui si usano le virgolette singole (ovvero apici o apostrofi), in quanto le virgolette doppie sono utilizzate all'inizio da parte del javascript stesso (document.write(".....")).
Pertanto se noi avessimo un'etichetta di testo del tipo L'avventura comincia il codice html generato sarebbe

<img border='0' src='.....'><alt='L'avventura comincia'>

Dato che il browser visualizza solo il testo compreso fra due apici, nel nostro caso verrebbe visualizzata solo la lettere L e nient'altro, in quanto le parole avventura comincia sono al di fuori del secondo apice.
Per risolvere questo problema usiamo il trucco di sostituire l'apice con &#39;
In questo modo il browser non trova più l'apice che interrompe l'etichetta di testo e quindi viene visualizzata la frase intera.

Dato che per il banner di default non teniamo traccia né delle impression né dei click (teoricamente questo banner non dovrebbe mai essere visualizzato, in quanto si presume che nel circuito ci sia almeno un banner valido!), una volta mostrato a video, svuotiamo il recordset e chiudiamo la connessione, in modo da liberare memoria sul server. Inoltre aggiungiamo il comando 'response.end' che impedisce l'esecuzione del codice che segue (senza dimenticare l'end if che chiude l'if... then... iniziato prima)

<%
rs.close
set rs=nothing
conn.close
set conn=nothing
response.end
end if

 

<< indietro

Utenti connessi: 51

Invia questa pagina ad un amico

 

 

 

Chi siamo | Pubblicità | Note sulla privacy | Dicono di noi
Grafica cura di Paolo Omero
- Stefania Migliorucci