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