• Non ci sono risultati.

5. Una proposta metodologica: fasi preliminari

5.8 La presentazione delle lettere

Per la presentazione all'utente delle lettere del corpus è stata realizzata un'unica pagina PHP. Uno dei vantaggi di tale linguaggio di programmazione consiste proprio in questa caratteristica: è possibile realizzare un'unica pagina per poter mostrare un numero potenzialmente infinito di lettere.

La visualizzazione dei dati della lettera è possibile grazie a una query SQL presente nel codice PHP della pagina (chiamata “lettera.php”):

$query = "SELECT * FROM lettere WHERE id = '$_GET[id]'"; $result = mysql_query($query);

TAB. 5.13: query per ottenere i dati della lettera richiesta

La query seleziona tutti i dati (attraverso l'utilizzo dell'operatore asterisco) della tabella “lettere” che soddisfano una precisa condizione, ovvero che nella “query string” dell'indirizzo web sia presente l'id della lettera.

Infatti, per poter permettere agli utenti di accedere alle lettere, sarà necessario creare una pagina (denominata “lettere.php”) contenente i collegamenti alle lettere, scritti nella seguente forma:

www.sitodelcorpus.xx/lettera.php?id=1

La query string è una stringa che fa parte di un URL (Uniform Resource Locator: un indirizzo web) e che serve per passare al server dei dati, e si separa dall'URL attraverso il punto interrogativo: quindi in questo caso, la query string dell'indirizzo sopraccitato è ?id=1.

La pagina PHP, trovando nell'indirizzo la query string, comprende che la condizione WHERE id = '$_GET[id]' è soddisfatta, perché nell'URL indicato è di fatto presente l'id della lettera richiesta. Quindi, selezionerà dal database tutti i dati della lettera che ha come id “1”.

Quindi, attraverso la funzione “mysql_fetch_array”, i risultati della query vengono restituiti sotto forma di array, in modo tale da poterli trattare per l'operazione successive, ovvero la presentazione (“stampa”) su schermo. La seguente porzione di codice specifica meglio quanto appena illustrato:

5. Una proposta metodologica: fasi preliminari

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { echo "<b>Data</b>: $row[luogo]";

formatodata();

echo "<br /><br />";

echo "<b>Destinatario</b>: $row[destinatario]<br /><br />"; if ($row['raccolta'] != "Assente") {

echo "<b>Raccolta</b>: $row[raccolta]<br /><br />"; }

[...] }

TAB. 5.14: codice per la presentazione della lettera richiesta

Attraverso la funzione “mysql_fetch_array” vengono create alcune variabili, dette “$row”, che rappresentano le “righe” della tabella “lettere” (quindi autore, destinatario, data, ecc.). Attraverso il comando “echo”, che serve per “stampare” (cioè scrivere) sullo schermo i dati, è possibile presentare all'utente tutte le informazioni relative alle lettere. Per esempio, la riga di codice

echo "<b>Destinatario</b>: $row[destinatario]<br /><br />";

scrive sullo schermo l'indicazione “Destinatario” in grassetto (l'etichetta <b> serve proprio per questo scopo) e di fianco la data della lettera richiesta ($row[data]).

Per stampare sullo schermo la data viene invocata invece una particolare funzione, chiamata “formatodata”. Questa funzione è definita nel file “functions.php”, che contiene funzioni utili per il sito e che viene incluso all'interno di ciascuna pagina del sito stesso attraverso il comando include("includes/funzioni.php"); (significa che il sito deve

includere il file “funzioni.php” presente nella cartella “includes”).

La funzione “formatodata” stampa la data in un formato elegante (per esempio, “5 dicembre 1807” invece di “1807-12-05”) ed è definita dal seguente codice:

function formatodata() { global $row;

5. Una proposta metodologica: fasi preliminari

if ($row['data'] != "0000-00-00") { $data = $row['data'];

$mesi = array('gennaio', 'febbraio', 'marzo', 'aprile', 'maggio', 'giugno', 'luglio', 'agosto',

'settembre', 'ottobre', 'novembre', 'dicembre'); list($anno, $mese, $giorno) = split('-', $data); $mese = $mesi[$mese-1];

$data = $giorno. ' '. $mese . ' ' . $anno; echo ", $data"; } else { echo ""; } }

TAB. 5.15: la funzione “formatodata”

Il primo passo da compiere è dichiarare una variabile globale (ovvero che vale per tutta la pagina e non solo per la porzione di codice all'interno della quale viene dichiarata), di nome “$row”: non è altro che l'array con i record della base di dati e viene dichiarata come variabile globale in modo da poter riconoscere i record correttamente.

A questo punto avviene un controllo (tramite blocco if) sull'elemento “data” di $row: se è diverso da “0000-00-00”, viene inizialmente creata una variabile chiamata “$data” che assume come valore la data della lettera richiesta. Successivamente viene creato un nuovo array denominato “$mesi”, contenente i nomi dei mesi in italiano. Quindi la funzione seguente, “list”, crea tre nuove variabili (“$giorno”, “$mese”, “$anno”) facendo uso del metodo “split”, che serve proprio per creare un array a partire da una stringa: lo split crea i tre elementi individuando, in questo caso, i trattini della data (“-”), che fungono da separatori. Il passo successivo consiste nell'assegnare alla variabile “$mese” il corretto elemento dell'array “$mesi”, ossia il nome del mese in italiano: per farlo è necessario decrementare l'elemento dell'array di una unità, in quanto il conteggio parte da zero (quindi nell'array gennaio non è 1 ma è 0, febbraio è 1 invece di 2, marzo è 2 e non 3, e così via). Fatto questo, viene impostato il nuovo valore della variabile “$data”, con il giorno, il mese e l'anno scritti correttamente.

5. Una proposta metodologica: fasi preliminari

L'ultimo passaggio è la stampa della data in formato elegante tramite il comando “echo”. Se la data è uguale a “0000-00-00”, il codice non stampa alcunché.

Altri tipi di informazioni (la raccolta di riferimento, l'indirizzo del mittente, l'indirizzo del destinatario, i collegamenti alle immagini dei manoscritti originali, le note) sono stati inseriti in “blocchi if”: questi ultimi permettono di eseguire certe operazioni solo se è verificata una certa condizione. In questo caso, il blocco if fa sì che i dati sopraccitati (raccolta, indirizzo del mittente ecc.) siano mostrati all'utente solo nel caso in cui siano presenti. Attraverso l'istruzione

if ($row['raccolta'] != "Assente") {

echo "<b>Raccolta</b>: $row[raccolta]<br /><br />";

}

si comunica al sistema di scrivere i dati relativi alla raccolta delle lettere solo nel caso in cui il contenuto del campo sia diverso (“!=”) dalla stringa (“Assente”). Come si è detto in precedenza, l'operatore, nel file XML, dovrà infatti inserire la dicitura “Assente” nel caso in cui un particolare dato non sia disponibile.