Nous avons vu dans la syntaxe des balises SPIP qu’il était possible de modifier le comportement et l’affichage des balises en leur attribuant des filtres.
[ option avant (#BALISE|filtre1|filtre2|...|filtren) option après ]
Les filtres 1, 2, ..., n sont appliqués successivement à la #BALISE.
Les filtres de mise en page
majuscules fait passer le texte en majuscules. Par rapport à la fonction de PHP, majuscules s’applique également aux lettres accentuées.
justifier fait passer le texte en justification totale (<P align=justify>).
aligner_droite fait passer le texte en justification à droite (<P align=right>).
aligner_gauche fait passer le texte en justification à gauche (<P align=left>).
centrer centre le texte (<P align=center>).
Les filtres des dates
Les filtres suivants s’appliquent aux dates ((#DATE par exemple).
affdate affiche la date en français, par exemple « 13 janvier 2001 ».
jour affiche le jour (en nombre).
mois affiche le mois (en nombre).
annee affiche l’année.
[SPIP 1.0.2] heures affiche les heures d’une date (les dates fournies par SPIP contiennent non seulement le jour, mais également les horaires).
[SPIP 1.0.2] minutes affiche les minutes d’une date.
[SPIP 1.0.2] secondes affiche les secondes.
nom_jour affiche le nom du jour (lundi, mardi...).
nom_mois affiche le nom du mois (janvier, février...).
saison affiche la saison (hiver, été...).
Filtres de logos
fichier [SPIP 1.4]. Affecté à un logo, ce filtre permet de récupérer directement le nom de fichier correspondant au logo.
||autres filtres Contrairement aux versions précédentes, [SPIP 1.4] permet de passer des filtres « maison » sur les logos : la logique est un peu tordue, car il fallait respecter la compatibilité avec SPIP 1.3. L’analyse se déroule comme suit :
- si le premier « filtre » n’est pas un alignement, SPIP considère qu’il s’agit d’un URL et fait un lien du logo vers cette adresse ;
- si le premier filtre est un alignement, SPIP considère que le deuxième « filtre » est un URL ;
- les filtres suivants sont de vrais filtres au sens habituel (y compris des filtres « maison » déclarés dans mes_fonctions.php3 ;
- pour appliquer un filtre quelconque sans mettre d’URL, il faut mettre deux barres. Par exemple :
<?php $logo = '[(#LOGO_RUBRIQUE||texte_script)]'; ?>
permet de récupérer le logo dans la variable php $logo
, pour traitement ultérieur (voir ci-dessous pour la signification de |texte_script
).
Filtres de texte
La plupart de ces filtres ont été introduits dans la version [SPIP 1.4]
liens_ouvrants transforme les liens SPIP qui donnent vers des sites extérieurs en liens de type « popup », qui ouvrent dans une nouvelle fenetre ; c’est l’équivalent du target=blank du HTML. N.B. : les développeurs de SPIP estiment qu’il s’agit en général d’une impolitesse, car les internautes savent très bien s’ils ont envie ou pas d’ouvrir une nouvelle fenêtre - or ce système le leur impose. Mais la demande était trop forte, et nous avons craqué ;-)
supprimer_numero sert à éliminer le numéro d’un titre, si par exemple on veut faire des tris d’articles {par num titre}
mais ne pas afficher les numéros (car ils ne servent qu’à ordonner les articles).
PtoBR transforme les sauts de paragraphe en simples passages a la ligne, ce qui permet de « resserrer » une mise en page, par exemple à l’intérieur d’un sommaire
taille_en_octets permet de transformer un nombre d’octets (25678906) en une chaîne de caractères plus explicite (« 24.4 Mo »).
supprimer_tags est une suppression basique et brutale de tous les <...>
textebrut s’apparente au filtre supprimer_tags
, mais il agit de manière un peu plus subtile, transformant notamment les paragraphes et <br>
en sauts de ligne, et les espaces insécables en espaces simples. Utilisation, par exemple, pour faire un descriptif META à partir du #DESCRIPTIF : [<meta name='description' content='(#DESCRIPTIF|textebrut)'>]
Filtres techniques
Ces filtres ont été introduits par [SPIP 1.4].
entites_html transforme un texte en entités HTML, que l’on peut donc implanter dans un formulaire, exemple : [<textarea>(#DESCRIPTIF|entites_html)</textarea>]
texte_script transforme n’importe quel champ en une chaîne utilisable en PHP ou Javascript en toute securité, exemple : <?php $x = '[(#TEXTE|texte_script)]'; ?>
. Attention : utilisez bien le caractère '
et non "
: en effet, dans le second cas, si votre texte contient le symbole $
, le résultat peut être catastrophique (affichage partiel, affichage d’autre chose, plantage php, etc.).
attribut_html rend une chaîne utilisable sans dommage comme attribut HTML ; par exemple, si l’on veut ajouter un texte de survol au lien normal vers un article, on utilisera
<a href="#URL_ARTICLE" [ title = "(#DESCRIPTIF|supprimer_tags|attribut_html)" ]>#TITRE</a>
.
[SPIP 1.6] introduit le filtre |sinon
, qui indique ce qu’il faut afficher si l’élément « filtré » est vide : ainsi [(#TEXTE|sinon{"pas de texte"})]
affiche le texte ; si celui-ci est vide, affiche « pas de texte ».
Ajouter ses propres fonctions
Les filtres de SPIP sont des fonctions PHP à une seule variable. Vous pouvez utiliser directement les fonctions habituelles de PHP, mais également créer les vôtres, sur le modèle :
<?php
function mon_filtre($texte){
$texte = (bidouillages en PHP) ...;
return $texte;
}
?>
Afin de ne pas avoir à modifier des fichiers de SPIP (qui risqueraient d’être écrasés lors d’une prochaine mise à jour), vous pouvez installer vos fonctions personnelles dans un fichier mes_fonctions.php3 : si SPIP repère un fichier ayant ce nom, il l’inclut automatiquement.
Par exemple, ARNO* a développé le filtre enlettres
, qui n’est pas inclus dans la distribution standard de SPIP. Ce filtre écrit un nombre en toutes lettres ( [(#DATE|annee|enlettres)] = « deux mille deux »
) ; ce filtre peut être téléchargé sur http://www.uzine.net/spip_contrib/a... ; il suffit de l’ajouter dans votre fichier mes_fonctions.php3
pour l’utiliser.
Depuis [SPIP 1.5], il est possible de passer des paramètres dans les filtres. La syntaxe est
Le filtre doit être défini de la manière suivante dans mes_fonctions.php3 :
On peut ainsi appeler n’importe quelle fonction php, ou s’appuyer sur des fonctions définies dans SPIP ou dans mes_fonctions.php3
, pour peu qu’elles respectent l’ordre des arguments (le texte à traiter doit être impérativement le premier argument). Par exemple, pour couper le texte à une longueur donnée (50 caractères), on pourra utiliser [(#TEXTE|couper{50})]
.