Redazione
a- a+

Creare un blog in ASP

Vediamo come fare a creare un blog in ASP. Guida con codici ed esempi.

Introduzione
Il Blog è uno strumento molto recente che permette di realizzare in pochi minuti un sito web personale dove poter esprimere la propria opinione su un qualsiasi argomento, in qualsiasi momento. In pochi minuti perchè ne esistono molti in circolazione quasi tutti gratuiti e opensource.

Nel 2003 si è verificato un vero boom, per questo dedichiamo questa lezione all'analisi delle principali funzioni che possiede un blog. Con l'utilizzo del Blog vedremo come utilizzare tutto ciò che abbiamo studiato fino ad ora.

Analisi
Il Blog che prendiamo in considerazione è molto semplice, ne esistono molti, completi e open source (codice libero) per la Rete...
Il cuore del Blog si trova tutto in un unico file che contiene 2 Sub che visualizzano i messaggi e l'archivio.

Il Database
Il database è molto semplice e contiene una unica tabella: messaggi con i seguenti campi:

  • id_m
  • titolo
  • testo
  • autore_nome
  • autore_email
  • data
  • ora

HomePage
La HomePage contiene essenzialmente:

  • quasi esclusivamente codice HTML
  • 2 inclusioni di file .asp
  • 2 istruzioni Asp per richiamare 2 Sub

I 2 file di inclusione sono:

  • config.asp
  • funzioni.asp

La loro funzione la vedremo subito, ma prima analiziamo le due istruzioni Asp:

<% Call Archivio() %>
<% Call Messaggi() %>

Entrambe richiamano delle Sub che si trovano nel file funzioni.asp

Il file Config.asp
Questo file contiene l'indirizzo del database e le 2 funzioni per trasformare le date che abbiamo studiato precedentemente. Inoltre crea la data e l'ora attuale in formato numerico aaaammgg.

Codice19.1

<%
dbase = "provider=microsoft.jet.oledb.4.0;"
dbase = dbase & "data source=c:scriptasplog2dblog.mdb"

'Connessione al database
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open dbase

'Impostazioni italiane
SESSION.LCID = 1040

'Autore e propretario del blog
autore_blog = "Lorenzo Pascucci"

'Trasforma un numero aaaammgg in una data gg/mm/aaaa
Function NumInData(dataris)

NumInData = Right(dataris,2) & "/" & Mid(dataris,5,2) &_
 "/" & Left(dataris,4)

End Function

'Trasforma un numero hhmmss in hh:mm:ss
Function NumInOra(Ora)

If Len(ora) = 6 then

NumInOra = Left(Ora,2) & ":" & Mid(Ora,3,2) & ":" & Right(Ora,2)

Else

NumInOra = Left(Ora,1) & ":" & Mid(Ora,2,2) & ":" & Right(Ora,2)

End If

End Function

' Creo la data di oggi
dataoggi = Year(date()) 
mese = Month(date()) 
If mese < 10 then 
mese = 0 & mese
End If
giorno = Day(date())
If giorno < 10 then
giorno = 0 & giorno
End If
dataoggi = dataoggi & mese & giorno

'Creo l'ora attuale
oraoggi = Hour(Time()) + 6
If oraoggi < 10 then
oraoggi = 0 & oraoggi
End If
minutioggi = Minute(time())
If minutioggi < 10 then
minutioggi = 0 & minutioggi
End If
secondioggi = Second(time())
If secondioggi < 10 then
secondioggi = 0 & secondioggi
End If

oraoggi = oraoggi & minutioggi & secondioggi
%>

Conosciamo bene il funzionamento delle istruzioni presenti in questa pagina, da notare:

SESSION.LCID = 1040

Questa istruzione permette di impostare i valori di data, ora, valuta in base agli standard in Italia, quindi: gg/mm/aaaa, hh:mm:ss e €. In questo caso ci serve soprattutto nella Sub Funzioni.asp quando andiamo ad utilizzare la funzione MonthName(), che ci restituirà il nome del mese in italiano. 1040 è il codice che identifica l'Italia.

autore_blog = "Lorenzo Pascucci"

autore_blog è una variabile in cui memorizzo il proprietario del blog.

