Dans le l'optique de l'amélioration perpétuelle, je viens de mettre un grand coup au moteur de publication de mon CMS. J'utilisais jusqu'à présent preg_match_callback() pour traiter les gabarits, ce qui était assez lourd, et surtout n'autorisait pas la moindre imbrication de même type...
Ce matin j'ai donc réfléchi très fort et j'ai pondu (aïe) un parser HTML des plus simple, léger et merveilleux.
Il prend un texte HTML (ou XML) et crée un arbre de nœuds _texte_ et _marqueur_. Il est possible de préciser un espace de noms pour ne récupérer que les marqueurs de l'espace de noms (ce qui me sert pour mon CMS). On peut également préciser l'encodage (utf-8 par défaut bien sûr), les valeurs des attributs des marqueurs étant _désachappées_ pour la plus grande joie des grands et des petits.
Vous trouverez tout ça sur mon blog : Un parser HTML des plus rapide et léger
Un piti exemple qui utilise l'espace de noms 'wdp:'
Code : Tout sélectionner
<wdp:articles limit="5">
<ul>
<wdp:foreach>
<li>{this.title}</li>
</wdp:foreach>
</ul>
</wdp:articles>
<?php
$parser = new WdHTMLParser();
$tree = $parser->parse($template, 'wdp:');
echo '<pre>' . print_r($true, true) . '</pre>';
?>
Code : Tout sélectionner
Array
(
[0] => Array
(
[name] => articles
[args] => Array
(
[limit] => 5
)
[children] => Array
(
[0] =>
<ul>
[1] => Array
(
[name] => foreach
[args] => Array
(
)
[children] => Array
(
[0] =>
<li>{this.title}</li>
)
)
[2] =>
</ul>
)
)
)