Per la visualizzazione dei post in homepage non sarà necessario creare funzioni aggiuntive; nella prima pagina del blog verranno visualizzati i dati dei post scritti fino al momento corrente compresa un'anteprima del testo completo relativo ad ogni articolo, per comodità del lettore ogni anteprima sarà seguita dal classico collegamento alla pagina che permetterà di leggere il testo integrale del post, in questo modo si eviterà di generare un'homepage troppo lunga da scorrere e gli utenti potranno avere informazioni sufficienti per decidere se proseguire o meno con la lettura degli articoli.
Di seguito viene proposto il codice necessario per la visualizzazione dei post in homepage:
<html> <head> <title>MioBlog</title> </head> <body> <h1>MioBlog: realizzato in PHP e MySQL</h1> <?php // inclusione del file di classe include "funzioni_mysql.php"; // istanza della classe $data = new MysqlClass(); // chiamata alla funzione di connessione $data->connetti(); // query per l'estrazione dei record $post_sql = $data->query("SELECT * FROM post ORDER BY data_post DESC"); // controllo sul numero di records presenti in tabella if(mysql_num_rows($post_sql) > 0){ // estrazione dei record tramite ciclo while($post_obj = $data->estrai($post_sql)){ $id_post = $post_obj->id_post; $titolo_post = stripslashes($post_obj->titolo_post); $testo_post = stripslashes($post_obj->testo_post); $autore_post = stripslashes($post_obj->autore_post); $data_post = $post_obj->data_post; // visualizzazione dei dati echo "<h2>".$titolo_post."</h2>n"; echo "Autore <b>". $autore_post . "</b>n"; echo "<br />n"; echo "Pubblicato il <b>" . $data->format_data($data_post) . "</b>n"; echo "<br />n"; // collegamento al testo completo del post $leggi_tutto = "<br /><a href="post.php?id_post=$id_post">Articolo completo</a>n"; // anteprima del testo echo "<p>".$data->preview($testo_post, 50, $leggi_tutto)."</p>n"; echo "<hr>n"; } }else{ // notifica in assenza di record in tabella echo "Per il momento non sono disponibili post."; } // chiusura della connessione a MySQL $data->disconnetti(); ?> </body> </html>
Per ottenere l'output desiderato, è stata passata come argomento alla funzione personalizzata query()
l'istruzione Sql SELECT * FROM post ORDER BY data_post DESC
, che "tradotta" in linguaggio umano significa: "seleziona tutti i record presenti nella tabella post e ordinali sulla base dei valori contenuti nel campo data_post disposti in ordine discendente, dall'ultimo al primo per data di scrittura". DESC infatti è una delle due clausole che è possibile associare al comando ORDER BY
di SQL e consente di visualizzare dei valori partendo dal maggiore (o nel caso specifico, dal più recente) fino ad estrarre come ultimo record quello corrispondente al valore minore; l'ordinamento contrario, cioè a partire dal valore inferiore, è ottenibile sostituendo DESC con ASC.
La stessa query avrebbe potuto coinvolgere soltanto uno specifico numero di record, ad esempio soltanto quelli corrispondenti agli ultimi dieci post pubblicati, utilizzando una particolare clausola chiamata LIMIT
, in questo caso l'istruzione sarebbe stata la seguente: SELECT * FROM post ORDER BY data_post DESC LIMIT 10
; ma sarebbe stato anche possibile estrarre soltanto i record validi per un determinato intervallo di valori, ad esempio, l'istruzione SELECT * FROM post ORDER BY data_post DESC LIMIT 5,10
; avrebbe consentito la visualizzazione dei record che disposti in senso cronologico crescente avessero occupato le posizioni ricompresse tra la quinta e la decima.
Si noti inoltre, come il risultato dell'applicazione della funzione query()
sull'istruzione SQL sia stato si passato alla funzione estrai() quale condizione di un ciclo while, ciò è stato necessario perché i record contenuti all'interno della tabella possono essere più di uno, quindi ognuno di essi dovrà essere visualizzato tramite una diversa iterazione del ciclo fino a quando non venga più soddisfatta la condizione prevista per esso e tutti i risultati non siano stati mostrati a video.