La pagina Funzioni.asp
E' questa la pagina cuore del Blog. Al suo interno ci sono due Sub che permettono di visualizzare i messaggi del blog.

Codice19.2

<%
' SUB Visualizzazione messaggi
Sub Messaggi()

vis = Request("vis")
If Trim(vis) <> "" then
data_ini = vis
data_fin = vis + 32
'Query che visualizza i messaggi di un mese (richiesta da link archivio)
SQL = "SELECT * FROM messaggi WHERE data > " & data_ini 
SQL = SQL & " AND data < " & data_fin & " ORDER BY data, ora DESC;"
Else
' Query che preleva gli ultimi 10 messaggi postati
SQL = "SELECT TOP 10 * FROM messaggi ORDER BY data, ora DESC;"
End If

Set Rs = Conn.Execute(SQL)

' Se sono presenti dei messaggi... 
If Not rs.EOF Then

' Vai al primo messaggio da visualizzare (ultimo inserito)
rs.MoveFirst

' Visualizza finchè i messaggi sono finiti o fino al 
' raggiungimento di 10 messaggi visualizzati
While Not rs.EOF

'Visualizza autore
autore_nome = rs("autore_nome")
autore_email = rs("autore_email")
If Trim(autore_email) <> "" then
autore = "<a href=""mailto:" & autore_email & """>" & autore_nome & "</a>"
Else
autore = autore_nome
End If
%>
<p>
<font face="Verdana" size="2"><b><%=rs("titolo")%></b><br>
Testo</font><p><font face="Verdana" size="1">di <b><%=autore%></b> @ <b>
<%=NumInData(rs("data"))%> <%=NumInOra(rs("ora"))%></b></font>
</p>
<br />
<br />
<%
' Vai al record successivo
rs.MoveNext
Wend
'Se non ci sono messaggi
else
response.Write("<p>Non sono stati pubblicati messaggi.</p>")
End if

rs.Close
set rs = Nothing

End Sub

' SUB Visualizza archivio messaggi disponibili
Sub Archivio()

mese_old = 0
' Query che preleva i mesi in cui ci sono messaggi
SQL2 = "SELECT * FROM messaggi ORDER BY data DESC"

Set Rs2 = Conn.Execute(SQL2)

' Se sono presenti dei messaggi... 
If Not rs2.EOF Then

' Vai al primo messaggio (ultimo inserito)
rs2.MoveFirst

' Ciclo finchè i messaggi sono finiti
While Not rs2.EOF
data = rs2("data")
' Prelevo il mese in cui il messaggio è stato pubblicato
mese = Mid(data,5,2)
' Prelevo l'anno il cui il messaggio è stato pubblicato
anno = Left(data,4)
' Controllo se il mese è già stato visualizzato, se non lo è stato
' lo visualizza
If mese <> mese_old then
Response.Write("<br /><a href=""default.asp?vis=" & anno & mese & "00"">" &_
 MonthName(mese,false) & "</a> - " & anno)
End If

' Memorizzo il mese del messaggio appena letto per fare confronto,
' al prossimo ciclo
mese_old = mese

rs2.MoveNext
Wend
'Se non ci sono messaggi
else
response.Write("<p>Non sono stati pubblicati messaggi.</p>")
End if 

End Sub 
%>

La prima Sub Messaggi() non presenta particolarità, tranne il seguente codice:

vis = Request("vis")
If Trim(vis) <> "" then
data_ini = vis
data_fin = vis + 32
'Query che visualizza i messaggi di un mese (richiesta da link archivio)
SQL = "SELECT * FROM messaggi WHERE data > " & data_ini
SQL = SQL & " AND data < " & data_fin & " ORDER BY data, ora DESC;"
Else
' Query che preleva gli ultimi 10 messaggi postati
SQL = "SELECT TOP 10 * FROM messaggi ORDER BY data, ora DESC;"
End If

che permette di effettuare 2 azioni in base al tipo di visualizzazione che si vuol effettuare.

Infatti la pagina default.asp che richiama la Sub Messaggi() permette di visualizzare sia gli ultimi 10 messaggi postati, sia tutti i messaggi di un mese. La prima visualizzazione avviene se si carica la homepage, mentre la seconda avviene quando si sceglie un mese dall'archivio. Infatti l'unica differenza è nella query SQL.

Con la variabile vis e la condizione IF si individua se la richiesta avviene dall'archivio o meno. Nel primo caso utilizziamo la query:

SQL = "SELECT * FROM messaggi WHERE data > " & data_ini
SQL = SQL & " AND data < " & data_fin & " ORDER BY data, ora DESC;"

Questa query preleva tutti i messaggi compresi tra due date, in particolare dal 1° al 31° del mese scelto. Infatti data_ini ha come valore:

aaaamm00

mentre data_fin = data_ini + 32, quindi:

aaaamm32

In questo modo verranno presi tutti i messaggi di un mese, senza problemi di mesi con 28 o 30 giorni.

Nella Sub Archivio() c'è una serie d'istruzioni molto interessante all'interno del ciclo WHILE:

While Not rs2.EOF
data = rs2("data")
' Prelevo il mese in cui il messaggio è stato pubblicato
mese = Mid(data,5,2)
' Prelevo l'anno il cui il messaggio è stato pubblicato
anno = Left(data,4)
' Controllo se il mese è già stato visualizzato, se non lo è stato
' lo visualizza
If mese <> mese_old then
Response.Write("<br /><a href=""default.asp?vis=" & anno & mese & "00"">" &_
 MonthName(mese,false) & "</a> - " & anno)
End If

' Memorizzo il mese del messaggio appena letto per fare confronto,
' al prossimo ciclo
mese_old = mese

rs2.MoveNext

Questa Sub ha il compito di visualizzare tutti i mesi in cui sono presenti dei messaggi. Solo che nel database non memorizziamo il mese in un campo a parte, ma memorizziamo tutta la data. Quindi non è possibile fare un GROUP BY nella query SQL, ma dobbiamo raggruppare per mese con Asp.

Quindi è necessario recuparare la data di pubblicazione del messaggio dal database e prelevare il mese e l'anno:

data = rs2("data")
mese = Mid(data,5,2)
anno = Left(data,4)

Confronto la variabile mese con la variabile mese_old e in caso sia diverse visualizzo in output (con codice HTML) il nome del mese con MonthName():

If mese <> mese_old then
Response.Write("<br /><a href=""default.asp?vis=" & anno & mese & "00"">" &_
 MonthName(mese,false) & "</a> - " & anno)
End If

memorizzo in mese_old il mese del messaggio presente nel record appena analizzato e si ripete il ciclo.
Quindi ogni volta che ci sono 2 messaggi consecutivi con diverso mese, viene visualizzato il mese del nuovo messaggio che si sta analizzando con rispettivo anno.

Nuovi messaggi
Infine ci sono 2 pagine:

  • messaggio.asp
  • messaggio1.asp

La prima contiene il modulo per inserire un nuovo messaggio, la seconda contiene il codice che recupera i valori dei campi del modulo e la query SQL per l'inserimento.

autore_nome = Trim(Request.Form("autore"))
autore_email = Trim(Request.Form("email"))
titolo = Trim(Request.Form("titolo"))
testo = Request.Form("testo")
SQL = "INSERT INTO messaggi (autore_nome,autore_email,titolo,testo,data,ora) VALUES('" & autore_nome
SQL = SQL & "','" & autore_email & "','" & titolo & "','" & testo & "'," & dataoggi & "," & oraoggi & ")"

Set rs = Conn.Execute(SQL)

Infine viene eseguito il redirect alla home del Blog che visualizzerà il nuovo messaggio inserito:

Response.Redirect "default.asp"

Riflessioni
In questo script quasi tutte le istruzioni Asp vengono utilizzare come Sub Routine. Questo per permettere una migliore "leggibilità" del codice oltre al fatto che con progetti grandi e generalizzando le Sub è possibile risparmiare anche molte migliaia di righe di codice.

Potenzialità di un blog
Questo è un semplice esempio di un Blog, in realtà un Blog può possedere molte funzioni:

  • commenti per ciascun messaggio
  • voto dei messaggi
  • possibilità di scrivere messaggi solo per l'autore eo altre persone con permessi
  • feed RSS (standard per far diffondere i propri messaggi in altri blog o siti)
  • dividire i messaggi per categoria
  • creare photo-blog

e molte altre caratteristiche.



Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Luca
Ti è piaciuto l'articolo?