Spip est tellement pratique qu’il sert pour plein d’autres choses que ce pour quoi il est prévu à l’origine... Pour cela, l’utilisateur affecte des fonctions particulières aux champs des articles et autres objets spip : par exemple, le sous titre contiendra en fait la référence d’un livre, ou le PS la fiche technique d’un produit ... Mais parfois, il arrive qu’il manque de champs prédéfinis !!! Dans sa grande vérsatilité, SPIP propose alors des champs extras (en phase de rodage...), qui, au prix d’une mise en oeuvre un peu technique (c’est pas du presse bouton pour le webmaster), sont d’une utilisation complètement transparente pour le rédacteur.
Cette contribution présente une alternative : les champs multi-contenus, gérés « à la main ».
Pour cela il faut :
- un formalisme de description d’un champ multi-contenu
- un filtre pour récupérer un contenu : val_contenu
formalisme
Un champ dont on souhaite qu’il soit multi-contenu doit contenir une suite de couples #clé#valeur du contenu associé à la clé#
, où clé
est la clé permettant de récupérer le contenu.
Exemple :
Le site d’un voyagiste présente des voyages dans des ARTICLES. Les différents champs standards sont utilisés pour décrire le titre et les caractéristiques principales du voyage. Mais le voyagiste voudrait aussi décrire les caractéristiques du pays traversé, or il n’y a plus que le champ PS de disponible !! Alors on utilisera ce champ PS comme champ multicontenu.
Ainsi, PS contiendra, pour un voyage à Cuba :
#pays#CUBA#
#superficie#110 860 km2 (0,2 x la France)#
#capitale#La Havane#
#population#11 millions d'habitants#
#origines#La majorité de la population cubaine trouve ses racines en Espagne. Plus de 10% de la population de l'île est d'origine africaine, 1% d'origine chinoise et 22% est métissée.#
#langues#espagnol#
#religions#Santerías, catholicisme, protestantisme#
#politique#République communiste#
#président#Fidel Castro# 78 ans en janvier 04 ...
#monnaie#Le peso cubain (le peso convertible, le dollar US)#
Notez qu’entre chaque couple, on peut juste mettre un espace, ou aller à la ligne, ou même sauter une ligne pour plus de clarté avec les grands textes dans la zone de saisie, ou bien même, on peut glisser un commentaire.
le filtre
définition
Le filtre val_contenu doit être défini dans mes_fonctions.php3 :
/*
* +----------------------------------+
* Nom du Filtre : val_contenu
* +----------------------------------+
* Date : mercredi 22 janvier 2003
* Auteur : JLuc
* +-------------------------------------+
* Fonctions de ce filtre :
* extraire une valeur d'un champ multicontenu
* +-------------------------------------+
*
* Pour toute suggestion, question ou remarque
* reportez-vous au forum de l'article :
* http://www.spip-contrib.net/Filtre-val-contenu-pour-champs
*/
function val_contenu ($texte, $cle)
{
if (eregi ("#$cle#([^#]*)", $texte, $regs))
return $regs[1];
else return "";
}
domaine d’application
A priopri, tous les champs de tous les objets peuvent en bénéficier : TITRE, SOUSTITRE, SURTITRE, DESCRIPTIF, TEXTE, CHAPO, PS, NOM_SITE, ..., pour les ARTICLES, les BREVES, les AUTEURS, les RUBRIQUES, les DOCUMENTS...
exemple
Toujours dans le cas de l’article sur un voyage à Cuba, PS contenant les multiples contenus définis ci-dessus, le filtre val_contenu permet d’y accéder pour les restituer à leur place adéquate dans le squelette :
[(#PS|val_contenu{pays})]
a une superficie de [(#PS|val_contenu{superficie})]
et une population de [(#PS|val_contenu{population})].
[Origines : (#PS|val_contenu{origines})].
On y parle [(#PS|val_contenu{langues})].
Sa capitale s'appelle [(#PS|val_contenu{capitale})]
Lorsqu’il n’y a pas de valeur correspondant à la clé demandée, la fonction retourne une chaîne vide, et il est donc possible de le tester avec les crochets [ et ]
.
Bilan
Le moinss : Cela demande aux rédacteurs de se conformer au formalisme #clé#valeur de la clé# etc... Si c’est pas envisageable, il faudra les EXTRA !
Le plus : C’est souple puisque c’est appelé par les squelettes et qu’on peut définir très finement le contexte d’utilisation : tout le site, ou juste un secteur, ou juste une rubrique, ou juste un article...
Questions / Réponses
- Pourquoi / quand utiliser cette contrib plutôt que les champs extra ?
Quand tu le sens. Quand tu n’as pas cherché la doc pour les EXTRAs et que tu ne peux donc pas les utiliser. Quand tu as trouvé la doc pour les EXTRA et que tu te sens pas de les utiliser. Quand tu veux quelquechose d’un peu plus contexte-localement-utilisable. Quand tu tombes sur cette contrib et que ça répond à tes besoins.
- Est-il prévu/envisagé de modifier articles_edit pour générer un formulaire (en fait, autant de input que de champs) au lieu du champs ?
Pas du tout. Les champs EXTRAs sont très bien pour ça.
- Il y a des # dans mes textes, je peux pas m’en servir comme ça, comment je fais ?
Le caractère # a été choisi car il est rarement utilisé dans les textes. Si il ne convient pas à un contexte donné, il est possible de le remplacer par un autre caractère, ou par une séquence plus rare de caractères, en modifiant le filtre en conséquence.
- « Quicher » ça veut dire quoi ?
« quicher », c’est patoisant surement ; ça veut dire « mettre, remplir, serrer, tasser ». Les personnes qui emploient cette expression ont souvent un joli sourire... Comme le « moinss », c’est un clin d’œuil hommage à la diversité de nos régions.
- 2020 : eregi est obsolète maintenant. À partir de PHP 5.3 en fait. Comment je fais ?
En effet, il faut désormais utiliser preg_match()
avec le modificateur i
à la place de eregi
, ce qui donne quelque chose du genre :
if (preg_match ("/#$cle#([^#]*)/i", $texte, $regs))
return $regs[1];
Si vous essayez, vous dîtes si ça marche ?
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 : |