Un semplice forum con ASP e XML

di Andrea Zani, in XML,
  • 0
  • 0
  • 0
  • 4,67 KB

Fu proprio nel periodo in cui muovevo i primi passi con l'XML che misi in progetto per mia esigenza personale la costruzione di un forum di discussione. Il più grosso problema cui mi trovai di fronte era il modo di memorizzare i vari messaggi. Così come pressoché tutti i forum ASP disponibili in rete gratuitamente, avevo pensato alla realizzazione di una tabella in cui ogni record (messaggio) aveva un ID di riferimento. I messaggi nuovi avrebbero avuto in questo campo il valore zero essendo un nuovo messaggio senza riferimento ad altri messaggi; le risposte a questi messaggi avrebbero avuto come ID di riferimento, l'ID del quesito. E così via, ogni risposta avrebbe avuto come ID di riferimento l'ID del messaggio precedente.

Immagine

Il campo ID indica il contatore unico per ogni messaggio, id_ref è l'ID di riferimento. In questo esempio, il primo messaggio è quello di Marco che porge una domanda specifica, e il suo ID di riferimento è zero perché il suo messaggio non fa riferimento a nessun precedente. Le risposte di Luigi e Antonio hanno come ID di riferimento proprio la domanda di Marco, mentre la risposta di Andrea ha come riferimento quella di Luigi.

Scrivere quindi del codice ASP che ricostruisca questo thread non è difficile. Si leggono tutti i messaggi cercando come ID di riferimento quello con il valore zero. Quindi si ripassa in rassegna tutti i record alla ricerca di una risposta a questo messaggio cercando nell'ID di riferimento di tutti gli altri messaggi, l'ID del primo messaggio. Quando abbiamo trovato il primo, si riparte alla ricerca dell'ID di riferimento per completare tutto l'albero gerarchico di quella domanda: è più facile scrivere questo codice che descriverlo.

Il dovere di un buon programmatore ASP è anche quello di pensare alle prestazioni dei suoi script e all'uso di risorse del server per ottimizzare al meglio il codice.

Personalmente ritengo che l'uso di questo tipo di memorizzazione per i forum porti ad uno spreco di risorse e di tempo per qualsiasi server. Se si ha bene chiaro in mente la tecnica prima descritta di memorizzazione dei messaggi e l'algoritmo per la sua visualizzazione, sarà evidente il superlavoro del server ad ogni richiesta di visualizzazione della struttura quando i messaggi diventano numerosi; si provi ad immaginare di avere qualche migliaio di messaggi come in un qualsiasi newsgroup?

Fu proprio cercando una soluzione a questo problema nell'uso dei database che capii che XML poteva essere una valida alternativa.

I messaggi nel documento XML

La costruzione di un forum in ASP e XML fu più semplice di quanto previsto. La memorizzazione di ogni singolo messaggio era molto semplice: bastava un nodo con il suo TAG di apertura e chiusura. Se un utente inserisce una risposta, il suo messaggio diventa un nodo che sarebbe andato all'interno del primo, e così via per ogni domanda.

Ecco una possibile memorizzazione del nostro file XML con un thread di un forum:

Immagine

Ecco la forza di XML: la memorizzazione di ogni messaggio viene fatta rispettando la struttura stessa del forum. La domanda di Marco che ha ID uguale ad 1, ha al suo interno le due risposte di Luigi e Antonio, mentre la risposta di Andrea all'affermazione di Luigi è all'interno dei TAG di apertura e chiusura del messaggio al quale fa riferimento.

Quindi, la nostra pagina ASP che visualizzerà la struttura di questo forum, dovrà soltanto leggere sequenzialmente il documento XML e rappresentalo sul browser dell'utente nel modo preferito.

L'esempio

Il forum è stato testato con Windows 2000 Professional, ma dovrebbe funzionare anche con Windows 98 e ME con il PWS e con una versione dell'MDAC aggiornato. Per trovare l'ultima versione consiglio una visita al sito Microsoft .

E' necessario anche aggiornare il parser MSXML ad una delle ultime versioni.

Il nostro esempio per la realizzazione di un forum si basa su questi files:

  • Messaggi.xml: il documento XML dove saranno memorizzati i messaggi.
  • Default.asp: la pagina principale che apre due frames nel browser.
  • Dettagli.asp: la pagina che appare nel frame inferiore dove sarà presente il contenuto del messaggio.
  • Elenco.asp: questo è lo script che costruisce la struttura ad albero dei messaggi.
  • Inserisci.asp: inserisce il nuovo messaggio nel documento XML.
  • Richiedi.asp: pagina contenente il Form di richiesta del nuovo messaggio.
  • Principale.css: style-sheet di questo forum.
  • Busta.gif: immagine che sarà inserita al fianco di ogni messaggio.

E avrà un aspetto simile a questo mostrato in figura:

Immagine

La struttura ricorda quella nota di Outlook: nella parte superiore la lista con la struttura ad albero di tutti i messaggi, nella parte inferiore il corpo del messaggio selezionato. Sono presenti due pulsanti nel frame inferiore, ?Inserisci un nuovo messaggio? e ?Rispondi a questo messaggio?. Entrambi aprono una nuova finestra (richiedi.asp) contenente un form dove inserire il proprio messaggio; se si è premuto il primo pulsante, questo apparirà come primo messaggio nel frame superiore, se si è premuto il secondo, esso sarà inserto come risposta del messaggio visibile nel frame inferiore.

2 pagine in totale: 1 2

Attenzione: Questo articolo contiene un allegato.

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