Procediamo ora con la definizione della classe che si occuperà di creare il form, leggere i dati del form, inserire e modificare i record, renderli visibili in formato lista o dettaglio e, infine, eliminare i record.
Definiamo quindi due proprietà public
, l'$id
e il $tipo
. Nella prima inseriremo l'$id
del record oggetto delle nostre operazioni o "0" quando non ci sarà bisogno di un $id
valorizzato; lo definiamo public
perché al caricamento della pagina che istanzia la classe leggeremo il valore dell'$id
e lo assegneremo.
$tipo
fa invece riferimento alla tabella da gestire e avrà valore news
oppure autori
.
Il primo metodo sarà pubblico e lo chiameremo crea_lista()
. il suo scopo è creare un output HTML con la lista dei record presenti nella tabella; altre feature da integrare sono: la paginazione, un motore di ricerca interno e l'ordinamento sulle colonne. L'output sarà formattato grazie a Bootstrap..
La parte rilevante del metodo inizia con la query sulla tabella struttura
che permette di estrarre tutti i nomi dei campi da utilizzare nella SELECT
, per questo motivo nella tabella struttura
abbiamo inserito un campo lista
: verranno estratti i record che hanno valore "1".:
$sql='SELECT * FROM struttura WHERE tabella="'.$this->tipo.'" AND lista="1"';
Andiamo a prepararla ed eseguirla con PDO, eseguiremo poi un ciclo sull'array dei risultati. Prima abbiamo però bisogno di preparare diversi dettagli. Innanzitutto al nostro metodo passeremo come global
la variabile $db
contenente la connessione. Poi definiremo un array vuoto, $campi
, per i nomi dei campi da estrarre, e una variabile stringa $where
contenente una stringa vuota: ci servirà per costruire dinamicamente la clausola WHERE della nostra query.
Definiamo una variabile $cerca
come stringa vuota, se il form di ricerca e filtro dei dati verrà utilizzato questa variabile conterrà il valore passato in GET
. Stesso discorso per $order
, a differenza della precedente useremo questa variabile per riordinare i dati e quindi per la clausola ORDER BY
; anche questa verrà gestita in base ad un eventuale valore ottenuto tramite GET.
Ultima variabile sarà $page
,inizializzata a "1", che conterrà il numero della pagina da caricare.
In un contenitore div
andremo a costruire un form costituito da un campo di input di tipo search
e un bottone submit
: servirà per filtrare i dati, il metodo di invio del form sarà GET
e la variabile $cerca
leggerà il valore inserito. Infine inseriremo un pulsante che ricaricherà la pagina che useremo per l'inserimento dei nuovi record. A questo punto possiamo impostare la tabella html che conterrà l'output dei dati.
Possiamo ora tornare al nostro ciclo e impostare l'HTML di intestazione della tabella. I nomi dei campi saranno dei link attivi per l'ordinamento, ogni link sarà costruito all'interno di un if
per l'ordinamento inverso. In pratica se la nostra query dovesse essere ordinata per il nome del campo sul cui sta insistendo il ciclo, l'ordinamento diventerà DESC
. Tutto ciò lo memorizzeremo nella variabile $o
:
if($order == $array['nome']){
$o = $array['nome'].' DESC';
}else{
$o = $array['nome'];
}
Creiamo la stringa HTML con l'intestazione della tabella e concateniamola con una variabile di output che verrà restituita dal metodo:
$out.='<td class="'.$array['nome'].'"><a href="?azione=lista&cerca='.$cerca.'&order='.$o.'" data-order="ASC">'.$array['nome'].'</a></td>';
Inseriamo i nomi dei campi nell'array:
array_push($campi,$array['nome']);
E, infine, costruiamo la clausola WHERE della futura query concatenando i nome dei campi con la variabile $cerca
. Per semplicità decideremo di usare LIKE
come operatore e OR
per congiungere vari campi, ovviamente arricchendo il form anche queste scelte potrebbero non essere più arbitrarie.
if($where!=''){$where.=')';}
In conclusione possiamo completare l'intestazione della nostra tabella con qualche riga HTML:
$out.='<td class="funzioni">Dettaglio</td>';
$out.='<td class="funzioni">Copia</td>';
$out.='<td class="funzioni">Edit</td>';
$out.='<td class="funzioni">Delete</td>';
$out.='</tr></thead>';