Il modulo tidy si avvale dell'omonimo programma per individuare eventuali errori nel contenuto della pagina da cui viene chiamato; si può richiamare dai nodi di tipo "page" o "book" attraverso l'omonima linguetta.
Il suo funzionamento interno è molto semplice. Per prima
cosa viene recuperata la pagina in questione utilizzando come
identificativo del nodo arg(1)
, che viene passato
automaticamente da drupal:
$page = implode("\n", file($base_url."/node/".arg(1)));
A questo punto si avvia tidy aprendo i tre descrittori standard (stdin, stdout e stderr) per comunicare:
$descriptorspec = array( // stdin is a pipe that the child will read from 0 => array("pipe", "r"), // stdout is a pipe that the child will write to 1 => array("pipe", "w"), // stderr is a pipe that the child will write to 2 => array("pipe", "w") ); $process = proc_open('tidy -asxhtml -q', $descriptorspec, $pipes);
e gli si invia la pagina web precedentemente immagazzinata in
$page
tramite stdin:
fwrite($pipes[0], $page);
per poi leggere eventuali messaggi di errore da stderr:
while (!feof($pipes[2])) { $contents .= fread($pipes[2], 8192); }//WHILE
Se il codice HTML (o XHTML, nel nostro caso) non è corretto, lo standard error conterrà i messaggi di errore che tidy avrebbe normalmente visualizzato in terminale. Questi ultimi permettono di individuare e correggere gli errori di sintassi in modo abbastanza semplice e veloce:
line 213 column 5 - Warning: missing <li> line 215 column 8 - Warning: trimming empty <p> line 218 column 7 - Warning: trimming empty <li> line 220 column 1 - Warning: trimming empty <ol>
Riferimenti:
- Home del progetto Tidy: tidy.sourceforge.net
- Man di Tidy: tidy.1