Afficher du code PHP sur un billet Dotclear
Par Fab,
dimanche 17 octobre 2004 à 23:11 :: Dotclear
:: #1
Bon, il faut bien commencer par quelque chose, donc mon premier billet portera sur le script de blog en lui même qui est utilisé ici: dotclear. Ceci pourra être intéressant pour toutes les personnes qui traitent du php dans leur blog, et qui souhaite afficher des exemples dans leur billets, chose qui n'est pas permise par défaut avec dotclear.
Pour le moment cette modification fonctionne certes très bien, mais reste assez 'bidouille', et si jamais je trouve une meilleure façon de procéder, je ne manquerai pas de vous tenir au courant (enfin bon, pour le moment il ne doit pas y avoir beaucoup de visiteurs, mais j'espère que ça viendra
)
Cette modification n'a rien de bien compliqué, et ne s'applique que sur un seul fichier: layout/functions.php. Notez qu'il est préférable de faire une sauvegarde de ce fichier avant de l'ouvrir, on n'est jamais trop prudent 
Il faut tout d'abord ajouter une fonction qui va permettre de coloriser le bout de code php, cette fonction à été trouvé en fouinant sur le net
. J'ai simplement inséré le texte de retour dans un <div class="phpcode"></div> pour qu'il soit plus pratique à manipuler dans dotclear. Vous pouvez placer cette fonction n'importe où dans function php, du moment qu'elle ne s'intercalle pas dans une autre
, mais j'imagine que ceux qui voudront utiliser ce code connaissent le php donc sauront comment procéder 
<?php
function highlite($text)
{
return '<div class="phpcode">'.highlight_string( "<?php\n".str_replace("\\\"","\"",$text)."\n?>",true).'</div>';
}
?>
Mise à jour du 19/10/04: Je m'étais rendu compte d'un petit problème au niveau de l'affichage des antislash dans le code, ce problème est désormais résolu, et la fonction highlite() a été modifié depuis la première que j'avais proposé. Vous pouvez désormais copier/coller votre code php directement depuis le fichier, il n'y aura plus aucun problème
.
Il faut ensuite effectuer une modification sur 2 fonctions existentes: dcPostContent et dcPostAbstract. La première s'occupe d'afficher un biller dans la page qui lui est dédiée, la seconde pour la page d'index ou les pages de recherches (il me semble, je n'ai encore bien mis le nez dans le code
). Par sécurité, j'ai simplement commenté le code remplacé, plutôt que de l'écraser, ca ne mange pas de pain, comme on dis, et ca pourrait être utile plus tard
. Voici donc les modifs:
<?php
function dcPostContent($part=0)
{
global $news;
if ($part > 0) {
echo preg_replace("/(\[php\\])(.*)(\[\/php\])/siUe", "highlite('\\2')",$news->blog->getPart($news->f('post_content'),$part));
//echo $news->blog->getPart($news->f('post_content'),$part);
} else {
echo preg_replace("/(\[php\])(.*)(\[\/php\])/siUe", "highlite('\\2')",$news->getContent());
//echo $news->getContent();
}
}
function dcPostAbstract($s='%s',$l='<p><a href="%s">lire la suite</a></p>')
{
global $news;
if ($news->f('post_chapo') != '') {
printf($s,$news->getChapo());
printf($l,$news->getPermURL());
} else {
echo preg_replace("/(\[php\])(.*)(\[\/php\])/siUe", "highlite('\\2')",$news->getContent());
//echo $news->getContent();
}
}
?>
Voilà, ce n'est pas plus compliqué! Désormais, lorsque vous postez un commentaire en html (je n'ai pas testé avec le mode wiki), vous pouvez insérer du code php entre les tags (repris du code phpbb) [php]...[/php] (Vous pouvez modifier cela en modifiant l'expression régulière de la fonction preg_replace). Comme je viens de m'en appercevoir en postant ce billet, pour que le code php soit colorisé, il est nécessaire de l'encadrer par <?php et ?>.
Ca y est! C'était mon premier billet sur mon premier blog 
PS: Ceci ne fonctionnera que pour le corps de vos billet, et ne sera pas pris en compte dans le chapô par exemple, mais cela ne doit pas être très compliqué, et demander le même genre de modification pour être possible 
/!\ Mise à jour du 23/11/04 /!\: En regardant les stats, j'ai vu qu'on parlait de moi sur un autre blog, donc je suis allé voir, et le monsieur a dit que la fonction highlight_string de php ne produisait pas du code XHTML valide à cause de la balise <font>. Pour ceux qui souhaiteraient corriger ce petit problème, je vous invite à aller faire un tour sur le blog du monsieur en question: cyrilweblog.





Commentaires
1. Le mardi 19 octobre 2004 à 22:38, par Fab :: site
2. Le mercredi 20 octobre 2004 à 06:58, par HP
3. Le mercredi 20 octobre 2004 à 13:20, par Fab :: site
4. Le samedi 23 octobre 2004 à 21:45, par Kaya :: site
5. Le samedi 23 octobre 2004 à 21:53, par Fab :: site
6. Le dimanche 24 octobre 2004 à 13:58, par Kaya :: site
7. Le mardi 28 décembre 2004 à 16:55, par NiKo :: site
8. Le mercredi 4 mai 2005 à 23:31, par Y. Girod
9. Le vendredi 6 mai 2005 à 09:45, par Y. Girod
10. Le vendredi 6 mai 2005 à 20:44, par Compote :: site
Ajouter un commentaire
Les commentaires pour ce billet sont fermés.