BaliseCommentaire

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !

Attention, cet exemple ne marche plus avec la version actuelle du cvs. C’est juste une histoire de commentaires imbriqués, alors les principes décris ici restent intéressant à lire.

Dans SPIP, quand on veut commenter un squelette, c’est pas toujours jolie. On se retrouve dans la page html avec des commentaires pas très pertinents et souvent répétés (à cause des boucles).

Voyons donc comment utiliser la magie du nouveau compilateur pour créer des balises de commentaire.

But

On veut tout simplement émuler /* et */ (commentaire en bloc) comme dans beaucoup de langages de programmation. On déclare donc deux nouvelles balises :
-  #DEBUT_COMMENT
-  #FIN_COMMENT

Comment on déclare une nouvelle balise

Avec la nouvelle version du compilateur proposé par ESJ et actuellement inclus dans la version 1.8a4, on peut facilement déclarer (ou redéclarer) une balise. Il suffit pour cela de placer dans mes_options.php3 une fonction qui s’appelle :
balise_MABALISE

qu’est ce qui se passe dans SPIP

On apprend en regardant dans le code de spip, que cette nouvelle fonction doit :


[...] genere le code PHP correspondant a la balise Spip.

Retourne [...] une EXPRESSION php [...]

La nouvelle fonction de calcul de balise doit donc retourner du code PHP. Mais pourquoi ?

SPIP va utiliser ce code pour construire un fichier .php dans le cache. Ce fichier sera ensuite exécuter pour créer une page — si possible — totalement en html. MAIS il ne faut pas renvoyer n’importe quel code ! il faut renvoyer du code qui renvois une chaîne de caractères. En effet, le compilateur concatène les chaînes retournées par le code de chaque balise avec le code html — ou autre — qui les entoure dans le squelette.

Le code

Regardons le code pour nos deux nouvelles balises :

function balise_DEBUT_COMMENT($params) {
  $params->code = "''/*";
return $params;
}

function balise_FIN_COMMENT($params) {
  $params->code = "*/";
return $params;
}

Explication

Spip va donc essayer de concatener la chaîne retournée par notre code avec le reste des chaînes calculées. On ne peut donc pas juste retourner /* et */, sinon on aura quelque chose comme ça :

$ducode . "du texte brute<br/>"./*. un commentaire .*/ . $leresteducode

Il y aura donc un . de trop. C’est pourquoi — dans le code de la 1er balise — on retourne ''/*. Ainsi on annule le point en trop :

$ducode . "du texte brute<br/>".''/*. un commentaire .*/ . $leresteducode

Discussion

Aucune discussion

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom