Utiliser Tidy pour corriger la sortie du template principale Afin de pouvoir respecter les normes HTML, ou XHTML, vous pouvez utiliser Tidy qui fera une bonne partie de la correction de vos pages. Le traitement n'est pas très long, et vous pouvez assurer ainsi un bonne visibilité pour la plupart des navigateurs.
Préparation
Nous allons tout coder dans index.php... le fait est que nous devons activer la bufferisation de contenu, et finaliser le tout en traitant le contenu avant affichage. J'aurai aimé trouver une solution plus pratique en guise de plugin, mais je n'ai pas encore put résoudre certains principes.
Nous utiliserons PHP 5 en premier lieu, et je vous donnerai une solution pour PHP 4. Dans tous les cas, il faut commencer par ouvrir index.php et insérer en première ligne:
<?php ob_start();
Cela enclenche la bufferisation de sortie... cela veut dire que les "echo" et "print" ne seront pas tout de suite envoyés au client, mais restera dans un tampon. Nous pourrons lire le contenu avec {{{ #!php ob_get_contents() }}} afin de traiter le tampon (buffer) qui ne sera pas vidé. Pour le vider, il faudra utiliser {{{ #!php ob_end_clean() }}} après traitement.
Une autre fonction {{{ #!php ob_get_clean() }}} renvoi le buffer et le vide...
En ce qui concerne Tidy, nous n'aurons que le buffer final à lire, les deux fonctions sont donc utilisable sans trop se soucier de vider ou non le buffer, puisque de toutes manières nous aurons à faire un echo du contenu en fin de processus. Le buffer sera donc quand même vidé.
Insertion de tidy (PHP 5)
Nous admettrons ici que nous utilisons PHP 5. De ce fait, une fonction permet de récupérer le code HTML de sortie avant son envoi dans les entêtes HTTP. La méthode se nomme: ob_get_clean.
Il faut ensuite utiliser tidy pour corriger la sortie de code HTML. Comme vous le savez, c'est le fichier index.php qui lance la machine Copix, et c'est uniquement ce script qui est vraiment appelé. Il suffit donc d'ajouter en fin de fichier ces quelques lignes.
//Récupération du code qui va être affiché $content = ob_get_clean(); // Configuration des option pour tidy $config = array( 'indent' => true, //indentation du code 'add-xml-decl' => false, //ne pas ajouter la balise xml 'output-xhtml' => true, //XHTML... HTML... au choix 'doctype' => 'strict', //XHTML strict 'wrap' => 80); //on coupe le source en ligne de 80 caractères //on crée un objet tidy (PHP 5 seulement) $tidy = new tidy; $tidy->parseString($content, $config, 'latin1'); //parsing du code, je suis en iso latin1 $tidy->cleanRepair(); // réparation propre, pas de warning etc... // On affiche finalement le code echo $tidy;
Pourquoi faire ainsi ?
Comme je le disais, Copix fait une série de "echo" dans la coordination, et la méthode que je spécifie permet simplement de ne pas se préoccuper de qui affiche quelques chose... Ici, nous prenons tout l'affichage final et nous le traitons. Travailler dans index.php est donc une bonne solution, voir la meilleur, car tous le code est pris en compte !
Et avec PHP 4 ?
Sous PHP 4, nous utilisons le même principe de code, mais au lieu d'utiliser la version de tidy objet, nous devons passer par un mode procédural:
$content = ob_get_contents(); // on prend le code HTML qui va s'afficher if( function_exists( 'tidy_parse_string' ) ) { tidy_set_encoding('iso-8859-1'); //encoding français tidy_parse_string($content); //on parse la chaîne tidy_setopt('output-xhtml', TRUE); // XHTML tidy_setopt('add-xml-decl' , FALSE); //pas de balise <?xml ...?> tidy_setopt('indent', TRUE); // indente le code tidy_setopt('wrap', 80); // coupe les lignes en 80 colonnes tidy_clean_repair(); //on répare $content = tidy_get_output(); } ob_end_clean(); //on affiche enfin le code réparé echo $content;
En savoir plus sur les options tidy
Tidy a une grande série d'options qui vous permettront de personnaliser vos corrections. Allez voir la page http://tidy.sourceforge.net/docs/quickref.html qui donne la liste des options possibles.
