Ce filtre fait 2 choses :
- il tronque les titres à 60 caractères (sans coupure de mot, donc ça peut dépasser un peu cette limite)
- il met en minuscules les titres écrits tout en majuscules, et, dans tous les cas, force la 1e lettre en majuscule.
Le filtre s’appelle « titre_homogene » et voici le code :
function titre_homogene($titre) {
$titre = tronquer_titre($titre);
return casse_titre($titre);
}
// tronque un titre à 60 caractères, sans coupure de mot
function tronquer_titre($texte) {
return couper_texte($texte, 60);
}
// coupe une chaîne à $limite caractères, sans coupure de mot
// (un mot est considéré comme un groupe de caractères séparé par des espaces)
function couper_texte($texte, $limite) {
// la longueur du texte est <= $limite, on retourne le texte entier
if (strlen($texte) <= $limite) return $texte;
// on fait la coupure avant le 1e espace après $limite caractères
$texte = nl2br($texte);
$pos = strpos(substr($texte, $limite), " ");
// s'il y a un espace après $limite caractères ou juste après $limite caractères
// on retourne la partie de $texte jusqu'avant cet espace
if (is_integer($pos) && $pos) return substr($texte, 0, $limite+$pos) . " (...)";
// sinon (pas d'espace après $limite caractères ou juste après $limite caractères) on retourne le texte
else return $texte;
}
// vérifie la casse du titre afin de le mettre en minuscules
// s'il est tout en majuscules et de forcer la 1ère lettre en majuscule
function casse_titre($titre) {
if (!ereg("([a-z|\.]+)", $titre)) $titre = strtolower($titre);
// si le titre commence par un numéro (1. ),
// il faut mettre le 1er car qui suit en majuscules
if (ereg("^[0-9]+\. ", $titre)) {
$pos = strpos($titre, " ");
if (is_integer($pos) && $pos)
return substr($titre, 0, $pos) . " " . ucfirst(substr($titre, $pos+1));
else return $titre;
}
else return ucfirst($titre);
}
(Les lignes commençant par un //
peuvent être supprimées : elles servent à expliquer le code, au cas où vous voudriez le modifier)
Exemple :
<BOUCLE_articles(ARTICLES){id_rubrique}>
[(#TITRE|titre_homogene)]
</BOUCLE_articles>
Mais au fait, pourquoi ce filtre : un petite explication s’impose
Pour la maquette de mon premier site SPIP, je me suis inspiré des squelettes par défaut, dont le graphisme avaient une certaine élégance. Le client était content, moi aussi. Jusqu’au jour où est arrivé le « Communiqué de presse du Collectif National des Psychologues de la Fonction Publique Hospitalière » (92 signes). Comme si leurs titres n’étaient pas assez visibles, nos bavards psys se sont mis en tête de les mettre en majuscules…
Pour éviter de tels excès, j’ai écrit ce filtre qui a donc 2 buts :
- limiter la longueur des titres à 60 signes,
- forcer les titres en minuscules (avec la 1re lettre majuscule) pour homogénéiser les titres du site.
Comment utiliser ce filtre ?
Comme tous les filtres : (#TITRE.
Pour le filtre « titre_homogene », ce sera (#TITRE.
Où écrire ce filtre ?
SPIP met à votre disposition un fichier mes_fonctions.php3, vide à l’origine et destiné à recevoir tous vos filtres.
Donc ce fichier ressemblera à ça :
<?php
(tout le code de vos filtres, en particulier celui indiqué dans l'article « Homogénéiser les titres »)
?>
où
<?php et ?>
sont les balises de code PHP. Donc pas de balises HTML en dehors de ces balises PHP.
Si vous n’avez pas d’éditeur acceptant les fichiers PHP, vous pouvez écrire vos filtres avec le Bloc-Note de Windows.
Le filtre titre_homogene
Un filtre appelle une fonction PHP de mes_fonctions.php3, avec un seul argument : le texte à modifier (les filtres peuvent avoir plusieurs arguments à partir de la version 1.42).
Notre filtre appelle donc la fonction titre_homogene(), laquelle fait appel à 2 sous-filtres tronquer_titre et casse_titre qui ont respectivement les fonctions décrites plus haut, et que vous pouvez utiliser individuellement.
Le sous-filtre tronquer_titre
Il tronque le titre à 60 caractères (limite que vous pourrez modifier en changeant la valeur dans la fonction tronquer_titre()), sans coupure de mot. Ca veut dire que si le dernier mot est coupé, le titre est tronqué juste derrière ce mot.
La fonction appelle une fonction couper_texte() qui coupe un texte à la longueur demandée, sans coupure de mot :
function tronquer_titre($texte) {
return couper_texte($texte, 60);
}
Si le titre est tronqué, "(…)" est rajouté à la fin, pour montrer que le titre n’est pas complet. Evidemment, ça n’a d’intérêt que pour les liens "Dans la même rubrique", par exemple.
Le sous-filtre casse_titre
Ce sous-filtre n’a rien l’intention de casser, mais seulement de changer la casse majuscules du titre en minuscules, avec la 1re lettre majuscule. Vous jugerez que ce n’est pas vraiment génial de transformer, par exemple : « LA FETE A COTE ! » en « La fete a cote ! » En fait, le but inavoué de ce filtre est de discipliner les rédacteurs afin qu’ils rédigent leurs titres en minuscules. En ce sens, oui, le filtre « casse » les titres majuscules.
La fonction casse_titre() détecte si le titre ne contient aucune minuscule. Si c’est le cas, elle le convertit en minuscules. Puis dans tous les cas, met la 1re lettre en majuscule.
Si le titre contient un numéro de type « 1. le titre », c’est le 1er caractère suivant ce numéro qui est converti en majuscule.
Compatibilité
Le filtre est compatible SPIP 1.3 et suivants, ainsi que PHP3 et suivants.
Aucune discussion
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
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.
Suivre les commentaires : |