Professional Documents
Culture Documents
MANUEL DE REFERENCE DES BOUCLES ET BALISES .......................................................................... 3 DES BOUCLES ET DES BALISES .................................................................................................................... 8 LA SYNTAXE DES BOUCLES......................................................................................................................... 11 LA SYNTAXE DES BALISES SPIP ................................................................................................................. 16 LA BOUCLE ARTICLES .................................................................................................................................. 20 LA BOUCLE RUBRIQUES ............................................................................................................................... 24 LA BOUCLE BREVES....................................................................................................................................... 28 LA BOUCLE AUTEURS.................................................................................................................................... 31 LA BOUCLE FORUMS ..................................................................................................................................... 33 LA BOUCLE MOTS........................................................................................................................................... 36 LA BOUCLE DOCUMENTS............................................................................................................................. 38 LA BOUCLE SITES (OU SYNDICATION) .................................................................................................... 41 LA BOUCLE SYNDIC_ARTICLES ................................................................................................................. 43 LA BOUCLE SIGNATURES............................................................................................................................. 45 LA BOUCLE HIERARCHIE ............................................................................................................................ 47 LES CRITERES COMMUNS A TOUTES LES BOUCLES .......................................................................... 48 LES BALISES PROPRES AU SITE ................................................................................................................. 55 LES FORMULAIRES......................................................................................................................................... 59 LES FILTRES DE SPIP ..................................................................................................................................... 63 LES BOUCLES RECURSIVES......................................................................................................................... 73 LA GESTION DES DATES ............................................................................................................................... 75 BALISES .............................................................................................................................................................. 78 #AIDER ............................................................................................................................................................ 78 #ANCRE_PAGINATION ................................................................................................................................ 78 #ARRAY .......................................................................................................................................................... 79 #AUTORISER.................................................................................................................................................. 83 #BIO ................................................................................................................................................................. 83 #BOUTON_ACTION (DEPUIS SPIP 2.1) ......................................................................................................... 84 #CACHE........................................................................................................................................................... 85 #CHAMP_SQL ................................................................................................................................................ 85 #CHAPO........................................................................................................................................................... 85 #CHARSET ...................................................................................................................................................... 86 #CHEMIN ........................................................................................................................................................ 86 #COMPTEUR_BOUCLE................................................................................................................................. 87 #CONFIG ......................................................................................................................................................... 87 #DATE ............................................................................................................................................................. 87 #DATE_MODIF, #DATE_REDAC................................................................................................................. 88 #DATE_NOUVEAUTES................................................................................................................................. 88 #DESCRIPTIF.................................................................................................................................................. 88 #DESCRIPTIF_SITE_SPIP ............................................................................................................................. 88
3/186
#DISTANT ....................................................................................................................................................... 88 #DOSSIER_SQUELETTE ............................................................................................................................... 89 #DOUBLONS .................................................................................................................................................. 89 #EDIT ............................................................................................................................................................... 89 #EDITABLE..................................................................................................................................................... 90 #EMAIL ........................................................................................................................................................... 90 #EMAIL_WEBMASTER................................................................................................................................. 90 #EMBED_DOCUMENT.................................................................................................................................. 91 #ENV................................................................................................................................................................ 91 #EVAL ............................................................................................................................................................. 92 #EXTENSION.................................................................................................................................................. 92 #FICHIER......................................................................................................................................................... 93 #FILTRE........................................................................................................................................................... 93 #FOREACH ..................................................................................................................................................... 94 #FORMULAIRE_ADMIN............................................................................................................................... 95 #FORMULAIRE_ECRIRE_AUTEUR ............................................................................................................ 96 #FORMULAIRE_FORUM .............................................................................................................................. 96 #FORMULAIRE_INSCRIPTION.................................................................................................................... 96 #FORMULAIRE_SIGNATURE...................................................................................................................... 96 #GET ................................................................................................................................................................ 97 #HAUTEUR ..................................................................................................................................................... 97 #HTTP_HEADER ............................................................................................................................................ 97 #ID_ARTICLE ................................................................................................................................................. 98 #ID_DOCUMENT ........................................................................................................................................... 98 #ID_RUBRIQUE.............................................................................................................................................. 98 #ID_SECTEUR ................................................................................................................................................ 98 #INSERT_HEAD ............................................................................................................................................. 99 #INSERT_HEAD_CSS .................................................................................................................................... 99 #INTRODUCTION ........................................................................................................................................ 100 #LANG ........................................................................................................................................................... 100 #LANG_DIR, #LANG_LEFT, #LANG_RIGHT ........................................................................................... 100 #LARGEUR ................................................................................................................................................... 101 #LESAUTEURS............................................................................................................................................. 101 #LOGO_ARTICLE ........................................................................................................................................ 101 #LOGO_ARTICLE_RUBRIQUE .................................................................................................................. 102 #LOGO_AUTEUR ......................................................................................................................................... 104 #LOGO_AUTEUR_NORMAL...................................................................................................................... 105 #LOGO_AUTEUR_SURVOL ....................................................................................................................... 105 #LOGO_DOCUMENT................................................................................................................................... 106 #LOGO_SITE_SPIP....................................................................................................................................... 106 #MENU_LANG, #MENU_LANG_ECRIRE................................................................................................. 106 #MIME_TYPE ............................................................................................................................................... 107 #NOM_SITE .................................................................................................................................................. 107 #NOM_SITE_SPIP ........................................................................................................................................ 107 #NOTES ......................................................................................................................................................... 107 #PARAMETRES_FORUM............................................................................................................................ 108 #PETITION .................................................................................................................................................... 108 #PLUGIN ....................................................................................................................................................... 109 #POPULARITE.............................................................................................................................................. 109 #PUCE............................................................................................................................................................ 109 #PS.................................................................................................................................................................. 110 #REM ............................................................................................................................................................. 110 #SELF............................................................................................................................................................. 111 #SESSION ...................................................................................................................................................... 112 #SESSION_SET ............................................................................................................................................. 113 #SET ET #GET................................................................................................................................................ 115 #SOUSTITRE................................................................................................................................................. 116 #SQUELETTE................................................................................................................................................ 116 #SURTITRE ................................................................................................................................................... 116 #TAILLE ........................................................................................................................................................ 116 #TEXTE ......................................................................................................................................................... 117 #TITRE........................................................................................................................................................... 117 #TOTAL_BOUCLE ....................................................................................................................................... 117
4/186
#TOTAL_UNIQUE........................................................................................................................................ 117 #TYPE_DOCUMENT.................................................................................................................................... 118 #URL_ARTICLE ........................................................................................................................................... 118 #URL_AUTEUR ............................................................................................................................................ 119 #URL_DOCUMENT...................................................................................................................................... 119 #URL_RUBRIQUE........................................................................................................................................ 120 #URL_SITE_SPIP.......................................................................................................................................... 120 #URL_PAGE.................................................................................................................................................. 120 #URL_SITE, #NOM_SITE ............................................................................................................................ 121 #VAL.............................................................................................................................................................. 121 #VISITES ....................................................................................................................................................... 121 CRITERES ........................................................................................................................................................ 122 {BRANCHE} ..................................................................................................................................................... 122 {COLLECTE} .................................................................................................................................................... 122 {CRITERE ?} .................................................................................................................................................... 125 {CRITERE IN VALEUR1, VALEUR2[, VALEUR3,..., VALEURN]} ......................................................................... 125 {CRITERE LIKE VALEUR} ............................................................................................................................... 126 {CRITERE ?OPERATEUR VALEUR}.................................................................................................................... 127 { !CRITERE OPERATEUR VALEUR}.................................................................................................................... 127 {CRITERE !OPERATEUR VALEUR} .................................................................................................................... 128 {DATE}............................................................................................................................................................ 128 {DOUBLONS} ................................................................................................................................................... 128 {FUSION CHAMP_SQL}..................................................................................................................................... 132 {ID_ARTICLE} ................................................................................................................................................. 133 {ID_AUTEUR} .................................................................................................................................................. 133 {ID_GROUPE} .................................................................................................................................................. 134 {ID_MOT}........................................................................................................................................................ 134 {ID_RUBRIQUE}............................................................................................................................................... 134 {ID_SECTEUR}................................................................................................................................................. 134 {LANG} ........................................................................................................................................................... 134 {ORIGINE_TRADUCTION}................................................................................................................................. 134 {RECHERCHE} ................................................................................................................................................. 135 {TITRE_MOT}, {TYPE_MOT}............................................................................................................................ 135 {TOUS} ............................................................................................................................................................ 135 {TOUT}............................................................................................................................................................ 135 {TRADUCTION}................................................................................................................................................ 136 {VU}................................................................................................................................................................ 136 LES FILTRES ................................................................................................................................................... 138 |ABS_URL ......................................................................................................................................................... 140 |ABS_URL ......................................................................................................................................................... 140 |AFFDATE ......................................................................................................................................................... 140 |AFFDATE_COURT ............................................................................................................................................ 140 |AFFDATE_JOURCOURT .................................................................................................................................... 140 |AFFDATE_MOIS_ANNEE .................................................................................................................................. 141 |AFFICHER_ENCLOSURES ................................................................................................................................. 141 |AFFICHER_TAGS.............................................................................................................................................. 141 |AGENDA_AFFICHE........................................................................................................................................... 141 |AGENDA_CONNU............................................................................................................................................. 142 |AGENDA_MEMO .............................................................................................................................................. 142 |ALTERNER....................................................................................................................................................... 143 |ANCRE_URL .................................................................................................................................................... 144 |ANNEE ............................................................................................................................................................ 144 |APPLIQUER_FILTRE ......................................................................................................................................... 144 |ATTRIBUT_HTML............................................................................................................................................. 144 |BALISE_IMG .................................................................................................................................................... 145 |CHOIXSIEGAL{VALEUR, SIOUI, SINON} ........................................................................................................... 145 |CHOIXSIVIDE{SIOUI, SINON} ........................................................................................................................... 145 |COMPACTE ...................................................................................................................................................... 145 |CONCAT{VALEUR1, VALEUR2, ...} .................................................................................................................. 146 |COULEUR_* .................................................................................................................................................... 146 |COPIE_LOCALE................................................................................................................................................ 149
5/186
|COUPER ........................................................................................................................................................... 150 |DATE_822....................................................................................................................................................... 151 |DATE_RELATIVE ............................................................................................................................................. 151 |DIRECTION_CSS .............................................................................................................................................. 151 |DIV.................................................................................................................................................................. 152 |ENTITES_HTML ............................................................................................................................................... 152 |ENV_TO_PARAMS ........................................................................................................................................... 152 |ET ................................................................................................................................................................... 153 |EXTRAIRE_ATTRIBUT ...................................................................................................................................... 153 |EXTRAIRE_BALISE .......................................................................................................................................... 154 |FICHIER ........................................................................................................................................................... 154 |FIND ................................................................................................................................................................ 155 |FOREACH ........................................................................................................................................................ 155 |FORM_HIDDEN ................................................................................................................................................ 156 |HAUTEUR ........................................................................................................................................................ 156 |HEURES ........................................................................................................................................................... 156 |IMAGE_PASSE_PARTOUT ................................................................................................................................. 156 |INSERER_ATTRIBUT ........................................................................................................................................ 157 |IS_NULL .......................................................................................................................................................... 157 |JOUR ............................................................................................................................................................... 158 |LARGEUR ........................................................................................................................................................ 158 |LIENS_ABSOLUS .............................................................................................................................................. 158 |LIEN_OU_EXPOSE ........................................................................................................................................... 158 |LIENS_OUVRANTS ........................................................................................................................................... 159 |LIGNES_LONGUES ........................................................................................................................................... 159 |MATCH ............................................................................................................................................................ 160 |MINUTES ......................................................................................................................................................... 160 |MODULO ......................................................................................................................................................... 161 |MOINS ............................................................................................................................................................. 161 |MOIS ............................................................................................................................................................... 162 |MULT .............................................................................................................................................................. 162 |NOM_JOUR ...................................................................................................................................................... 162 |NOM_MOIS ...................................................................................................................................................... 162 |NON ................................................................................................................................................................ 163 |OU ................................................................................................................................................................... 163 |OUI.................................................................................................................................................................. 163 |PARAMETRE_URL............................................................................................................................................ 163 |PLUS ............................................................................................................................................................... 164 |PTOBR ........................................................................................................................................................... 164 |PUSH ............................................................................................................................................................... 165 |REPLACE ......................................................................................................................................................... 166 |SAFEHTML ...................................................................................................................................................... 166 |SAISON ............................................................................................................................................................ 167 |SECONDES ....................................................................................................................................................... 167 |SINGULIER_OU_PLURIEL{ XXX:CHAINE_UN, XXX:CHAINE_PLUSIEURS} ......................................................... 167 | ?{SIOUI, SINON}............................................................................................................................................. 168 |SINON.............................................................................................................................................................. 168 |SUPPRIMER_NUMERO ...................................................................................................................................... 169 |SUPPRIMER_TAGS ........................................................................................................................................... 169 |TABLE_VALEUR .............................................................................................................................................. 169 |TAILLE_EN_OCTETS ........................................................................................................................................ 170 |TEXTE_BACKEND ............................................................................................................................................ 170 |TEXTEBRUT ..................................................................................................................................................... 171 |TEXTE_SCRIPT ................................................................................................................................................ 171 |TRADUIRE_NOM_LANGUE ............................................................................................................................... 171 |UNIQUE ........................................................................................................................................................... 172 |URL_ABSOLUE ................................................................................................................................................ 173 |URL_ABSOLUE_CSS......................................................................................................................................... 173 |VIDER_ATTRIBUT ............................................................................................................................................ 174 |XOU ................................................................................................................................................................ 174 |>{A}............................................................................................................................................................... 175 |>={A}............................................................................................................................................................. 175 |<{A}............................................................................................................................................................... 175
6/186
|<={A}............................................................................................................................................................. 175 | !={A}............................................................................................................................................................. 176 |=={A}............................................................................................................................................................. 176 VARIABLES ET CONSTANTES DE PERSONNALISATION................................................................... 177 _CNIL_PERIODE .......................................................................................................................................... 177 _DIR_PLUGINS_AUTO ............................................................................................................................... 177 _DOC_MAX_SIZE ........................................................................................................................................ 178 _ID_WEBMESTRES ..................................................................................................................................... 179 _IMG_MAX_HEIGHT .................................................................................................................................. 179 _IMG_MAX_SIZE......................................................................................................................................... 180 _IMG_MAX_WIDTH.................................................................................................................................... 181 _MAX_ART_AFFICHES .............................................................................................................................. 181 _NOM_PERMANENTS_ACCESSIBLES .................................................................................................... 182 _NOM_PERMANENTS_INACCESSIBLES ................................................................................................ 182 _NOM_TEMPORAIRES_ACCESSIBLES ................................................................................................... 182 _NOM_TEMPORAIRES_INACCESSIBLES ............................................................................................... 183 _TRI_ARTICLES_RUBRIQUE .................................................................................................................... 183 $CONTROLER_DATES_RSS ............................................................................................................................... 183 $FILTRER_JAVASCRIPT .................................................................................................................................... 184 $NOMBRE_DE_LOGS ........................................................................................................................................ 185 $SPIP_HEADER_SILENCIEUX ............................................................................................................................ 185 $TAILLE_DES_LOGS ......................................................................................................................................... 186
7/186
Tout ce qui suit concerne dsormais le langage de description de la mise en page des squelettes dans SPIP ; si vous avez bien compris lexplication prcdente, vous savez que nous travaillons donc dans les fichiers .html . La prsente documentation est volontairement technique (il sagit ici de rfrences techniques) ; vous pouvez prfrer commencer par notre guide Pas pas, plus didactique, et revenir ensuite ici pour une documentation plus prcise.
Des boucles
La notion de base du langage de SPIP est la boucle. - La logique de la boucle Une base de donnes, classiquement, cest une liste dlments : ici, une liste des articles, une liste des rubriques, une liste des auteurs, etc. Pour fabriquer le site, on va donc extraire de cette liste certains de ses lments : - la base, on veut extraire un seul lment dune liste ; par exemple, afficher larticle dsir ; - mais il est frquent dextraire plusieurs lments dune liste ; par exemple, dans la page dune rubrique, on veut afficher tous les articles contenus dans cette rubrique, ainsi que toutes les sous-rubriques contenues dans cette rubrique ; - plus subtil : il arrive frquemment quil ny ait pas dlments satisfaisants tel ou tel endroit ; SPIP doit alors pouvoir grer lventualit de labsence de ces lments ; par exemple, le squelette de laffichage des rubriques demande laffichage de toutes les sousrubriques contenues dans une rubrique ; que faire, alors, sil ny a pas sous-rubriques dans cette rubrique spcifique ? Ces trois situations sont traites par la notion unique de boucle, qui permet la fois de grer laffichage dun seul lment, de plusieurs lments successifs, ou labsence dlments. Le systme de boucle permet, dans un code unique : - dindiquer quel endroit du code HTML on a besoin de quel type dlment ( tel endroit on veut rcuprer la liste des articles, tel endroit on veut inclure la liste des sousrubriques...) ; - de prvoir laffichage dun lment unique ; - dindiquer comment est affiche une liste de plusieurs lments ; - de dterminer ce quon affiche lorsquil ny a aucun lment correspondant. Analogie avec la programmation en PHP/mySQL Ceux qui ont dj programm des requtes mySQL en PHP savent que le traitement se droule en deux temps : - la construction de la syntaxe de la requte (qui consiste dire je veux rcuprer la liste des articles contenus dans telle rubrique... ) ; - lanalyse et laffichage des rsultats au travers dune boucle.
8/186
Ce sont ces deux vnements qui sont grs, dans SPIP, au travers des boucles.
Fin de la BOUCLE
Cette boucle, analyse par SPIP, peut donner trois rsultats diffrents. - Il ny a aucun article dans cette rubrique. Dans ce cas, bien videmment, aucun des lments afficher ici... (titre, sous-titre...) nest utilis. En revanche, si on la prvu, on peut afficher un message du genre Il ny a pas darticle . - Il y a un seul article dans cette rubrique. Dans ce cas, trs simplement, la page HTML est construite sur le modle de la boucle :
Titre de l'article Sous-titre Texte de l'article
- Il y a plusieurs articles dans cette rubrique. La description de la mise en page ( placer ici... ) va alors tre calcule successivement pour chacun des articles. Ce qui donne simplement :
Titre de l'article 1 Sous-titre de l'article 1 Texte de l'article 1 Titre de l'article 2
9/186
La suite de ce guide de rfrence se construira donc de la manire suivante : - syntaxe gnrale des boucles ; - syntaxe gnrale des balises de SPIP ; - et, ensuite, une page spcifique chaque type de boucles, indiquant quelles balises on peut y utiliser.
10/186
Syntaxe de base
La syntaxe simplifie dune boucle est la suivante : <BOUCLEn(TYPE){critre1}{critre2}...{critrex}> * Code HTML + balises SPIP </BOUCLEn> On a vu, dans lexplication sur les boucles et les balises, que le Code HTML + balises SPIP se rptait autant de fois que la boucle obtenait dlments tirs de la base de donnes (cest--dire une fois, plusieurs fois, ou zro fois). La ligne importante, ici, est : <BOUCLEn(TYPE){critre1}{critre2}...{critrex}> - Llment BOUCLE est lordre indiquant quil sagit dune boucle SPIP ; on ne peut donc pas le modifier ; dit autrement, toutes les boucles de SPIP commencent par linstruction BOUCLE. - Llment n est le nom ou le numro de la boucle, librement choisi par le webmestre pour chaque boucle quil utilise (attention : on prendra soin de nommer ses boucles avec uniquement des caractres alphanumriques non accentus et le tiret-bas underscore ; cest--dire des caractres de la classe [a-zA-Z0-9_]. On verra plus loin quil est possible (cest mme tout lintrt de la manuvre) dutiliser plusieurs boucles dans un mme squelette : les nommer est donc indispensable pour les identifier. Si vous dcidez de numroter vos boucles, la syntaxe devient par exemple (pour la boucle 5) :
<BOUCLE5...> ... </BOUCLE5>
Si vous dcidez de donner un nom vos boucles (cest gnralement plus pratique, votre code est plus lisible), il faut imprativement faire prcder ce nom par le symbole _ (que lon appelle habituellement underscore). Par exemple :
<BOUCLE_sousrubriques...> ... </BOUCLE_sousrubriques>
- Llment (TYPE) est primordial : il indique quel type dlments on veut rcuprer. La syntaxe est importante : le TYPE est indiqu entre parenthses (sans espaces), en majuscules, et ce TYPE doit correspondre obligatoirement lun des types prvus dans SPIP (quon trouvera dans la prsente documentation) : ARTICLES, RUBRIQUES, AUTEURS, BREVES, etc. Pour lexemple prcdent, on aurait donc :
<BOUCLE_sousrubriques(RUBRIQUES)...> ... </BOUCLE_sousrubriques>
11/186
- Les critres {critre1}{critre2}...{critrex} indiquent la fois selon quels critres on veut slectionner les lments de la base de donnes (afficher les sous-rubriques incluses dans cette rubrique, afficher les autres rubriques installes au mme niveau hirarchique que la prsente rubrique...), et la faon dont on va classer ou slectionner les lments (classer les articles selon leur date, selon leur titre... afficher uniquement les 3 premiers articles, afficher la moiti des articles...). Comme on peut combiner les critres, on peut trs aisment fabriquer des requtes trs puissantes, du genre afficher la liste des 5 articles les plus rcents crits par cet auteur . Les critres sont entre acolades ; ils peuvent tre spars les uns des autres par un espace. Exemple :
<BOUCLE_meme_auteur(ARTICLES) {id_auteur} {par date}{inverse} {0,5}> ... </BOUCLE_meme_auteur>
Les diffrents critres et leur syntaxe seront explicits par la suite, pour chaque type de boucle (certains critres fonctionnent pour tous les types de boucles, dautres sont spcifiques certaines boucles).
Syntaxe complte
Le syntaxe indique prcdemment peut tre complte par des lments conditionnels. En effet, la boucle prcdente affiche successivement les lments contenus lintrieur de la boucle. SPIP permet de plus dindiquer ce quon affiche avant et aprs la boucle au cas o elle contient un ou plusieurs rsultats, et ce quon affiche sil ny a aucun lment. Cela donne :
<Bn> * Code HTML optionnel avant <BOUCLEn(TYPE){critre1}{critre2}...{critrex}> * Code HTML + balises SPIP </BOUCLEn> * Code HTML optionnel aprs </Bn> * Code HTML alternatif <//Bn>
Le code optionnel avant (prcd de <Bn>) nest affich que si la boucle contient au moins une rponse. Il est affich avant les rsultats de la boucle. Le code optionnel aprs (termin par </Bn>) nest affich que si la boucle contient au moins une rponse. Il est affich aprs les rsultats de la boucle. Le code alternatif (termin par <//Bn>) est affich la place de la boucle (et donc galement la place des codes optionnels avant et aprs) si la boucle naffiche rien (soit parce que la base de donnes na fourni aucune rponse, soit parce que le code utilisant ces rponses dans la boucle naffiche rien).
12/186
13/186
Clairement, avec le mme code de squelette, si on appelle ladresse : spip.php?rubrique7, linterprtation de cette boucle deviendra Afficher les articles de la rubrique 7 . - Lenvironnement fourni par les autres boucles lintrieur dune boucle, lenvironnement est modifi par chaque lment de la boucle. En plaant des boucles les unes lintrieur des autres, on hrite ainsi denvironnements imbriqus les uns dans les autres. Ainsi, dans la structure suivante :
<BOUCLE_articles: afficher les articles de cette rubrique> Afficher le titre de l'article <BOUCLE_auteurs: afficher les auteurs de cet article> Nom de l'auteur </BOUCLE_auteurs> </BOUCLE_articles>
On doit comprendre que : - la premire boucle (BOUCLE_articles) affiche les articles en fonction de la rubrique, selon lenvironnement fournit par lURL (id_rubrique=15 par exemple) ; - dans cette boucle, on obtient un ou plusieurs articles ; - lintrieur de chacun de ces articles, on a un environnement diffrent (celui de larticle, cest--dire, par exemple, id_article=199) ; - la seconde boucle (BOUCLE_auteurs), qui est installe lintrieur de la premire boucle, dpend pour chacune de ses excutions successives (elle est excute pour chaque article de la premire boucle) : afficher les auteurs de cet article devient successivement afficher les auteurs du premier article , du deuxime article et ainsi de suite. On voit que, par limbrication de boucles successives, on obtient diffrentes boucles, incluses les unes dans les autres, qui dpendent du rsultat des boucles dans lesquelles elles sont situes. Et finalement, la toute premire boucle (celle qui contient toutes les autres) dpend dun paramtre fix dans ladresse de la page.
14/186
La premire boucle (BOUCLE_rubrique) dpend de la variable passe dans lURL de la page (id_rubrique=15 par exemple). Les boucles suivantes (BOUCLE_articles et BOUCLE_sous_rubriques) sont installes lintrieur de la premire boucle. Ainsi, sil nexiste pas de rubrique 15, la premire boucle ne donne aucun rsultat (le code alternatif Il ny a pas de rubrique... est affich), et donc les deux boucles incluses sont totalement ignores. Mais sil existe une rubrique 15, ces deux sous-boucles seront analyses. On constate galement que ces deux boucles se prsentent lune aprs lautre. Ainsi, elles fonctionnent en fonction de la premire boucle, mais indpendamment lune de lautre. Sil ny a pas darticles dans la rubrique 15 (BOUCLE_articles), on affichera tout de mme la liste des sous-rubriques de la rubrique 15 (BOUCLE_sous_rubriques) ; et inversement.
Compteurs
Deux balises permettent de compter les rsultats dans les boucles.
- #TOTAL_BOUCLE retourne le nombre total de rsultats affichs par la boucle. On peut lutiliser dans la boucle, dans ses parties optionnelles avant et aprs ou mme dans la partie alternative aprs la boucle. Par exemple, pour afficher le nombre de documents associs un article :
<BOUCLE_art(ARTICLES){id_article}> <BOUCLE_doc(DOCUMENTS) {id_article}> </BOUCLE_doc> [il y a (#TOTAL_BOUCLE) document(s).] <//B_doc> </BOUCLE_art>
Attention : si la partie centrale de la boucle ne retourne rien (cest le cas avec la boucle <BOUCLE_doc> ci-dessus, qui ne sert qu compter le nombre de rsultats), le #TOTAL_BOUCLE ne pourra tre affich que dans la partie alternative aprs de la boucle (<//B_doc>).
- #COMPTEUR_BOUCLE retourne le numro de litration actuelle de la boucle. On peut par exemple lutiliser pour numroter des rsultats :
<BOUCLE_art(ARTICLES) {par date} {inverse} {0,10}> #COMPTEUR_BOUCLE - #TITRE<br> </BOUCLE_art>
15/186
2010
Chaque type de boucle permet de slectionner des lments de la base de donnes de SPIP : des articles, des rubriques, des brves, etc. Chacun de ces lments est lui-mme constitu dlments prcis : un titre, une date, un texte, etc. lintrieur dune boucle, il faut donc pouvoir indiquer quel endroit du code HTML on place tel ou tel de ces lments prcis. Pour cela, on va utiliser des balises SPIP.
Fonctionnement simplifi
Une balise SPIP se place lintrieur dune boucle (puisquil faut savoir si lon veut rcuprer un lment dun article, dune rubrique, etc.). Le nom de ces balises est gnralement simple, et nous fournirons, pour chaque type de boucle, la liste complte des balises que lon peut utiliser. Une balise est toujours prcde du signe dise (#). Par exemple, affichons une liste de noms darticles :
<BOUCLE_articles(ARTICLES){id_rubrique}> #TITRE<br /> </BOUCLE_articles>
Lorsque la boucle sera excute, la balise SPIP #TITRE sera chaque fois remplace par le titre de larticle en question :
Titre de l'article 1<br /> Titre de l'article 2<br /> ... Titre du dernier article<br />
Rien de bien compliqu : on se contente dindiquer lintrieur du code HTML le nom de llment dsir, et celui-ci est remplac par le contenu tir de la base de donnes.
Codes optionnels
Dans la pratique, un lment de contenu est souvent accompagn de code HTML qui ne doit safficher que si cet lment existe, faute de quoi la mise en page devient imprcise. Par exemple : il existe une balise SPIP pour indiquer le surtitre dun article. Or de nombreux articles nont pas de surtitre. Compltons lexemple prcdent :
<BOUCLE_articles(ARTICLES){id_rubrique}> #SURTITRE<br /> #TITRE<br /> </BOUCLE_articles>
16/186
qui, classiquement, nous donne une liste darticles, avec dsormais lindication du titre et du surtitre de chaque article. Mais que se passe-t-il si larticle na pas de surtitre ? On obtient le code : <br /> , cest--dire une ligne blanche (un retour chariot). Ce que nous devons faire : nafficher le code <br /> que si un surtitre existe pour larticle. La syntaxe de la balise SPIP devient alors :
[ texte optionnel avant (#BALISE) texte optionnel aprs ]
La balise qui dtermine loption est place entre parenthses, et lensemble du texte conditionnel entre crochets. Le texte optionnel avant et le texte optionnel aprs ne saffichent que sil existe, dans la base de donnes, un lment correspondant cette balise. Notre exemple devient :
<BOUCLE_articles(ARTICLES){id_rubrique}> [(#SURTITRE)<br />] #TITRE<br /> </BOUCLE_articles>
On obtient alors le rsultat recherch : sil existe un surtitre pour cet article, il est affich et suivi du <br /> ; sil nexiste pas de surtitre, mme le <br /> est occult.
attention : cet affichage conditionnel ne fonctionne pas avec les balises dynamiques (par exemple #URL_LOGOUT).
Utilisations avances On peut imbriquer des balises tendues les unes dans les autres. Ainsi, si dans notre exemple on voulait nafficher le logo de larticle que si le surtitre est dfini, on pourrait crire :
<BOUCLE_articles(ARTICLES){id_rubrique}> [[(#LOGO_ARTICLE)<br />](#SURTITRE)<br />] </BOUCLE_articles>
Note : On ne peut jamais mettre une boucle dans le code optionnel dune balise. Mais si on veut faire nafficher une boucle quen fonction dune certaine balise, on peut utiliser <INCLURE{...}> lintrieur dun code optionnel.
17/186
la balise #TITRE dsigne le titre dun article. Ainsi, si on voulait afficher le titre de la rubrique lintrieur de la boucle _articles, on ne pourrait pas utiliser #TITRE. On peut appeler une balise homonyme de lune des boucles englobantes en explicitant le nom de la boucle laquelle la balise appartient. Il faut alors spcifier le nom de la boucle entre le # et le nom de la balise. On crira alors la balise #BALISE de la boucle _boucle1 de la faon suivante : #_boucle:BALISE. Par exemple :
<BOUCLE_rubriques(RUBRIQUES){id_rubrique}> <BOUCLE_articles(ARTICLES){id_rubrique}> #_rubriques:TITRE > #TITRE </BOUCLE_articles> </BOUCLE_rubriques>
affichera le titre de la rubrique, puis le titre de larticle : la balise #TITRE pour la boucle _rubriques devient #_rubriques:TITRE pour ne pas tre confondue avec la balise #TITRE de la boucle _articles.
La syntaxe est donc de faire suivre le nom de la balise, entre les parenthses, par les filtres succesifs, spars par une barre verticale (nomme habituellement pipe). - attention : lapplication de filtres ne fonctionne pas sur les balises dynamiques. Voici quelques filtres fournis par SPIP : - majuscules, passe le texte en majuscules (plus puissant que la fonction de PHP correspondante, qui ne fonctionne pas correctement avec les caractres accentus) ; par exemple :
[(#TITRE|majuscules)]
- justifier, affiche le texte en justification totale (cest--dire <P align=justify>) ; par exemple :
[(#TEXTE|justifier)]
La prsente documentation consacre un article aux diffrents filtres livrs avec SPIP.
1
Prcision : noubliez pas le cas chant, lunderscore _ initial dans le nom de la boucle si celui ci ne commence pas par un numro.
18/186
#ENV et #EXPOSER
19/186
La boucle ARTICLES
Mai 2001 maj : mars 2010
Les lments contenus dans une telle boucle sont des articles.
20/186
- {traduction} slectionne les traductions de larticle courant en diffrentes langues. - {origine_traduction} slectionne les articles qui servent de base des versions traduites (les articles "originaux"). Voir sur programmer.spip.org pour des exemples - Les critres {date} (ou {date=...} ou {date==...}) permettent de slectionner un article en fonction de la date passe dans lURL. - {recherche} slectionne les articles correspondant aux mots indiqus dans linterface de recherche (moteur de recherche incorpor SPIP). Le critre {tout} permet de slectionner les donnes dune table comme si aucun autre critre restrictif ntait appliqu. Ainsi son utilisation relve-telle plus de laide-mmoire pour le webmestre puisque lon obtient le mme rsultat en nindiquant aucun critre.
Le statut de larticle
Comme toutes les boucles de SPIP, une boucle ARTICLES ne retourne que des articles publis ; dans le cas o le site est rgl de manire ne pas publier les articles post-dats , un autre test est fait sur la date de larticle. Il est possible de dbrayer ce systme et dafficher les articles en cours de rdaction , proposs la publication ou refuss grce au critre {statut} :
slectionne les articles en fonction de leur statut de publication : {statut=prepa} slectionne les articles en cours de rdaction dans lespace priv ; {statut=prop} slectionne les articles proposs la publication ; {statut=publie} slectionne les articles publis sur le site, y compris les articles post-dats ; {statut=refuse} slectionne les articles qui ont t refuss la publication ; {statut=poubelle} slectionne les articles qui ont t mis la poubelle.
{statut IN prop,prepa,publie,refuse,poubelle}
21/186
- #ID_ARTICLE affiche lidentifiant unique de larticle. Utile pour fabriquer des liens hypertextes non prvus (par exemple vers une page Afficher au format impression ). - #SURTITRE affiche le surtitre. - #TITRE affiche le titre de larticle. - #SOUSTITRE affiche le soustitre. - #DESCRIPTIF affiche le descriptif. - #CHAPO affiche le texte dintroduction (chapeau). - #TEXTE affiche le texte principal de larticle. - #PS affiche le post-scriptum. - Les balises de dates : #DATE, #DATE_REDAC, #DATE_MODIF sont explicites dans la documentation sur La gestion des dates . - #ID_RUBRIQUE affiche lidentifiant de la rubrique dont dpend larticle. - #ID_SECTEUR affiche lidentifiant du secteur dont dpend larticle (le secteur tant la rubrique parente situe la racine du site). - #NOM_SITE et #URL_SITE affichent le nom et lurl du lien hypertexte de larticle (si vous avez activ cette option). - #VISITES affiche le nombre total de visites sur cet article. - #POPULARITE affiche le pourcentage de popularit de cet article ; voir la documentation La popularit des articles . - #LANG affiche la langue de cet article. Les balises calcules par SPIP Les lments suivants sont calculs par SPIP (Ils ne peuvent pas tre utiliss comme critre de classement). - #URL_ARTICLE affiche lURL de la page de larticle. - #NOTES affiche les notes de bas de page (calcules partir de lanalyse du texte). - #INTRODUCTION affiche le descriptif de larticle, sinon affiche les 600 premiers caractres du dbut de larticle (chapeau puis texte). - #LESAUTEURS affiche les auteurs de cet article, avec lien vers leur propre page publique (afin de pouvoir directement leur crire ou de consulter la liste des articles quils ont publi). Cela vite de crer une boucle AUTEURS pour obtenir le mme rsultat.
22/186
- #PETITION affiche le texte de la ptition si elle existe. Si elle existe mais que le texte est vide, retourne un espace (une chane non vide sans incidence dans une page html). - #FORMULAIRE_SIGNATURE fabrique et affiche le formulaire permettant de signer la ptition associe cet article. - #FORMULAIRE_FORUM fabrique et affiche le formulaire permettant de poster un message rpondant cet article. Pour en savoir plus, voir aussi Les formulaires . - #PARAMETRES_FORUM fabrique et affiche la liste des variables exploites par le formulaire permettant de rpondre cet article. Par exemple :
[<a href="spip.php?page=forum&(#PARAMETRES_FORUM)">Rpondre cet article</a>]
On peut lui passer un paramtre spcifiant ladresse de retour aprs avoir post le message. Par exemple : <a href="spip.php?page=forum&(#PARAMETRES_FORUM{#SELF})"> Rpondre cet article</a> renverra le visiteur sur la page actuelle une fois que le message a t valid. Les logos - #LOGO_ARTICLE affiche le logo de larticle, ventuellement avec la gestion du survol. - #LOGO_RUBRIQUE affiche le logo de la rubrique de larticle. - #LOGO_ARTICLE_RUBRIQUE affiche le logo de larticle, ventuellement remplac par le logo de la rubrique sil nexiste pas de logo spcifique larticle. Les logos sinstallent de la manire suivante : [(#LOGO_ARTICLE|alignement|adresse)] Lalignement peut tre left ou right. Ladresse est lURL de destination du lien de ce logo (par exemple #URL_ARTICLE). Si lon nindique pas dadresse, le bouton nest pas cliquable. Si lon veut rcuprer directement le nom du fichier du logo (alors que les balises prcdentes fabriquent le code HTML complet pour insrer limage dans la page), par exemple pour afficher une image en fond de tableau, on utilisera le filtre |fichier comme suit :
[(#LOGO_ARTICLE|fichier)]
Par ailleurs deux balises permettent de rcuprer un seul des deux logos : - #LOGO_ARTICLE_NORMAL affiche le logo sans survol ; - #LOGO_ARTICLE_SURVOL affiche le logo de survol.
23/186
La boucle RUBRIQUES
Mai 2001 maj : aot
2010
Remarque. Une boucle RUBRIQUES naffiche que des rubriques actives , cest--dire contenant des articles publis, des documents joints, des sites publis ou des sousrubriques elles-mmes actives. De cette faon, on vite de se trouver dans des rubriques culs de sac noffrant aucun lment de navigation. Il est possible de forcer laffichage des rubriques vides (voir ci-dessous, le critre {tout}).
rcuprent les rubriques lies au mot dont le numro est id_mot ou dont le titre est titre_mot ; {id_groupe}, {type_mot=yyyy} rcuprent les rubriques lies des mots du groupe id_groupe, ou du groupe dont le titre est type_mot.
{id_mot}, {titre_mot=xxx}
- {recherche} slectionne les rubriques correspondant aux mots indiqus dans linterface de recherche (moteur de recherche incorpor SPIP). Voir la page consacre au moteur de recherche. - {lang} slectionne les rubriques de la langue demande dans ladresse de la page.
24/186
- {tout} slectionne toutes les rubriques, cest--dire : les rubriques vides en plus des rubriques contenant des lments publis. On rservera ce choix des besoins trs spcifiques ; en effet, par dfaut, SPIP naffiche pas sur le site public les rubriques qui ne contiennent aucun lment actif, afin de garantir que le site ne propose pas de culs de sac (navigation vers des pages ne proposant aucun contenu).
25/186
- #DATE affiche la date de la dernire publication effectue dans la rubrique et/ou ses sousrubriques (articles, brves...). - #FORMULAIRE_FORUM fabrique et affiche le formulaire permettant de poster un message rpondant cette rubrique. Pour en savoir plus, voir aussi Les formulaires . - #PARAMETRES_FORUM fabrique la liste des variables exploites par linterface du formulaire permettant de rpondre cette rubrique. Par exemple :
[<a href="spip.php?page=forum&(#PARAMETRES_FORUM)"> Rpondre cette rubrique</a>]
On peut lui passer un paramtre spcifiant ladresse de retour aprs avoir post le message. Par exemple :
<a href="spip.php?page=forum&(#PARAMETRES_FORUM{#SELF})">Rpondre cette rubrique</a>
renverra le visiteur sur la page actuelle une fois que le message a t valid. - #FORMULAIRE_SITE fabrique et affiche un formulaire permettant aux visiteurs du site de proposer des rfrencements de sites. Ces sites apparatront comme proposs dans lespace priv, en attendant une validation par les administrateurs. Ce formulaire ne saffiche que si vous avez activ loption Grer un annuaire de sites dans la Configuration sur site dans lespace priv, et si vous avez rgl Qui peut proposer des sites rfrencs sur les visiteurs du site public . Le logo - #LOGO_RUBRIQUE le logo de la rubrique, ventuellement avec la gestion du survol. Sil ny a pas de logo pour cette rubrique, SPIP va automatiquement chercher sil existe un logo pour la rubrique dont elle dpend, et ainsi de suite de manire rcursive. Le logo sinstalle de la manire suivante :
[(#LOGO_RUBRIQUE|alignement|adresse)]
O :
alignement est lalignement du logo (left ou right) adresse est une url si on veut ajouter un lien directement sur le logo (par exemple #URL_RUBRIQUE).
#LOGO_RUBRIQUE_NORMAL
affiche le logo sans survol ; #LOGO_RUBRIQUE_SURVOL affiche le logo de survol : ces deux balises permettent par exemple, quand on est dans une rubrique, de grer un logo avec survol pour les liens vers les autres rubriques, et de laisser le logo de survol seul dans la rubrique active.
26/186
Depuis SPIP 2.1 les filtres de logos ont la mme syntaxe que tous les autres. Un seul pipe suffit :
[(#LOGO_XXX|filtre)]
Mais : - #LOGO_XXX** renvoie le fichier - #LOGO_XXX{top/left/right/center/bottom} gnre un alignement - #LOGO_XXX{url} gnre un logo qui pointe vers lurl.
27/186
La boucle BREVES
Mai 2001 maj : aot
2010
La boucle BREVES, comme son nom lindique, retourne une liste de brves.
<BOUCLEn(BREVES){critres...}>
28/186
Les balises suivantes correspondent aux lments directement tirs de la base de donnes. Vous pouvez les utiliser galement en tant que critre de classement (gnralement : {par titre}). - #ID_BREVE affiche lidentifiant unique de la brve. - #TITRE affiche le titre de la brve. - #DATE affiche la date de publication de la brve. - #TEXTE affiche le texte de la brve. - #NOM_SITE affiche le nom du site indiqu en rfrences. - #URL_SITE affiche ladresse (URL) du site indiqu en rfrences. - #ID_RUBRIQUE affiche lidentifiant de la rubrique dont dpend cette brve. - #LANG affiche la langue de cette brve. Par dfaut, la langue dune brve est la langue du secteur dans lequel elle se trouve. Les balises calcules par SPIP Les lments suivants sont calculs par SPIP (Ils ne peuvent pas tre utiliss comme critre de classement). - #NOTES affiche les notes de bas de page (calcules partir de lanalyse du texte). - #INTRODUCTION affiche les 600 premiers caractres du texte, les enrichissements typographiques (gras, italique) sont supprims. - #URL_BREVE affiche lURL de la page de la brve. - #FORMULAIRE_FORUM fabrique et affiche le formulaire permettant de poster un message rpondant cette brve. Pour en savoir plus, voir aussi Les formulaires . - #PARAMETRES_FORUM fabrique la liste des variables exploites par linterface du formulaire permettant de rpondre cette brve : [<a href="spip.php?page=forum&(#PARAMETRES_FORUM)"> Rpondre cette brve</a>] On peut lui passer un paramtre spcifiant ladresse de retour aprs avoir post le message. Par exemple : <a
href="spip.php?page=forum&(#PARAMETRES_FORUM{#SELF})">Rpondre cette brve</a> renverra le visiteur sur la page actuelle une fois que le message a t valid.
Le logo - #LOGO_BREVE affiche le logo de la brve, ventuellement avec la gestion du survol. Le logo sinstalle de la manire suivante : [(#LOGO_BREVE|alignement|adresse)] Manuel de rfrence des boucles et balises 29/186
- #LOGO_BREVE_RUBRIQUE affiche, si il existe, le logo de la brve ; si ce logo na pas t attribu, SPIP affiche le logo de la rubrique. Depuis SPIP 2.1 les filtres de logos ont la mme syntaxe que tous les autres. Un seul pipe suffit :
[(#LOGO_XXX|filtre)]
Mais : - #LOGO_XXX** renvoie le fichier - #LOGO_XXX{top/left/right/center/bottom} gnre un alignement - #LOGO_XXX{url} gnre un logo qui pointe vers lurl. .
30/186
La boucle AUTEURS
Mai 2001 maj : Octobre 2009
La boucle AUTEURS, comme son nom lindique, retourne une liste dauteurs.
<BOUCLEn(AUTEURS){critres...}>
Si lon ne prcise pas de critre de slection, la boucle retournera tous les auteurs ayant un article publi.
31/186
- #NOM_SITE affiche le nom de son site Web. - #URL_SITE affiche ladresse (URL) de son site. - #PGP affiche sa cl publique pour PGP. - #LANG affiche la langue de lauteur (cest--dire celle quil a choisie dans lespace priv). Les balises calcules par SPIP - #FORMULAIRE_ECRIRE_AUTEUR fabrique et affiche un formulaire permettant dcrire lauteur. Il faut que le serveur hbergeant le site accepte denvoyer des mails. Ce systme permet de ne pas divulguer ladresse email de lauteur. NB : pour que le formulaire soit affich il faut que lauteur ait renseign le champ email de sa fiche auteur. - #NOTES affiche les notes de bas de page (calcules partir de lanalyse du texte). - #URL_AUTEUR affiche ladresse de la page spip.php?auteurxxx. Le logo - #LOGO_AUTEUR le logo de lauteur, ventuellement avec la gestion du survol. Le logo sinstalle de la manire suivante : [(#LOGO_AUTEUR|alignement|adresse)] Les variantes #LOGO_AUTEUR_NORMAL et #LOGO_AUTEUR_SURVOL permettent un affichage plus fin de ces deux variantes du logo.
32/186
La boucle FORUMS
Mai 2001 maj : Dcembre 2007
33/186
- Les messages des forums peuvent tre lies des mots-cls. Les critres de mots-cls peuvent donc tre dsormais utiliss dans les boucles (FORUMS) :
{id_mot}, {titre_mot=xxx} rcuprent les messages lis au mot dont le numro est id_mot ou dont le titre est titre_mot ; {id_groupe}, {type_mot=yyyy} rcuprent les messages lis des mots du groupe id_groupe, ou du groupe dont le titre est type_mot.
34/186
- #EMAIL est ladresse email de lauteur, sous forme directe denvoi (le mailto: est intgr). Elle sutilise donc ainsi [(#EMAIL)] pour avoir la fois ladresse mail apparente et, directement, le lien cliquer sur cette adresse. - #IP est ladresse IP de lauteur du message au moment de lenvoi de sa contribution. - Les balises calcules par SPIP - #FORMULAIRE_FORUM fabrique linterface permettant de poster un message de rponse. Pour en savoir plus, voir aussi Les formulaires . - #PARAMETRES_FORUM fabrique la liste des variables exploites par linterface du formulaire permettant de rpondre ce message. Par exemple : [<a href="spip.php?page=forum&(#PARAMETRES_FORUM)"> Rpondre ce message</a>] On peut lui passer un paramtre spcifiant ladresse de retour aprs avoir post le message. Par exemple : <a
href="spip.php?page=forum&(#PARAMETRES_FORUM{#SELF})">Rpondre ce message</a> renverra le visiteur sur la page actuelle une fois que le message a t valid.
35/186
La boucle MOTS
Mai 2001 maj : aot
2010
36/186
- #TITRE affiche le titre (le mot-cl lui-mme). - #DESCRIPTIF affiche le descriptif du mot. - #TEXTE affiche le texte associ au mot. - #TYPE affiche la catgorie dans laquelle est install ce mot-cl (par exemple, le mot-cl France pourrait tre associ la catgorie Pays ). - #LOGO_MOT affiche le logo associ au mot-cl. Depuis SPIP 2.1 les filtres de logos ont la mme syntaxe que tous les autres. Un seul pipe suffit :
[(#LOGO_XXX|filtre)]
Mais : - #LOGO_XXX** renvoie le fichier - #LOGO_XXX{top/left/right/center/bottom} gnre un alignement - #LOGO_XXX{url} gnre un logo qui pointe vers lurl.
La boucle (GROUPES_MOTS)
Dune utilisation marginale, la boucle GROUPES_MOTS mrite dtre cite ici : elle permet, si vous avez plusieurs groupes de mots-cls, de slectionner ces groupes, et dorganiser par exemple une page rcapitulative de tous les mots-cls classs par groupe, puis par ordre alphabtique lintrieur de chaque groupe, par exemple via le code suivant :
<BOUCLE_groupes(GROUPES_MOTS){par titre}> <h1>#TITRE</H1> <BOUCLE_mots(MOTS){id_groupe}{par titre}{" - "}> #TITRE </BOUCLE_mots> </BOUCLE_groupes>
Les balises et critres associs cette boucle sont : - #ID_GROUPE, lidentifiant du groupe de mots [galement disponible dans la boucle(MOTS)] ; - #TITRE, le titre du groupe [ lintrieur de la boucle(MOTS), vous pouvez utiliser #TYPE pour afficher cette valeur].
37/186
La boucle DOCUMENTS
Juin 2002 maj : Mai 2009
La boucle DOCUMENTS retourne une liste de documents multimdia associs ( un article, une rubrique, ventuellement les images incluses dans une brve).
<BOUCLEn(DOCUMENTS){critres...}>
Cette boucle gre non seulement les documents joints non installs dans le texte dun article, mais peut aussi accder aux images (depuis la version 1.4, les images sont gres, au niveau du programme, comme un genre spcifique de documents), aux vignettes de prvisualisation et aux documents dj insrs dans le corps de larticle. Pour mmoire, on utilisera donc le plus frquemment (utilisation courante) la boucle DOCUMENTS avec, au minimum, les critres suivants (explications ci-aprs) : <BOUCLEn(DOCUMENTS){mode=document}{doublons}>
<BOUCLE_portfolio(DOCUMENTS){id_article}{extension==jpg|png|gif} {mode=document}{doublons}>
Cette BOUCLE_portfolio rcupre les documents joints un article, non dj affichs dans le texte de larticle, et donc les extensions des fichiers peuvent tre jpg , png ou gif . - {distant} permet de slectionner les documents selon quils soient distant ou non. Cest dire stocks sur un autre site ou tlchargs dans lespace web du site. On prcisera {distant=oui} et {distant=non} respectivement. - {doublons} prend ici une importance particulire : elle permet non seulement de ne pas rafficher des documents dj affichs par une autre boucle, mais galement de ne pas rafficher les documents dj intgrs lintrieur dun article. Si lon oublie ce critre, on affichera tous les documents associs un article, y compris ceux qui auraient dj t affichs lintrieur du texte3 [1].
Les balises
- #LOGO_DOCUMENT affiche le logo (vignette de prvisualisation) associ au document ; si une vignette personnalise na pas t installe manuellement par lauteur de larticle, SPIP utilise une vignette standard selon le type du fichier. - #URL_DOCUMENT est lURL du fichier multimdia. Pour afficher une vignette cliquable pointant vers le document multimdia, on utilisera donc le code suivant : [(#LOGO_DOCUMENT|#URL_DOCUMENT)] - #TITRE affiche le titre du document. - #DESCRIPTIF affiche le descriptif du document. - #FICHIER affiche le nom de fichier du document, plus prcisment son URL relative. Pour obtenir le nom de fichier seul, on passera ce filtre : [(#FICHIER|basename)]. Une utilisation intressante de cette balise est combine avec le filtre image_reduire, dans le cadre dun portfolio pour afficher une rduction de limage plutt que de son logo ; par exemple en utilisant : [<a href="#URL_DOCUMENT">(#FICHIER|image_reduire{500}) </a>] - #TYPE_DOCUMENT affiche le type (fichier Quicktime, fichier Real...) du document multimdia. - #EXTENSION comme son nom lindique, affiche lextension du format du fichier, par exemple : pdf, jpeg, move, ra. - #TAILLE affiche la taille du fichier multimdia. Ce chiffre est fourni en octets. Pour de gros fichiers, cette valeur devient rapidement inutilisable ; on pourra donc lui appliquer le filtre
Si on utilise un critre avec un nom ({doublons unnom}), celui ci nexclura pas les documents intgrs dans le texte de larticle.
39/186
taille_en_octets,
mgaoctets : [(#TAILLE|taille_en_octets)] - #LARGEUR et #HAUTEUR fournissent les dimensions en pixels. - #MIME_TYPE affiche le type MIME du fichier par exemple : image/jpeg , cf. Type de mdia internet. - #DATE est la date de mise en ligne du document. (Modifiable aprs lajout). Voir La gestion des dates pour des dtails sur lutilisation du champ #DATE. - #ID_DOCUMENT affiche le numro du document. - #DISTANT est une balise qui affiche oui ou non selon que le document est distant (rfrenc par une url) ou pas. Exemple :
#URL_DOCUMENT[(#DISTANT|=={oui}|oui)|parametre_url{nom,valeur}]
- #EMBED_DOCUMENT est une balise permettant dincruster le document dans la page produite plutt que de le rfrencer. Cette balise est aujourdhui dprcie, tant un cas particulier des modles (voir Utiliser les modles) qui permettent de moduler cette incrustation de manire plus souple et plus efficace. Cette balise peut tre complte de paramtres propres aux formats utiliss, par exemple : [(#EMBED_DOCUMENT|autostart=true)] mais on lui prfrera ce en quoi elle se traduit automatiquement prsent : #MODELE{emb, autostart=true}
40/186
Si lon a syndiqu des sites rfrencs, cette boucle sutilise, naturellement, associe une boucle SYNDIC_ARTICLES qui permet de rcuprer la liste des articles de ces sites.
41/186
- #NOM_SITE affiche le nom du site rfrenc. - #URL_SITE affiche ladresse (URL) du site rfrenc. - #DESCRIPTIF affiche le descriptif du site rfrenc. - #ID_RUBRIQUE affiche le numro de la rubrique contenant ce site. - #ID_SECTEUR affiche le numro de la rubrique-secteur ( la racine du site) contenant ce site. Autres balises - #LOGO_SITE affiche le logo attribu au site. - #URL_SYNDIC affiche ladresse (URL) du fichier de syndication de ce site. - #FORMULAIRE_FORUM fabrique et affiche le formulaire permettant de poster un message de forum propos de ce site. Pour en savoir plus, voir aussi Les formulaires . - #PARAMETRES_FORUM fabrique la liste des variables exploites par linterface du formulaire permettant de poster un message de forum propos de ce site. Par exemple : [<a
href="spip.php?page=forum&(#PARAMETRES_FORUM)">Rpondre ce forum</a>]
On peut lui passer un paramtre spcifiant ladresse de retour aprs avoir post le message. Par exemple :
<a href="spip.php?page=forum&(#PARAMETRES_FORUM{#SELF})">Rpondre ce message</a>
renverra le visiteur sur la page actuelle une fois que le message a t valid.
42/186
La boucle SYNDIC_ARTICLES
Mai 2001 maj : Janvier 2007
La boucle SYNDIC_ARTICLES retourne une liste des articles des sites syndiqus.
<BOUCLEn(SYNDIC_ARTICLES){critres...}>
On peut soit lutiliser lintrieur dune boucle SITES (cette dernire rcupre une liste de sites rfrencs, ensuite on rcupre chaque article de ces sites), soit directement lintrieur dune rubrique (on rcupre directement tous les articles syndiqus dans une rubrique, en court-circuitant le passage par la liste des sites). La boucle SITES (ou SYNDICATION) naffiche pas uniquement des sites syndiqus, mais plus gnralement des sites rfrencs (la syndication de certains sites rfrencs tant une option). On pourra donc, pour obtenir une prsentation graphique plus prcise, utiliser une boucle SYNDIC_ARTICLES uniquement lintrieur dune boucle SITES utilisant le critre {syndication=oui}.
- #TITRE affiche le titre de larticle. Remarque : il est prfrable dutiliser ici le titre brut de larticle syndiqu - via le code [(#TITRE*)] -, pour viter le moteur typographique. En effet les titres sont censs tre dj typographiquement corrects dans les backends, et on ne souhaite pas passer la correction typographique sur des titres en anglais ou sur des titres comprenant des expressions du genre Les fichiers ~/.tcshrc . - #URL_ARTICLE affiche ladresse (URL) de larticle syndiqu (sur son site original). - #DATE affiche la date de publication de cet article. - #LESAUTEURS affiche les auteurs de larticle syndiqu. - #DESCRIPTIF affiche le descriptif de larticle syndiqu. - #NOM_SITE affiche le nom du site syndiqu contenant cet article. - #URL_SITE affiche ladresse (URL) du site
44/186
La boucle SIGNATURES
Mai 2001 maj : Octobre 2008
- #EMAIL affiche ladresse email de lauteur. - #NOM_SITE affiche le nom du site Web indiqu par lauteur. - #URL_SITE affiche ladresse (URL) de ce site Web.
46/186
La boucle HIERARCHIE
Mai 2001 maj : Aot 2008
La boucle HIERARCHIE retourne la liste des RUBRIQUES qui mnent de la racine du site la rubrique ou larticle en cours.
<BOUCLEn(HIERARCHIE){critres...}>
47/186
2010
Certains critres sappliquent (presque) tous les types de boucles. Ce sont des critres destins restreindre le nombre de rsultats affichs ou indiquer lordre daffichage. On peut sans difficult combiner plusieurs de ces critres de slection.
Cas particulier : {par hasard} permet dobtenir une liste prsente dans un ordre alatoire. Inverser le classement. De plus, {inverse} provoque laffichage du classement invers. Par exemple {par date} commence par les articles les plus anciens ; avec {par date}{inverse} on commence la liste avec les articles les plus rcents. Le critre inverse peut prendre en paramtre nimporte quelle balise pour varier dynamiquement le sens du tri. Par exemple, il est possible dcrire : ce qui permet de choisir la colonne de tri et le sens du tri par lurl (&senstri=1 ou &senstri=0) Classer par numro. Lorsquon ralise le classement selon un lment de texte (par exemple le titre), le classement est ralis par ordre alphabtique. Cependant, pour forcer un ordre daffichage, on peut indiquer un numro devant le titre, par exemple : 1. Mon premier article , 2. Deuxime article , 3. Troisime... , etc ; avec un classement alphabtique, le classement de ces lments donnerait la srie 1, 10, 11, 2, 3... . Pour rtablir le classement selon les numros, on peut utiliser le critre :
{par num critre} <BOUCLE_exemple(ARTICLES){par #ENV{tri}}{inverse #ENV{senstri}}>,
Par exemple :
<BOUCLE_articles(ARTICLES){id_rubrique}{par date}{inverse}>
affiche les articles dune rubrique classs selon lordre chronologique invers (les plus rcents au dbut, les plus anciens la fin), et :
<BOUCLE_articles(ARTICLES){id_rubrique}{par titre}>
les affiche selon lordre du numro de leur titre (remarque : loption {par num titre} ne fonctionne pas pour les versions de MySQL antrieures la version 3.23).
48/186
Dans le cadre dun site multilingue le critre {par multi critre} permet de trier par ordre alphabtique dans chaque langue. Sans lajout de "multi" la boucle renvoie le mme classement pour chaque langue. Classer selon plusieurs critres On peut classer selon plusieurs critres : {par critre1, critre2}. On indique ainsi des ordres de classement conscutifs. Les rsultats seront dabord tris selon le critre1, puis le critre2 pour les rsultats ayant le mme critre1. On peut spcifier autant de critres que ncessaire. Par exemple {par date, titre} triera les rsultats par date puis les rsultats ayant la mme date seront tris par titre. On peut spcifier plusieurs critres {par ...} pour une boucle pour arriver au mme rsultat. Par exemple : {par date} {par titre} est quivalent lexemple prcdent. Remarque : Quand on utilise plusieurs critres de tri, le critre {inverse} ne sapplique quau critre de tri plac juste avant. La notation {!par ...} inverse un critre de tri en particulier. Par exemple : {!par date} {par num titre} tri par date dcroissantes puis par numros croissants dans le titre pour les rsultats ayant la mme date.
Comparaisons, galits
Comparaison avec une valeur fixe (on peut utiliser > , < , = , >= , <= . Tous les critres de classement (tels que tirs de la base de donnes) peuvent galement tre utiliss pour limiter le nombre de rsultats.
{critre < valeur}
La valeur droite de loprateur peut tre : - Une valeur constante fixe dans le squelette. Par exemple :
<BOUCLE_art(ARTICLES){id_article=5}>
affiche larticle dont le numro est 5 (utile pour mettre en vedette un article prcis sur la page daccueil).
<BOUCLE_art(ARTICLES){id_secteur=2}>
affiche les articles du secteur numro 2. - Une balise disponible dans le contexte de la boucle. Par exemple :
<BOUCLE_art(ARTICLES){id_article=5}> <BOUCLE_titre(ARTICLES) {titre=#TITRE}> ... </BOUCLE_titre> </BOUCLE_art>
sert trouver les articles qui ont le mme titre que larticle 5.
49/186
Attention : On ne peut utiliser qu'une balise simple. Il nest pas permis de la filtrer ou de mettre du code optionnel. Spcialement, si on veut utiliser la balise #ENV ou tout autre balise prenant des paramtres , on doit utiliser la notation : {titre = #ENV{titre}} et pas : {titre = [(#ENV{titre})]}. Expressions rgulires : Trs puissant (mais nettement plus complexe manipuler), le terme de comparaison == introduit une comparaison selon une expression rgulire. Par exemple :
<BOUCLE_art(ARTICLES){titre==^[aA]}>
slectionne les articles dont le titre commence par a ou A . Ngation : On peut utiliser la notation {xxx != yyy} et {xxx !== yyy}, le ! correspondant la ngation (oprateur logique NOT).
<BOUCLE_art(ARTICLES){id_secteur != 2}>
affiche les articles du secteur 2, lexclusion de ceux de la rubrique 3, et publis depuis moins de 30 jours. Astuce. Le critre age est trs pratique pour afficher les articles ou les brves dont la date est situe dans le futur , avec des valeurs ngatives ( condition davoir slectionn, dans la Configuration prcise du site, loption Publier les articles post-dats ). Par exemple, ce critre permet de mettre en valeur des vnements futurs. {age<0} slectionne les articles ou les brves dont la date est situe dans le futur ( aprs aujourdhui)...
50/186
ge par rapport une date fixe. Le critre age est calcul par rapport la date daujourdhui (ainsi {age<30} correspond aux articles publis depuis moins dun mois par rapport aujourdhui). Le critre age_relatif compare la date dun article ou dune brve une date courante ; par exemple, lintrieur dune boucle ARTICLES, on connat dj une date pour chaque rsultat de la boucle, on peut donc slectionner par rapport cette date (et non plus par rapport aujourdhui). Par exemple :
<BOUCLE_article_principal(ARTICLES){id_article}> <h1>#TITRE</h1> <BOUCLE_suivant(ARTICLES){id_rubrique}{age_relatif<=0}{exclus}{par date}{0,1}> Article suivant: #TITRE </BOUCLE_suivant> </BOUCLE_article_principal>
la BOUCLE_suivant affiche un seul article de la mme rubrique, class par date, dont la date de publication est infrieure ou gale la date de l article_principal ; cest--dire larticle de la mme rubrique publi aprs larticle principal. De plus amples informations sur lutilisation des dates se trouvent dans larticle sur La gestion des dates .
- {doublons} ou {unique} (ces deux critres sont rigoureusement identiques) permettent dinterdire laffichage des rsultats dj affichs dans dautres boucles utilisant ce critre.
- {doublons xxxx} on peut avoir plusieurs jeux de critres {doublons} indpendants. Les boucles ayant {doublons rouge} nauront aucune incidence sur les boucles ayant {doublons bleu} comme critre.
- {exclus} permet dexclure du rsultat llment (article, brve, rubrique, etc.) dans lequel Manuel de rfrence des boucles et balises 51/186
on se trouve dj. Par exemple, lorsque lon affiche les articles contenus dans la mme rubrique, on ne veut pas afficher un lien vers larticle dans lequel on se trouve dj.
- {xxxx IN a,b,c,d} limite laffichage aux rsultats ayant le critre xxxx gal a, b, c ou d. Les rsultats sont tris dans lordre indiqu (sauf demande explicite dun autre critre de tri). Il est aussi possible de slectionner des chanes de caractres, par exemple avec {titre IN 'Chine', 'Japon'}. Les balises sont admises dans les arguments de IN, et notamment la balise ENV, laquelle sont appliqus les filtres danalyse pour assurer que la requte SQL sera bien crite. De manire drogatoire, SPIP testera si largument de ENV dsigne un tableau (venant par exemple de saisies de formulaire dont lattribut name se termine par []). Si cest le cas, et si les filtres danalyse ont t dsactivs en suffixant cette balise par une double toile, alors chaque lment du tableau sera considr comme argument de IN, SPIP appliquant les filtres de scurit sur chacun deux. Le squelette standard formulaire_forum_previsu fournit un exemple dutilisation avec une boucle MOTS ayant le critre {id_mot IN #ENV**{ajouter_mot}} : cette boucle slectionne seulement les mots-cls appartenant un ensemble indiqu dynamiquement. Ici, cet ensemble aura t construit par le formulaire du squelette standard choix_mots, qui utilise des attributs name=ajouter_mot[]. - {a, b} o a et b sont des nombres. Ce critre permet de limiter le nombre de rsultats. a indique le rsultat partir duquel on commence laffichage (attention, le premier rsultat est numrot 0 - zro) ; b indique le nombre de rsultats affichs. Par exemple {0, 10} affiche les dix premiers rsultats ; {4, 2} affiche les deux rsultats partir du cinquime (inclus). - {debut_xxx,b} est une variante trs labore de la prcdente. Elle permet de faire commencer la limitation des rsultats par une variable passe dans lURL (cette variable remplace ainsi le a que lon indiquait prcdemment). Cest un fonctionnement un peu compliqu, que fort heureusement on na pas besoin dutiliser trop souvent. La variable passe dans lURL commence forcment par debut_xxx (o xxx est un mot choisi par le webmestre) . Ainsi, pour une page dont lURL est :
spip.php?page=petition&id_article=13&debut_signatures=200
on obtiendra la liste des 100 signatures partir de la 201-ime [rappel]. Avec lURL :
spip.php?page=petition&id_article=13&debut_signatures=300
52/186
- {a, n-b} est une variante de {a, b} qui limite laffichage en fonction du nombre de rsultats dans la boucle. a est le rsultat partir duquel commencer faire laffichage ; b indique le nombre de rsultats ne pas afficher la fin de la boucle.
{0, n-10} {5, n}
Attention : si a et b sont remplacer par des nombres, cest bien la lettre n quil faut utiliser quand ncessaire. - {n-a, b} est le pendant de {a, n-b}. ae rsultat avant la fin de la boucle. On limite b rsultats en commenant laffichage au
Par exemple : {n-20,10} affichera 10 rsultats en partant du 20e rsultat avant la fin de la boucle. - {a/b} o a et b sont des chiffres. Ce critre permet dafficher une partie a (proportionnellement) des rsultats en fonction dun nombre de tranches b. Par exemple : {1/3} affiche le premier tiers des rsultats. Ce critre est surtout utile pour prsenter des listes sur plusieurs colonnes. Pour obtenir un affichage sur deux colonnes, il suffit de crer une premire boucle, affiche dans une case de tableau, avec le critre {1/2} (la premire moiti des rsultats), puis une seconde boucle dans une seconde case, avec le critre {2/2} (la seconde moiti des rsultats). Attention. Lutilisation du critre {doublons} avec ce critre est prilleuse. Par exemple :
<BOUCLE_prem(ARTICLES){id_rubrique}{1/2}{doublons}> <li> #TITRE </BOUCLE_prem> <BOUCLE_deux(ARTICLES){id_rubrique}{2/2}{doublons}> <li> #TITRE </BOUCLE_deux>
naffichera pas tous les articles de la rubrique ! Imaginons par exemple quil y ait au total 20 articles dans notre rubrique. La BOUCLE_prem va afficher la premire moiti des articles, cest--dire les 10 premiers, et interdire ( cause de {doublons}) de les rutiliser. La BOUCLE_deux, elle, va rcuprer la deuxime moiti des articles de cette rubrique qui nont pas encore t affichs par la BOUCLE_prem ; donc, la moiti des 10 articles suivants, cest-dire les 5 derniers articles de la rubrique. Vous avez donc perdu 5 articles dans lopration...
Divers
53/186
permet de ne slectionner que les articles (ou rubriques, etc) qui disposent dun logo. Il fonctionne aussi dans la boucle (HIERARCHIE). Le critre inverse {!logo} liste les objets qui nont pas de logo.
{logo}
Notes
[rappel] le premier rsultat est numrot 0, donc le 200e rsultat reprsente rellement la 201 e signature
54/186
Les balises suivantes sont disponibles nimporte quel endroit du squelette, mme en dehors dune boucle (hors contexte ).
Cf. www.uzine.net/article1785.html pour une introduction aux charsets, en attendant une documentation plus complte de cette fonctionnalit de SPIP.
55/186
squelettes. On crira donc, par exemple, pour inclure une feuille de style du rpertoire squelette :
<link rel="stylesheet" href="#CHEMIN{mon_style.css}" type="text/css" />
- #PUCE affiche devinez-quoi... - #FORMULAIRE_ADMIN est une balise optionnelle qui permet de placer les boutons dadministration ( recalculer cette page , etc.) dans ses squelettes. Lorsquun administrateur parcours le site public, si cette balise est prsente, elle sera remplace par les boutons dadministration, sinon, les boutons seront placs la fin de la page. On peut aussi modifier la feuille de style spip_admin.css pour contrler la position des boutons. - #DEBUT_SURLIGNE, #FIN_SURLIGNE sont deux balises qui indiquent SPIP dans quelle partie de la page colorer les mots clefs recherchs. Voir : Les boucles et balises de recherche . - La balise #INSERT_HEAD doit se situer entre les balises <head> et </head> de vos squelettes. Elle permet SPIP, ainsi quaux plugins ventuels, dajouter du contenu entre ces deux balises html.
Balises techniques
Attention, ces balises sadressent des utilisateurs avertis de SPIP. - La balise #REM ne produit aucun affichage : elle permet de commenter le code des squelettes, de cette faon : [(#REM) Ceci est un commentaire. ]. Ces commentaires napparaissent pas dans le code gnr pour le site public. - #SELF retourne lURL de la page appele, nettoye des variables propres lexcution de SPIP. Par exemple, pour une page avec lurl : spip.php?article25&var_mode=recalcul la balise #SELF retournera : spip.php?article25 Par exemple pour faire un formulaire :
<form action="#SELF" method="get">
Remarque : la balise #SELF reprsentant ladresse de la page, elle nest pas compatible avec les <INCLURE()> (sauf si le $delais de linclusion est mis 0). - #URL_PAGE retourne une url de type page (cf. les urls de spip), vers la page passe en paramtre et qui pourra tre utilise dans un lien. Par exemple, pour accder la page gnre par le squelette toto.html, situe dans votre dossier-squelette, #URL_PAGE{toto} gnra automatiquement lurl spip.php?page=toto. Un second paramtre est autoris pour ajouter des paramtres lurl. Exemple #URL_PAGE{toto,id_article=#ID_ARTICLE} gnrera lurl spip.php?page=toto&id_article=XXX.
56/186
- [(#ENV{xxxx,zzzz})] permet daccder la variable de nom xxxx passe par la requte HTTP. zzzz est une partie optionnelle qui permet de retourner une valeur mme si la variable xxxx nexiste pas. On trouve une explication dtaille sur Spip-Contrib Par dfaut, la balise #ENV est filtre par htmlspecialchars. Si on veut avoir le rsultat brut, ltoile * peut tre utilise comme pour les autres balises : [(#ENV*{xxxx})]. Par exemple pour limiter la liste dauteurs affichs :
<BOUCLE_auteurs(AUTEURS) {nom == #ENV{lettre,^A}}>
Retourne la liste dauteur ayant le nom correspondant lexpression rgulire pass dans lurl par la variable lettre (liste_auteur.php3?lettre=^Z) ou les auteurs qui ont un nom commenant par un A sil ny a pas de variable dans lurl. - La balise #SPIP_CRON est lie la gestion par SPIP des calculs quil doit faire priodiquement (statistiques, indexation pour le moteur de recherche, syndication de sites etc.). Si cette balise nest pas prsente sur le site, le moteur de SPIP effectue ses calculs, en temps utile, aprs avoir envoy une page un visiteur ; malheureusement php ne permet pas de fermer la connexion la fin de la page, et dans certains cas cela peut conduire certains visiteurs malchanceux (ceux dont le passage dclenche une procdure un peu longue, notamment la syndication) constater une certaine lenteur dans laffichage de la page demande. La balise #SPIP_CRON permet de contourner ce problme : son rle est de gnrer un marqueur <div> invisible dont la proprit background pointe sur le script spip_background.php3 ; ce script son tour effectue les calculs ncessaires en tche de fond , et renvoie une image transparente de 11 pixel. Cette astuce permet donc dviter tout sentiment de ralentissement en dportant les ventuelles lenteurs sur un script annexe. A noter : cette balise nest pas stratgique, et sa prsence ou son absence ne modifient en rien la rgularit du calcul des tches priodiques du site. - La balise #SET{variable,valeur} et son pendant #GET{variable} : La balise #SET{xxx,yyy} affecte une valeur yyy une variable xxx propre au squelette calcul. Cette valeur peut tre rcupre par la balise #GET{xxx}. Les variables cres ainsi ne sont pas transmises au squelette inclus. Attention ! Si lon affecte une valeur une variable dans la partie facultative avant dune boucle, il ne sera pas possible de rcuprer cette valeur dans la boucle. Cela tient la manire dont Spip calcule les squelettes. - La balise #HTTP_HEADER{argument} permet de modifier lentte HTTP de la page retourne par SPIP. Exemple : #HTTP_HEADER{Content-Type: text/css}. Attention ! Le fait dutiliser cette balise supprime les boutons dadministration. Cette balise ne peut pas tre utilise dans des squelettes inclus via la syntaxe <INCLURE>.
57/186
- La balise #EVAL{argument} value lexpression PHP mise en accolade. Par exemple #EVAL{1+1} affichera 2, #EVAL{_DIR_IMG_PACK} affichera ainsi le chemin vers le rpertoire ecrire/img_pack/. Attention, il est fortement conseill de sen servir avec modration.
- La balise #CACHE{temps} permet de dterminer le dlai au bout duquel le squelette est rinterprt. Le temps est exprim en secondes. Il peut se mettre sous forme de calcul. Par exemple : #CACHE{24*3600}. - La balise #SQUELETTE affiche le chemin du squelette courant. - La balise #VAL{argument} retourne largument entre accolade. Par exemple #VAL{toto} retourne "toto".
58/186
Les formulaires
Aot 2002 maj : septembre 2010
SPIP permet une grande interaction du site avec les visiteurs ; pour cela, il propose de nombreux formulaires sur le site public, permettant tantt de grer les accs lespace priv, tantt dautoriser lajout de messages et signatures. Les formulaires sinsrent dans les squelettes par une simple balise ; SPIP se charge ensuite de grer le comportement (souvent complexe) de ces formulaires en fonction de lenvironnement et des configurations effectues dans lespace priv.
Fonctions interactives
- #FORMULAIRE_RECHERCHE Il sagit du formulaire du moteur de recherche intgr SPIP. Il est prsent dans larticle sur les boucles de recherche. - #FORMULAIRE_FORUM Le #FORMULAIRE_FORUM gre linterface permettant de poster des messages dans les forums publics. Il concerne donc en premier chef la boucle FORUMS mais peut tre utilis dans toutes les boucles acceptant un forum :
La boucle ARTICLES, La boucle RUBRIQUES, La boucle BREVES, La boucle SITES (ou SYNDICATION).
Le formulaire dpend videmment du choix des forums modrs a posteriori, a priori ou sur abonnement. Par dfaut, une fois le message post, le visiteur est renvoy vers la page de llment5 [1] auquel il a rpondu. On peut dcider de renvoyer le visiteur vers une autre page en passant une url en paramtre cette balise. Par exemple :
[(#FORMULAIRE_FORUM{'spip.php?page=merci'})]
spip ?page=merci.
[(#FORMULAIRE_FORUM{#SELF})]
plac (voir la balise #SELF). Dans le cas (trs spcifique) o lon a autoris la prsence de mots-cls dans les forums publics, on peut affiner le comportement de ce formulaire avec des variables de personnalisation.
59/186
- #FORMULAIRE_SIGNATURE La balise #FORMULAIRE_SIGNATURE affiche un formulaire permettant aux visiteurs du site de signer les ptitions associes aux articles. Cette balise se place donc dans une boucle ARTICLES. La signature des ptitions rclame obligatoirement une validation des signataires par email. Ce formulaire na donc dintrt que si votre hbergeur autorise lenvoi de mails par PHP. - #FORMULAIRE_SITE La balise #FORMULAIRE_SITE affiche un formulaire permettant aux visiteurs du site de proposer des rfrencements de sites. Ces sites apparatront comme proposs dans lespace priv, en attendant une validation par les administrateurs. Ce formulaire ne saffiche que si vous avez activ loption Grer un annuaire de sites dans la Configuration sur site dans lespace priv, et si vous avez rgl Qui peut proposer des sites rfrencs sur les visiteurs du site public . Les sites rfrencs tant, dans SPIP, attachs aux rubriques, on ne peut placer ce qu lintrieur dune boucle RUBRIQUES.
#FORMULAIRE_SITE
- #FORMULAIRE_ECRIRE_AUTEUR Place lintrieur dune boucle AUTEURS, cette balise affiche le formulaire qui permet denvoyer un mail lauteur. Cela permet dcrire aux auteurs sans divulguer leur adresse email sur le site public. Plac dans une boucle ARTICLES, ce formulaire permet denvoyer un mail tous les auteurs de cet article. Plac dans une boucle FORUMS, ce formulaire permet denvoyer un mail directement lauteur du message si lauteur est enregistr sur le site.
Inscription, authentification...
- #FORMULAIRE_INSCRIPTION Sans doute le plus importante, la balise #FORMULAIRE_INSCRIPTION affiche le formulaire permettant linscription de nouveaux rdacteurs. Celui-ci ne saffiche que si vous avez autoris linscription automatique depuis le site public (sinon, cette balise naffiche rigoureusement rien). Linscription ncessite lenvoi des informations de connexion (login et mot de passe) par email ; ce formulaire ne fonctionne donc que si votre hbergeur autorise lenvoi de mails par PHP. - [(#FORMULAIRE_INSCRIPTION{forum})] Est lquivalente de la prcdente, pour linscription des visiteurs, appels crire dans les forums (rservs aux visiteurs enregistrs), option qui se dtermine dans la partie prive
60/186
configuration/interactivit/Mode de fonctionnement par dfaut des forums publics. Le paramtre forum correspond lintitul du statut dauteur dsir lors de linscription. Aprs la validation, un message avertit le visiteur : "Votre nouvel identifiant vient de vous tre envoy par email." - #LOGIN_PRIVE Tout aussi importante (sinon plus), cette balise affiche le formulaire daccs lespace priv (la partie /ecrire du site). Important : cette balise doit imprativement tre prsente dans le squelette appel par la page spip.php?page=login, cest--dire dans le squelette nomm login.html. En effet, lors des accs directs ladresse /ecrire de votre site, cest vers spip.php?page=login que SPIP va vous rediriger. - #LOGIN_PUBLIC Dune utilisation beaucoup plus spcifique, la balise #LOGIN_PUBLIC affiche un formulaire permettant vos utilisateurs de sidentifier tout en restant sur le site public (sans entrer dans lespace priv). Cette balise sert notamment authentifier les visiteurs pour les sites proposant des forums modrs sur abonnement. Elle peut aussi servir de brique de base pour restreindre laccs certains contenus sur le site public : mais cela reste dun maniement complexe, et ncessitera encore des dveloppements et la rdaction de tutoriels complets avant dtre facilement utilisable par tous ; nanmoins, un exemple dutilisation avance est donn plus bas. Le #LOGIN_PUBLIC, par dfaut, boucle sur lui-mme , cest--dire que le formulaire revient sur la page o il se trouve. On peut cependant indiquer une page vers laquelle le formulaire mnera, sous la forme :
[(#LOGIN_PUBLIC{#URL_PAGE{mapage}})]
Si votre site offre une inscription automatique lespace priv, les donnes de connexion lespace public sont identiques celles de lespace priv ; cest--dire que les donnes envoyes lutilisateur pour sidentifier lespace public lui permettent galement daccder lespace priv. Si, au contraire, vous avez interdit linscription automatique lespace priv, il faut imprativement avoir au moins un article dont les forums seront rgls en mode sur abonnement pour activer cette balise ; ds lors, SPIP pourra fournir des informations de connexion pour le site public sans accs lespace priv. - #URL_LOGOUT est le pendant de #LOGIN_PUBLIC ; il donne une URL permettant un visiteur authentifi de se dconnecter. Noter que #URL_LOGOUT tant une balise dynamique, elle renverra toujours quelque chose de sorte que les parties conditionnelles (La syntaxe des balises SPIP) de la balise seront toujours affiches. Ainsi une notation du type [<a href="(#URL_LOGOUT)">dconnexion</a>] retournera le source html <a href="">dconnexion</a> lorsque le visiteur nest pas connect. Pour un affichage conditionnel du lien de dconnexion, voir plus bas. On peut passer un paramtre cette balise pour spcifier ladresse de retour aprs la dconnexion. Par exemple [(#URL_LOGOUT{spip.php?page=sommaire})] renverra vers la page de sommaire.
61/186
Voici un exemple simple, mais complet, dutilisation de ces deux balises. Il faut passer par un peu de php pour tester la variable $auteur_session, qui indique quun auteur est identifi ou non. Si cest le cas, on peut rcuprer (voire tester) son statut, son login, etc., via $auteur_session['statut'].... Notez bien que le contenu nest scuris que sur ce squelette. Si votre squelette imprimer cet article , par exemple, ne vrifie pas $auteur_session, tout le monde (y compris les moteurs de recherche !) pourra avoir accs ce fameux contenu que vous souhaitez protger.
<?php if ($auteur_session) { ?> Vous tes authentifi, <a href='#URL_LOGOUT'>cliquez ici pour vous dconnecter</a> ... ici le contenu en accs restreint.... <?php } else { ?> <h2>Cette partie est en accs restreint</h2> #LOGIN_PUBLIC <?php } ?>
Depuis SPIP 2.0, il nest plus utile dutiliser du code php dans votre squelette ; vous pouvez dsormais crire :
[(#LOGIN_PUBLIC|non) [<a href="(#SESSION|oui) #URL_LOGOUT">dconnexion</a> ] ]
pour afficher au choix le formulaire de login ou le lien de dconnexion en fonction de ltat (identifi/pas identifi) du visiteur.
Styles
On peut sensiblement modifier linterface graphique des formulaires par lintermdiaire des feuilles de style. Voir : Ils sont beaux, mes formulaires ! .
62/186
Nous avons vu dans la syntaxe des balises SPIP quil tait possible de modifier le comportement et laffichage des balises en leur attribuant des filtres.
[ option avant (#BALISE|filtre1|filtre2|...|filtren) option aprs ]
filtre spars par un tiret, la notation [(#DATE|affdate{'saison'})] est totalement quivalente : [(#DATE|saison)].
- Il existe aussi des variantes de affdate qui fournissent des raccourcis : affdate_jourcourt affiche le nom du mois et la valeur numrique du jour, e.g. 19 Avril . Si la date nest pas dans lanne actuelle, alors lanne est aussi affiche : 1 Novembre 2004 . affdate_court affiche le nom du mois et le numros du jour, e.g. 19 Avril . Si la date nest pas dans lanne actuelle, alors on affiche seulement le mois et lanne sans le numros du jour : Novembre 2004 .
63/186
affdate_mois_annee affiche seulement le mois et lanne : Avril 2005 , Novembre 2003 . - jour affiche le jour (en nombre). - mois affiche le mois (en nombre). - annee affiche lanne. - heures affiche les heures dune date (les dates fournies par SPIP contiennent non seulement le jour, mais galement les horaires). - minutes affiche les minutes dune date. - secondes affiche les secondes. - nom_jour affiche le nom du jour (lundi, mardi...). - nom_mois affiche le nom du mois (janvier, fvrier...). - saison affiche la saison (hiver, t...). - Le filtre unique retourne la valeur de llment filtr seulement si cest la premire fois quelle est rencontre. Ce filtre nest pas limit aux dates mais est intressant pour, par exemple, afficher une liste darticles par date :
<BOUCLE_blog(ARTICLES){par date}{inverse}{"<br>"}> [<hr /><h1>(#DATE|affdate_mois_annee|unique)</h1>] #TITRE ... </BOUCLE_blog>
cette balise naffichera la date qu chaque changement de mois. Voici un autre exemple :
<BOUCLE_blog2(ARTICLES){par date}{inverse}> [<hr /><h1>(#DATE|annee|unique)</h1>] [<h2>(#DATE|affdate{'Y-m'}|unique|nom_mois)</h2>] <a href="#URL_ARTICLE">#TITRE</a><br /> </BOUCLE_blog2>
On utilise la notation affdate{'Y-m'} pour afficher le nom du mois chaque anne. En effet :
64/186
si lon ne faisait que #DATE|nom_mois|unique, les noms de mois ne seraient affichs que la premire anne. si le filtrage tait : #DATE|unique|nom_mois, on afficherait toutes les dates. En effet, #DATE retourne une date complte qui contient aussi lheure. Il y a donc une grande chance que les dates compltes de deux articles publis le mme jours soient diffrentes.
Cest pourquoi on garde juste le mois et lanne de la date avant de la passer au filtre unique. On peut passer un argument optionnel ce filtre pour diffrencier deux utilisations indpendantes du filtre. Par exemple : [(#DATE|affdate_mois_annee|unique{ici})] naura pas dincidence sur [(#DATE|affdate_mois_annee|unique{la})].
Filtres de texte
- liens_ouvrants transforme les liens SPIP qui donnent vers des sites extrieurs en liens de type popup , qui ouvrent dans une nouvelle fenetre ; cest lquivalent du target=blank du HTML. N.B. : les dveloppeurs de SPIP estiment quil sagit en gnral dune impolitesse, car les internautes savent trs bien sils ont envie ou pas douvrir une nouvelle fentre - or ce systme le leur impose. Mais la demande tait trop forte, et nous avons craqu ;-) - supprimer_numero sert liminer le numro dun titre, si par exemple on veut faire des tris darticles {par num titre} mais ne pas afficher les numros (car ils ne servent qu ordonner les articles). Le format des prfixes numerots est XX. titre , XX tant un nombre n chiffres (illimit). - PtoBR transforme les sauts de paragraphe en simples passages a la ligne, ce qui permet de resserrer une mise en page, par exemple lintrieur dun sommaire - taille_en_octets permet de transformer un nombre doctets (25678906) en une chane de caractres plus explicite ( 24.4 Mo ). - supprimer_tags est une suppression basique et brutale de tous les <...> - textebrut sapparente au filtre supprimer_tags, mais il agit de manire un peu plus subtile, transformant notamment les paragraphes et <br> en sauts de ligne, et les espaces inscables en espaces simples. Il sutilise, par exemple, pour faire un descriptif META :
[<meta name="description" content="(#DESCRIPTIF|textebrut)">]
- texte_backend peut tre utilis pour transformer un texte et le rendre compatible avec des flux XML. Ce filtre est utilis, par exemple, dans le squelette backend.html qui gnre le fil RSS du site. - couper coupe un texte aprs un certain nombre de caractres. Il essaie de ne pas couper les mots et enlve le formatage du texte. Si le texte est trop long, alors (...) est ajout la fin. Ce filtre coupe par dfaut 50 caractres, mais on peut spcifier une autre longueur en passant un paramtre au filtre, par exemple : [(#TEXTE|couper{80})]. - lignes_longues coupe les mots trops longs (utile si lon a, par exemple, des urls afficher dans une colone troite). Ce filtre coupe par dfaut 70 caractres, mais on peut
65/186
spcifier une autre longueur en passant un paramtre au filtre, par exemple : [(#URL_SITE|lignes_longues{40})]. - match utilise une expression rgulire (cf. preg_match()) pour extraire un motif dans le texte si il est prsent, ne retourne rien sinon. Par exemple pour rcuprer le premier mot du titre [(#TITRE|match{^\w+?})]. Ce peut tre un texte simple, afficher "toto" si dans le titre :
[(#TITRE|match{toto})]
- replace utilise aussi une expression rgulire (cf. preg_replace()) pour supprimer ou remplacer toutes les occurences dun motif dans le texte. Avec un seul parametre, une expression rgulire, le motif sera remplac par une chane, cest dire supprim. Par exemple pour supprimer tous les "notaXX" du texte [(#TEXTE|replace{nota\d*})]. Lorsquun deuxime paramtre est fourni, les occurences du motif seront remplaces par cette valeur. Par exemple pour remplacer tous les 2005 ou 2006 du texte en 2007 [(#TEXTE|replace{200[56],2007})]. Ce peut tre des textes simples, remplacer tous les "au temps" par "autant" : [(#TEXTE|replace{au temps,autant})]
Filtres de test
- Le filtre |sinon, qui indique ce quil faut afficher si llment filtr est vide : ainsi [(#TEXTE|sinon{"pas de texte"})] affiche le texte ; si celui-ci est vide, affiche pas de texte . - Le filtre |?{sioui,sinon} est une version volue de |sinon. Il prend un ou deux paramtres :
sioui est la valeur afficher la place de llment filtr si celui-ci est non vide. sinon est optionnel. Cest la valeur afficher si llment filtr est vide. [(#TEXTE|?{#TEXTE,"pas de texte"})] est quivalent lexemple donn pour le filtre |sinon.
et |<={valeur} comparent llment filtr (qui doit tre numrique) avec une valeur numrique. Par exemple :
[(#TOTAL_BOUCLE) [(#TOTAL_BOUCLE|>{1}|?{'articles','article'})] dans cette rubrique.] Remarque : De manire gnrale, tous les oprateurs de comparaison de php peuvent tre utiliss comme filtres.
Filtres de logos
- fichier Affect un logo, ce filtre permet de rcuprer directement le nom de fichier correspondant au logo.
66/186
- ||autres filtres (jusqu' SPIP 2) permet de passer des filtres maison sur les logos, la logique est un peu tordue. Lanalyse se droule comme suit :
si le premier filtre nest pas un alignement, SPIP considre quil sagit dun URL et fait un lien du logo vers cette adresse ; si le premier filtre est un alignement, SPIP considre que le deuxime filtre est un URL ; les filtres suivants sont de vrais filtres au sens habituel (y compris des filtres maison dclars dans mes_fonctions.php ; pour appliquer un filtre quelconque sans mettre dURL, il faut mettre deux barres. Par exemple : <?php $logo = '[(#LOGO_RUBRIQUE||texte_script)]'; ?> permet de rcuprer le logo dans la variable php $logo, pour traitement ultrieur (voir ci-dessous pour la signification de |texte_script).
Depuis SPIP 2.1 les filtres de logos ont la mme syntaxe que tous les autres. Un seul pipe suffit :
[(#LOGO_XXX|filtre)]
Mais : - #LOGO_XXX** renvoie le fichier - #LOGO_XXX{top/left/right/center/bottom} gnre un alignement - #LOGO_XXX{url} gnre un logo qui pointe vers lurl. - Les filtres hauteur et largeur retournent les informations sur la taille (i.e. Hauteur et Largeur) de llment filtr si cest une image. Ces filtres nont quun intrt moyen tre appliqus directement un logo de document puisquil y a dj #HAUTEUR et #LARGEUR disposition pour les documents. Par contre, on peut les appliquer aprs le filtre image_reduire pour connatre la taille exacte de limage rduite. Plus gnralement, on peut les appliquer sur nimporte quelles balises (ou filtre) retournant un balise HTML <img ...>.
- |image_reduire{largeur,hauteur} permet de forcer une taille maximale daffichage des images et des logos. Ce filtre sutilise par exemple sur un logo darticle de la faon suivante :
[(#LOGO_ARTICLE|right||image_reduire{130})]
Dans cet exemple, le logo de larticle apparat align droite, une taille maximale de 130 pixels. Ce filtre peut prendre deux arguments : largeur et hauteur. Si lun de ces deux arguments est gal 0, SPIP ne tient compte que de lautre et calcule cette dimension en conservant les proportions de limage. De plus, ce filtre sapplique aussi la balise #TEXTE et ce sont alors toutes les images que le rdacteur introduit dans le texte grce aux raccourcis SPIP qui sont alors rduites.
67/186
affiche toutes les images insres dans le fil du texte une largeur maximale de 600 pixels. Cela permet de prserver la mise en page mme sans que le rdacteur ait se soucier de la taille des images quil tlcharge sur le site. NB. : Si loption cration de vignettes est active dans la configuration du site, ces logos rduits seront des fichiers dimages spcifiques calculs automatiquement par le serveur (idalement, avec lextension GD2 installe sur le serveur), pour les formats accepts par le serveur (avec GD2, habituellement, les formats JPG et PNG). Sinon, cest une version complte de limage qui est affiche, mais avec une taille daffichage fixe directement en HTML.
68/186
Autres Filtres
- traduire_nom_langue sapplique la balise #LANG et retourne un traduction du code de langue quelle retourne (fr, en, it, etc.) dans cette langue. Remarque : Les traductions des codes sont faites dans la langue que reprsente ce code et suivent les conventions dcriture de cette langue. Ainsi fr sera traduit franais en minuscule, alors que es sera traduit Espaol avec une majuscule. - alterner{a,b,c,...} sapplique une balise numrique (en gnral #COMPTEUR_BOUCLE ou #TOTAL_BOUCLE) et affiche largument correspondant la valeur de cette balise . On peut ainsi alterner un affichage dans une boucle. Par exemple, [(#COMPTEUR_BOUCLE|alterner{'white','yellow'})] affichera white la premire itration de la boucle, yellow la deuxime, white la troisime, yellow la quatrime, etc. Ainsi, on peut faire une liste darticle qui utilise une couleur diffrente pour les lignes paires et impaires :
<B_lesarticles> <ul> <BOUCLE_lesarticles(ARTICLES) {par titre}> <li style="background: [(#COMPTEUR_BOUCLE|alterner{'white','yellow'})]">#TITRE</li> </BOUCLE_lesarticles> </ul> </B_lesarticles>
- inserer_attribut{attribut,valeur} permet dajouter un attribut html dans une balise html gnre par SPIP. Par exemple : [(#LOGO_DOCUMENT||inserer_attribut{'alt',#TITRE})] va ajouter un attribut alt avec le titre du document dans la balise img du logo. - extraire_attribut{attribut} est linverse du filtre prcdent. Il permet de rcuprer un attribut dune balise html gnre par SPIP. Par exemple, on peut trouver le chemin de la vignette gnre par le filtre
69/186
- vider_attribut{attribut} est une variante de inserer_attribut. Il permet de supprimer les attribut html. Exemple [(#LOGO||vider_attribut{width})] enlever lattribut width sur limage dun logo (quelle ide !) image_reduire : <div style="background: url([(#LOGO_ARTICLE||image_reduire{90}|extraire_attribut{src})]) left;"]>#TEXTE</div> - parametre_url{parametre,valeur} est un filtre qui permet dajouter des paramtres dans une url gnre par une balise SPIP. Si valeur vaut '' le filtre supprime un paramtre actuellement dans lurl. Par exemple, la balise #SELF retourne lurl de la page actuelle, donc :
[(#SELF|parametre_url{'id_article','12'})]
dans lurl. Employ avec un seul paramtre le filtre agit diffremment : #URL...|parametre_url{x} extrait le parametre x de lurl et en retourne la valeur. On peut par exemple lutiliser pour faire des boutons pour naviguer parmi les documents sur une page :
<BOUCLE_actuel(DOCUMENTS) {id_document}> #LOGO_DOCUMENT <ul> <BOUCLE_precede(DOCUMENTS) {par date} {age_relatif <= 0} {0,1} {exclus}> <li> <a href="[(#SELF|parametre_url{'id_document',#ID_DOCUMENT})]" title="prcdent"> [(#LOGO_DOCUMENT||image_reduire{70})] </a> </li> </BOUCLE_precede> <BOUCLE_suivant(DOCUMENTS) {par date} {age_relatif > 0}{0,1}> <li> <a href="[(#SELF|parametre_url{'id_document',#ID_DOCUMENT})]" title="suivant"> [(#LOGO_DOCUMENT||image_reduire{70})] </a> </li> </BOUCLE_suivant> </ul> </BOUCLE_actuel>
ancre_url{ancre} ajoute un modifie une ancre une url. Par exemple [(#URL_ARTICLE|ancre_url{ancre})].
Filtres techniques
- entites_html transforme un texte en entits HTML, que lon peut donc implanter dans un formulaire, exemple : [<textarea>(#DESCRIPTIF|entites_html)</textarea>] - texte_script transforme nimporte quel champ en une chane utilisable en PHP ou Javascript en toute securit, exemple : <?php $x = '[(#TEXTE|texte_script)]'; ?>. Attention : utilisez bien le caractre ' et non " : en effet, dans le second cas, si votre texte Manuel de rfrence des boucles et balises 70/186
contient le symbole $, le rsultat peut tre catastrophique (affichage partiel, affichage dautre chose, plantage php, etc.). - attribut_html rend une chane utilisable sans dommage comme attribut HTML ; par exemple, si lon veut ajouter un texte de survol au lien normal vers un article, on utilisera <a
href="#URL_ARTICLE"[ title="(#DESCRIPTIF|attribut_html|couper{80})"]>#TITRE</a>.
- liens_absolus sapplique sur une balise de texte et transforme tous les liens que celui-ci contient en liens absolus, en prfixant le protocole (http ou https) et le nom dhte courants. Ce filtre est particulirement utile dans des squelettes de fil rss par exemple. Pour forcer une certaine URL de base, il est possible de la passer en argument, par exemple
#TEXTE|liens_absolus{#URL_SITE_SPIP}
- url_absolue marche de la mme faon que le filtre prcdent, mais sapplique une balise qui retourne une url (par exemple #URL_ARTICLE). Tout comme le filtre liens_absolus, ce filtre accepte une URL de base comme paramtre optionnel. - abs_url combine les deux balises prcdentes et peut donc sappliquer un texte ou une balise durl. Il accepte le mme paramtre optionnel. - form_hidden Si on fait un formulaire qui utilise comme action un lien comprenant des arguments (par exemple, quand on utilise la balise #SELF avec le type durl par defaut), il faut remettre ces valeurs dans des champs hidden ; cette fonction calcule les champs en question. A utiliser par exemple :
<form action="#SELF"> [(#SELF|form_hidden)] ... </form>
- Le filtre |compacte permet de rduire la taille dun CSS ou dun javascript en supprimant tout les commentaires. Le filtre prend en entre le nom du fichier, et produit un nouveau fichier dont il renvoie le nom <link rel="stylesheet"
href="[(#CHEMIN{spip_style.css}|compacte)]" type="text/css" media="all" />.
Afin de ne pas avoir modifier des fichiers de SPIP (qui risqueraient dtre crass lors dune prochaine mise jour), vous pouvez installer vos fonctions personnelles dans un fichier mes_fonctions.php : si SPIP repre un fichier ayant ce nom, il linclut automatiquement. Manuel de rfrence des boucles et balises 71/186
Il peut se situer :
dans le dossier o sont stocks vos squelettes la racine du site Mais jamais dans les deux la fois.
Il est possible de dfinir des filtres applicables uniquement un squelette particulier. Par exemple, on crera, dans un fichier article_fonctions.php, des filtres qui ne seront effectifs que dans le squelette article.html. attention : ce fichier xxxx_fonctions.php devra se trouver au mme niveau (dans le mme rpertoire) que le squelette xxxx.html.
On peut ainsi appeler nimporte quelle fonction php, ou sappuyer sur des fonctions dfinies dans SPIP ou dans mes_fonctions.php, pour peu quelles respectent lordre des arguments (le texte traiter doit tre imprativement le premier argument). Par exemple, pour enlever les points la fin dun texte, on pourra faire : [(#TEXTE|rtrim{'.?!'})]. Les arguments des filtres peuvent tre des balises (sans codes optionnels ni filtres). Par exemple :
[(#TOTAL_BOUCLE|=={#COMPTEUR_BOUCLE}|?{'Fin.',''})]
72/186
Les boucles rcursives offrent une fonctionnalit trs puissante de mise en page de structure hirarchique. Leur criture est concise, mais leur utilisation demande une bonne matrise logique de lenchanement des boucles. Pour construire une boucle rcursive, il suffit dindiquer dans son TYPE le nom dune boucle contenant celle quon crit :
<BOUCLEx ....> .... <BOUCLEn(BOUCLEx)></BOUCLEn> .... </BOUCLEx>
La boucle n fonctionne comme si lon avait recopi lintgralit de la boucle x (toutes les balises et le code HTML, ainsi que les textes conditionnels avant, aprs et alternatif) lendroit o lon insre la boucle n. La boucle n tant lintrieur de la boucle x, on obtient un comportement rcursif : la boucle x contient une boucle n, qui elle-mme reproduit la boucle x qui contient la boucle n, et ainsi de suite, jusqu ce que la boucle x ne donne plus aucun rsultat. Aucun critre ne figure dans la boucle n, le changement de contexte chaque appel de la boucle x devant conduire les critres de celle-ci ne plus trouver aucun lment. Cette technique permet de crer notamment laffichage des threads des forums. Une premire boucle fabrique lentre des threads (les messages qui rpondent directement un article), une seconde boucle affiche les rponses ces messages, et une boucle rcursive provoque la rcursivit sur cette seconde boucle :
<BOUCLE_forum(FORUMS){id_article}> #TITRE <B_reponses> <UL> <BOUCLE_reponses(FORUMS){id_parent}> <LI>#TITRE <BOUCLE_recursive(BOUCLE_reponses)> </BOUCLE_recursive> </LI> </BOUCLE_reponses> </UL> </B_reponses> </BOUCLE_forum>
Plus gnralement, cette fonctionnalit provoque un affichage graphiquement trs clair de structures arborescentes, en particulier la hirarchie des rubriques de votre site. Remarque 1 : Le compilateur considre que la notation <BOUCLEn(BOUCLEx)> lextrieur de la boucle x est vide de sens, ce qui lui permet datteindre loptimalit du nombre de champs des requtes SQL quil produit, pour tout type de boucles. Cet emploi nest pas une rcursion mais une inclusion, fonctionnalit laquelle rpond la balise INCLURE, nettement prfrable.
73/186
Remarque 2 : Dans ltat actuel du compilateur de SPIP, la squence <BOUCLEn(BOUCLEx)></BOUCLEn> doit figurer au premier niveau de la boucle x, autrement dit la boucle n doit tre immdiatement englobe par la boucle x, non par une autre boucle elle-mme lintrieur de la boucle x. La leve de cette restriction est ltude. Remarque 3 : On peut appeler une balise homonyme de lune des boucles englobantes en explicitant le nom de la boucle laquelle la balise appartient. Il faut alors spcifier le nom de la boucle entre le # et le nom de la balise. Plus de dtail dans larticle la syntaxe des balises SPIP. On crira alors la balise #BALISE de la boucle _boucle [1] de la faon suivante : #_boucle:BALISE.
74/186
Voici une liste de critres et de balises pour mieux grer les dates des articles.
Contexte de date
SPIP fournit toutes les boucles un contexte de date. Si lon se trouve lintrieur dune boucle (ARTICLES), (BREVES) ou (RUBRIQUES), la date en question est la date de publication de larticle, de la brve ou la date de dernire modification de la rubrique. Si en revanche on se trouve au premier niveau du squelette (cest--dire en-dehors de toute boucle), la date considre est la date du jour - moins quon ait pass une date dans lURL de la page (voir lexemple plus bas). Dans ce dernier cas, et pour les versions de php suprieures 3.0.12, la date passe dans lURL est analyse avec la fonction strtotime : ainsi ?date=2003, ?date=2003/01 fonctionneront, mais aussi date=-1year (il y a un an), ?date=1march1970 (articles publis le 1er mars 1970), etc.
75/186
L{age_relatif} permet de comparer les dates de publication de deux articles : si lon vient de slectionner un article dans une boucle, une seconde boucle place lintrieur de la premire pourra demander les articles publis dans la semaine qui prcde celui-ci, via {age_relatif<=7}{age_relatif>=0}, etc. Les critres {age} et {age_relatif} permettent de distinguer deux articles publis le mme jour. On peut donc programmer des boucles pour obtenir larticle prcdent ou le suivant :
<BOUCLE_art(ARTICLES){id_article}> <BOUCLE_precedent(ARTICLES){age_relatif>=0}{par date}{inverse}{1,1}> prcdent : <a href='#URL_ARTICLE'>#TITRE</a> #DATE </BOUCLE_precedent> <br /> <b>#TITRE</b> - #DATE <br /> <BOUCLE_suivant(ARTICLES){age_relatif<0}{par date}{0,1}> suivant : <a href='#URL_ARTICLE'>#TITRE</a> #DATE </BOUCLE_suivant> </BOUCLE_art>
Attention ! Malgr les apparences les comparaisons de date sont dun maniement dlicat : en effet, cause des dates floues (un article publi un mois donn, sans que le jour soit prcis), le calcul de lage_relatif peut donner la valeur zro dans un sens, et pas dans lautre ! Do la dissymtrie des boucles prsentes ci-dessus : dans un sens on cherche le second plus rcent des articles {age_relatif>=0} (car le plus rcent, avec la comparaison non-stricte, ne peut tre que larticle lui-mme) ; dans lautre le plus g des articles publis strictement plus tard. Les critres {jour_relatif}, {mois_relatif} et {annee_relatif} fonctionnent comme lage_relatif, mais prennent en compte des dates arrondies au jour, au mois et lanne respectivement ; par exemple, si lURL comporte la variable ?date=2003-01-01, la boucle suivante donnera tous les les articles du mois de mars 2003
<h3>Articles de [(#DATE|nom_mois)] [(#DATE|annee)]:</h3> <BOUCLE_blog(ARTICLES){mois_relatif=0}{par date}{"<br />"}> <a href='#URL_ARTICLE'>#TITRE</a> ([(#DATE|jour)]/[(#DATE|nom_mois)] </BOUCLE_blog>
76/186
77/186
Balises
#AIDER
juillet 2010
Cette balise prend comme argument la clef du titre du sous-menu affich dans liframe de gauche de laide en ligne. Elle cre ainsi un lien (ouvrant un popup ) vers ce paragraphe prcis de laide. Exemple : fabriquera le lien cliquable (popup) vers le paragraphe Installer des fichiers par FTP ou SCP de laide en ligne.
#AIDER{ins_upload}
Pour connatre tous les points dentre (tous les arguments) utilisables, se reporter larticle tendre laide en ligne. Attention : la balise #AIDER doit obligatoirement recevoir un argument. #AIDER seule dans un squelette provoquera une erreur ; si vous dsirez nappeler que le menu de laide en ligne en gardant vide liframe de droite il faut crire : #AIDER{' '} (donner comme argument un espace entre deux apostrophes).
#ANCRE_PAGINATION
Mars 2010
La balise #PAGINATION cre (par dfaut) une ancre html qui permet au navigateur dafficher directement la partie de la page qui est pagine ; toutefois on peut vouloir par exemple placer les liens de pagination en dessous dune liste darticles, mais, dans un mme temps, vouloir placer lancre au-dessus de cette liste. Cest cela que sert la balise #ANCRE_PAGINATION, qui cre lancre en question, et interdit la balise #PAGINATION suivante de placer la sienne.
<B_page> #ANCRE_PAGINATION <ul> <BOUCLE_page(ARTICLES) {par date} {pagination}> <li>#TITRE</li> </BOUCLE_page> </ul> #PAGINATION </B_page>
78/186
#ARRAY
Juin 2009 maj : aot 2010
La balise #ARRAY peut contenir un tableau PHP, cest--dire un ensemble de paires cl/valeur, que lon veut stocker pour les rutiliser dans la suite du squelette. Le tableau doit tre dclar par la balise #SET et peut ensuite tre rcupr par la balise #GET [1]. Il peut tre utilis ensuite, entre autres, associ au critre IN dune boucle.
Dclarer un tableau et rcuprer des valeurs - #SET{mon_tableau, #ARRAY{cle1,valeur1,cle2,valeur2}} cre la variable mon_tableau et lui affecte un tableau PHP comme valeur, qui pourrait tre reprsent comme suit : Cls Valeurs cle1 valeur1 cle2 valeur2 Il nest pas ncessaire dentourer les chaines de caractres avec des guillemets simple ou double, sauf pour spcifier une chaine vide qui scrira - des fins de test, on peut afficher le tableau grce au filtre |foreach.
[(#GET{mon_tableau}|foreach)]
affichera :
- La valeur associe une cl donne peut tre rcupre en utilisant le filtre |table_valeur :
[(#GET{mon_tableau}|table_valeur{cle1})]
retourne valeur1.
- Vrifier la prsence dune valeur dans le tableau avec le filtre |find [2] :
[(#GET{mon_tableau}|find{valeur2}|oui) Ceci s'affiche si la valeur est dans le tableau. ]
Remplir un tableau dynamiquement Un intrt des tableaux est de les remplir dynamiquement, par les rsultats dune ou plusieurs boucle(s). Le tableau doit alors tre dclar par un #SET avant la boucle : #SET{mon_tableau,#ARRAY}
79/186
Dans la boucle, un nouveau #SET redfinit mon_tableau chaque itration : on le rcupre par #GET et on y ajoute une nouvelle valeur grce aux filtres |push ou |array_merge.
#SET{mon_tableau,#ARRAY} <BOUCLE(...)> #SET{mon_tableau, #GET{mon_tableau}|push{#COMPTEUR_BOUCLE}} </BOUCLE>
Lordre des valeurs du tableau dpend des critres de tri de la boucle. - |push ajoute simplement une valeur la fin du tableau. La cl est indexe automatiquement : elle est incrmente de 1 chaque itration de la boucle et ce, partir de 0 (la premire cl est 0, puis 1, 2, 3,...). Exemple : crer un tableau mots_choisis contenant les #ID_MOT de tous les mots-cls lis un article.
#SET{mots_choisis, #ARRAY} <BOUCLE_themes(MOTS){id_article}> #SET{mots_choisis, #GET{mots_choisis}|push{#ID_MOT}} </BOUCLE_themes>
Si les mots lis cet article portent les numros 4, 9 et 18, [(#GET{mots_choisis}|foreach)] retourne :
Notez bien que [(#GET{mots_choisis}|table_valeur{2})] retourne 18, la valeur associe la cl 2, donc la troisime valeur du tableau. - |array_merge ajoute une paire cl/valeur la fin du tableau. Cela permet donc de forcer le "nom" des cls. Attention (1) : si une cl apparat plusieurs fois, seule la dernire valeur pour cette cl sera retenue. Attention (2) : la cl que lon veut forcer ne peut pas tre de type numrique. En effet, la documentation de array_merge prcise : Si vous passez un seul tableau cette fonction et quil a des index numriques, les cls seront rindexes normalement. Il existe deux solutions cette limitation : - prfixer cette cl avec une valeur alphabtique :
80/186
retourne :
- inverser cl et valeur, condition que valeur ne soit pas elle aussi numrique :
#SET{mots_choisis, #ARRAY} <BOUCLE_themes(MOTS) {id_article}> [(#SET{mots_choisis,#GET{mots_choisis}|array_merge{#ARRAY{#TITRE,#ID_MOT}}} )] </BOUCLE_themes> [(#GET{mots_choisis}|foreach)]
retourne :
Dans ce cas, on pourra appliquer la fonction PHP |array_flip comme filtre sur le tableau final (aprs la boucle) :
[(#SET{mots_choisis, #GET{mots_choisis}|array_flip})] [(#GET{mots_choisis}|foreach)]
retourne alors :
Utiliser le tableau dans une boucle avec loprateur IN Reprenons le tableau mots_choisis contenant des #ID_MOT, on peut slectionner ensuite les articles lis aux mmes mots-cls que notre article initial grce au critre IN.
#SET{mots_choisis, #ARRAY} <BOUCLE_themes(MOTS){id_article}> #SET{mots_choisis, #GET{mots_choisis}|push{#ID_MOT}} </BOUCLE_themes> <BOUCLE_memes_themes(ARTICLES) {id_mot IN #GET{mots_choisis}}> #TITRE <br /> </BOUCLE_memes_themes>
Cette utilisation connat de multiples usages, notamment lorsque lon veut slectionner des objets laide de plusieurs critres qui ne peuvent faire partie de la mme boucle, puis les mlanger entre eux avec un critre de tri unique. Manuel de rfrence des boucles et balises 81/186
Exemples dutilisation des tableaux - Affichage conditionnel en fonction de la page (valeur de #ENV{page}) :
[(#ENV{page}|in_array{#ARRAY{0,article,1,rubrique,2,site}}|oui) Affichage conditionnel: la page est celle d'un article, d'une rubrique ou d'un site. ]
- Slectionner les articles dune rubrique et ceux associs par ailleurs un mot-cl puis lister tous ces articles par date.
#SET{les_articles,#ARRAY} <BOUCLE_articles_rubrique(ARTICLES){id_rubrique}> #SET{les_articles,#GET{les_articles}|push{#ID_ARTICLE}} </BOUCLE_articles_rubrique> <BOUCLE_articles_mot(ARTICLES){id_mot}> #SET{les_articles,#GET{les_articles}|push{#ID_ARTICLE}} </BOUCLE_articles_mot> <BOUCLE_affiche(ARTICLES){id_article IN #GET{les_articles}}{par date}> <br />#TITRE </BOUCLE_affiche>
Notes [1] Voir #SET et #GET pour plus de dtails. [2] |find correspond la fonction PHP in_array, la diffrence que ce filtre ne produit pas le message derreur "Warning : in_array() [function.in-array] : Wrong datatype for second argument." si la variable nest finalement pas un tableau. En effet, lorsquune variable est gnre dynamiquement, on ne sait pas toujours si elle existera et sil sagira bien dun tableau. [3] Voir #SELF et |parametre_url.
82/186
#AUTORISER
Janvier 2009 maj : Mai 2009
Cette balise permet, ct squelette, deffectuer les mmes contrles que ceux quon peut raliser en PHP avec la fonction autoriser() Elle renvoie un espace si lautorisation est donne, et une chane vide dans le cas contraire. On met autant darguments (et les mmes) quon en mettrait dans la fonction autoriser(). Par exemple, pour savoir si le visiteur courant peut accder aux statistiques de larticle :
[(#AUTORISER{voirstats,article,#ID_ARTICLE}) <a href='ecrire/?exec=....'>voir les stats</a> ]
Comme pour la fonction autoriser(), on peut passer un #ID_AUTEUR en argument pour demander si lauteur en question est autoris .... . Par exemple pour signaler dune toile les administrateurs et rdacteurs dans une liste dauteurs :
<BOUCLE_a(AUTEURS){tous}> #NOM [(#AUTORISER{ecrire,'','',#ID_AUTEUR}) *] </BOUCLE_a>
Un autre exemple, ci dessous, si le visiteur a des droits de modifications sur larticle, afficher un formulaire pour lditer, qui, une fois valid, retourne sur la page de larticle en question :
[(#AUTORISER{modifier, article,#ID_ARTICLE}) #FORMULAIRE_EDITER_ARTICLE{#ID_ARTICLE, #ID_RUBRIQUE, #URL_ARTICLE} ]
Rappel : les arguments de autoriser sont, dans lordre, (faire, quoi, id, qui, options). Pour plus de dtails nous vous invitons consulter la documentation des fonctions de inc/autoriser.php.
#BIO
Octobre 2009
Utilise dans une boucle (AUTEURS), la balise #BIO affiche la biographie de lauteur.
83/186
La balise #BOUTON_ACTION{libell, url, class, confirm_message} produit le source html complet dun formulaire (methode POST) comportant uniquement un bouton de type submit. Lintrt de cette balise est quelle permet de transmettre des arguments une url grce un pseudo-lien non suivable par un robot (les robots ne cliquent pas sur un bouton submit). Cest particulirement utile dans le cadre dune url qui renvoit vers un script dintervention sur les donnes en base. Il faut alors protger le lien vers cette url de tout risque dtre suivi par un robot. #BOUTON_ACTION est l pour a. La balise est utiliser ainsi :
#BOUTON_ACTION{libell, url, class ,message de confirmation}
Le 3e argument, optionnel, est un nom de classe css ; lui donner la valeur ajax permet au bouton de se comporter comme un lien ajax ; Le 4e argument, optionnel, permet de prciser le message de confirmation affich lors de la validation du bouton. - Attention :
si vous dsirez prciser un message de confirmation, vous devez aussi renseigner le 3e argument : #BOUTON_ACTION{libell, url ,message de confirmation} ne fonctionnera pas comme vous lentendez ( message de confirmation sera pass comme nom de classe css). Pour prciser un message de confirmation sans prciser de classe css, crire :
#BOUTON_ACTION{libell, url , '', message de confirmation}
Si vous utilisez des caractres accentus dans votre message de confirmation, vous devez les traduire en entits numriques ( => é).
Exemple :
#BOUTON_ACTION{valider, #URL_PAGE{mon_script}|parametre_url{var1, val1}|parametre_url{var2, val2}|parametre_url{var3, val3}, ajax, êtesvous sûr ?}
84/186
</div> </form>
#CACHE
Mars 2010
La balise #CACHE{temps en secondes} permet de dterminer le dlai au bout duquel le squelette est nouveau calcul (var_mode=calcul dans lURL actualise le cache de la page). Le temps est exprim en secondes. Il peut tre indiqu sous forme de calcul. Cette balise est gnralement place au tout dbut des squelettes. En son absence, par dfaut, la dure est de 24h (dfini par la constante _DUREE_CACHE_DEFAUT). Par exemple : #CACHE{24*3600*30} signifie que tous les mois (30 jours) votre squelette sera calcul nouveau.
#CHAMP_SQL
Mars 2009
La balise #CHAMP_SQL peut tre utilise dans toutes les boucles et permet dextraire un champ dune table SQL. #CHAMP_SQL se rvle trs utile quand une balise du mme nom que le champ existe dj (avec le multibases par exemple). Prenons lexemple de #POINTS qui est inscrit dans le core de SPIP ; Pour extraire un champ #POINTS, nous devons obligatoirement utiliser #CHAMP_SQL{points} sinon le compilateur de SPIP croira que nous faisons appel #POINTS qui ne peut se trouver que dans une boucle avec le critre {recherche}. Remarque : La balise #CHAMP_SQL ne peut tre dfinie dynamiquement, cest obligatoirement une constante qui doit servir de paramtre. #CHAMP_SQL{points} fonctionne mais pas #CHAMP_SQL{#GET{champ}}.
#CHAPO
Dcembre 2008
85/186
#CHARSET
Mars 2010 #CHARSET affiche le jeu de caractres utilis par le site. Sa valeur par dfaut utf-8 (jeu de caractres dit universel ).
Ce charset est configurable depuis la page de configuration du site : ecrire/?exec=config_lang ( Jeu de caractres du site ).
#CHEMIN
Octobre 2009 maj : Dcembre 2009
La balise #CHEMIN{fichier.ext} retourne le chemin complet vers fichier.ext, quil se trouve dans le dossier squelettes/, dans le dossier dun plugin, la racine, dans squelettes-dist/ etc.
#CHEMIN parcourt lensemble du spip_path dans un ordre prcis (voir ci-aprs) jusqu trouver le fichier recherch :
dabord : o ./squelettes/ puis, dans lordre alphabtique du nom de leur dossier et indpendamment de leur place dans auto/ ou non, les plugins ncessitant dautres plugins : o ./plugins/auto/plugin_A_ncessitant_plugin_X/ o ./plugins/plugin_B_ncessitant_plugin_Y/ o ./plugins/plugin_C_ncessitant_plugin_X/ puis, sans ordre particulier, les autres plugins : o ./plugins/plugin_Y/ o ./plugins/plugin_G o ./plugins/plugin_X/ o ./plugins/plugin_E puis la racine du site : o ./ enfin, et dans cet ordre, les 3 rpertoires : o ./squelettes-dist/ o ./prive/ o ./ecrire/
Exemples :
<link rel="stylesheet" href="#CHEMIN{le_style.css}" type="text/css" /> <img src="#CHEMIN{images/mon_logo.png}" alt="" />
86/186
#COMPTEUR_BOUCLE
Septembre 2009 maj : mars 2010 #COMPTEUR_BOUCLE retourne le numro de litration actuelle de la boucle. On peut par exemple lutiliser pour numroter des rsultats : <BOUCLE_art(ARTICLES) {par date} {inverse} {0,10}> #COMPTEUR_BOUCLE - #TITRE<br> </BOUCLE_art>
#CONFIG
Mai 2010
La balise technique #CONFIG permet dafficher la valeur dun rglage stock dans la table spip_meta. retourne le contenu brut dune valeur contenu dans la table spip_meta Exemple : Connatre si les visiteurs sont accepts sur le site : [Visiteurs: (#CONFIG{accepter_visiteurs})] affichera "oui" ou "non".
#CONFIG
Il est possible de fournir une valeur par dfaut si le contenu de la meta est vide.
#CONFIG{nom_meta,valeur_defaut}
Attention : la balise retournant la valeur brute depuis la table spip_meta, les valeurs stockes sous forme de tableau srializ sont retournes telles quelles.
#DATE
Novembre 2009 maj : aot 2010 #DATE est la date de mise en ligne. (Modifiable aprs la mise en ligne de larticle, de la brve, etc. La date dune rubrique est celle de son lment le plus rcent.)
Si une date est rentre de faon incomplte, vous devez utiliser un "*" aprs la balise #DATE pour un affichage comprhensible dans la partie public. Par exemple, avec [(#DATE*|affdate)] : - votre date a t rentre sous la forme "nc-juillet-2009", vous aurez laffichage "juillet 2009" - votre date a t rentre sous la forme "nc-non connu-2009", vous aurez laffichage "2009"
87/186
#DATE_MODIF, #DATE_REDAC
Dcembre 2008
- Les balises de dates : #DATE, #DATE_REDAC, #DATE_MODIF sont explicites dans la documentation sur La gestion des dates .
#DATE_NOUVEAUTES
Avril 2010
La balise #DATE_NOUVEAUTES affiche la date du dernier envoi du mail prsentant les nouveauts si cette fonction a t slectionne dans la boite Annonce des nouveauts de la page configuration du site ecrire/?exec=config_contenu (si cette fonction est dsactive la balise retourne 1970-01-01 01:00:00).
#DESCRIPTIF
Dcembre 2008
#DESCRIPTIF_SITE_SPIP
Septembre 2009 maj : mars 2010 #DESCRIPTIF_SITE_SPIP affiche, comme son nom lindique, le descriptif du site, que lon renseigne dans la page de configuration gnrale du site.
#DISTANT
Mars 2010
La balise #DISTANT affiche oui ou non selon que le document est distant (rfrenc par une url) ou pas. Exemple (afficher une imagette pour indiquer que le document est hberg sur un site externe) :
[(#DISTANT|=={oui}|oui) <img src="ext.png" alt="">]
88/186
#DOSSIER_SQUELETTE
mars 2010
#DOUBLONS
Novembre 2009 maj : juillet 2010
ou #DOUBLONS{mots,famille} donne letat des doublons (MOTS) cet endroit sous forme de tableau did_mot array(1,2,3,...)
#DOUBLONS{mots} #DOUBLONS
tout seul donne la liste brute de tous les doublons donne la chaine brute ",1,2,3,..." (changera si la gestion des doublons
#DOUBLONS*{mots}
dans le squelette appelant (avant lappel de lINCLURE). pour rcuprer un tableau de doublons depuis un INCLURE, il conviendra de ne faire retourner par cet INCLURE que #DOUBLONS*{articles, B} et, dans le squelette appelant, dutiliser #SET{ret, #INCLURE{fond=noisette, env, doublons}|explode{','}} : le #GET{ret} rsultant pouvant alors tre utilis dans un critre de boucle ({id_article IN #GET{ret}}).
#EDIT
avril 2010 #EDIT{xxx}
dans la class dun lment entourant la balise #XXX permet de la rendre ditable laide du plugin crayons (voir la documentation sur spip-contrib)
89/186
#EDITABLE
5 juillet 2010
Utilise lintrieur dun squelette de formulaire CVT, la balise #EDITABLE indique si linternaute doit saisir les donnes dun formulaire. En la testant, le squelette peut masquer la partie saisie du formulaire lorsquil est appel aprs la validation. Lexemple de Formulaires CVT par lexemple est :
[<p class='formulaire_ok'>(#ENV*{message_ok})</p>] [<p class='formulaire_erreur'>(#ENV*{message_erreur})</p>] [(#EDITABLE|oui) <form action='#ENV{action}' method='post'> #ACTION_FORMULAIRE{#ENV{action}} <label>Votre email</label> [<span class='erreur'>(#ENV**{erreurs}|table_valeur{email})</span>] <input type='text' name='email' value='#ENV{email}' /> <br /> <label>Votre message</label> [<span class='erreur'>(#ENV**{erreurs}|table_valeur{message})</span>] <textarea name='message'>#ENV{message}</textarea> <input type='submit' name='ok' value='ok' /> </form> ]
Si on vient daccepter les donnes, on en informe linternaute. Si il y a une erreur, on laffiche si on en en phase de saisie, on affiche le formulaire html
#EMAIL
mars 2010
La balise #EMAIL affiche ladresse e-mail dun auteur. Elle est utilisable dans une boucle AUTEURS, une boucle FORUMS ou une boucle SIGNATURES.
#EMAIL_WEBMASTER
Mars 2010
La balise #EMAIL_WEBMASTER affiche ladresse mail du webmestre telle quelle a t renseigne dans la page de configuration du site.
90/186
#EMBED_DOCUMENT
Mars 2010
#ENV
Fvrier 2009 maj : mai 2010
Balise permettant dobtenir la valeur dune variable fournie par un #INCLURE ou depuis une url
[(#ENV{variable, valeur_par_defaut})] #ENV{variable}
contexte) [1]. Le squelette peut recevoir cette variable soit de lURL (la requte HTTP), soit du fichier qui linclut, soit encore dun retour de formulaire. Exemple de variable passe dans lurl : spip.php?rubrique24&id_mot=5 Dans rubrique.html, #ENV{id_mot} vaut 5. Exemple de variable passe dans un INCLURE :<INCLURE{fond=mon_squelette}
{id_article=136}>
Utile quand un squelette est inclu partir de diffrents squelettes, et que lon en attend un comportement diffrent selon le contexte. Court-circuiter les traitements de scurit Par dfaut, SPIP applique les fonctions interdire_scripts et entites_html la balise #ENV. Comme pour toute balise, on peut supprimer les traitements automatiques de SPIP avec #ENV* et #ENV** (voir, pour lusage de * et **, larticle #BALISE* et #BALISE**). retourne la variable sans appliquer le filtre entites_html, donc sans transformer tous les caractres spciaux en entits HTML. #ENV** retourne la variable sans appliquer la fonction interdire_scripts. Elle renvoie donc le PHP excut. [2] Ceci peut poser un problme de scurit si cette variable reoit une injection de code. Voil pourquoi interdire_scripts est l par dfaut pour invalider les < et autres <script language=php> contenus dans la variable.
#ENV*
91/186
Nanmoins #ENV** trouve une application lorsque lon construit un formulaire. Lutilisation de la double toile est ainsi ncessaire dans laffichage des formulaires CVT. Par exemple, pour rcuprer le tableau des erreurs dans le squelette du formulaire :
#ENV**{erreurs}|table_valeur{clef}...
Notes [1] Par scurit, #ENV ne rcupre (ni naffiche) jamais les variables nommes PHPSESSID ou dont le nom commence par var_ (comme par exemple var_mode et var_profile). [2] imaginons un formulaire tout simple :
<form method="get"> <input type="text" name="test" value="#ENV{test}"> <input type="submit"> </form> #ENV{test}<br /> #ENV*{test}<br /> #ENV**{test}<br />
dans le formulaire affich, entrons : <?php echo date('Y-m-d'); ?> dans le champ test , puis validons. - #ENV{test} renverra (source html) : <?php echo date('Y-m-d'); ?> - #ENV*{test} renverra (source html) : <?php echo date('Y-m-d'); ?> - #ENV**{test} renverra (source html) : 2009-02-12 cest dire le php excut.
#EVAL
Mars 2010
La balise technique #EVAL{} retourne lvaluation de lexpression PHP passe en argument #EVAL{2*7} affiche donc 14, #EVAL{_DIR_IMG_PACK} affiche le chemin vers le rpertoire ecrire/img_pack/, #EVAL{phpversion()} affiche la version php du serveur #EVAL{$_SERVER['REQUEST_URI']} ... Cette balise interprtant du code PHP, elle est utiliser avec prcaution.
#EXTENSION
Mars 2010 #EXTENSION
affiche lextension de format du fichier, par exemple : pdf, jpeg, mov, ra...
92/186
#FICHIER
Mars 2010
La balise #FICHIER affiche lURL relative du document [1] ; par exemple : IMG/pdf/mon_document.pdf. Pour extraire le nom seul du fichier, on pourra utiliser le filtre : |basename : [(#FICHIER|basename)] (affichera mon_document.pdf). Une utilisation intressante de cette balise est combine avec le filtre |image_reduire, dans le cadre dun portfolio pour afficher une rduction de limage plutt que de son logo ; par exemple en utilisant
[<a href="#URL_DOCUMENT">(#FICHIER|image_reduire{500}) </a>]
Notes
[1] dans le cas dun document distant, #FICHIER affiche lURL complte vers le document (http://autre_site.com/rep/document.ext)
#FILTRE
juillet 2010 #FILTRE{f}
Cette balise prend en paramtre un filtre ou une combinaison de filtres. Ex : #FILTRE{supprimer_tags|filtrer_entites|trim} Place la fin dun squelette elle applique son paramtre en tant que filtre lensemble du squelette gnr, une fois celui-ci calcul. Prcision : Ce filtrage sapplique aux #INCLURE du squelette recevant cette balise , mais ne sapplique pas aux <INCLURE> contenu dans ce squelette. Exemple : dans le plugin notification, un squelette inscription.html gnre le contenu dun mail. Pour rendre ce contenu adapt un mail, le rsultat du squelette est trait par une srie de filtres destins enlever les tags HTML, les espaces redondants et les entits HTML : #FILTRE{supprimer_tags|filtrer_entites|trim} (voir : http://zone.spip.org/trac/spipzone/browser/_plugins_/notifications/notifications/inscription.html?rev=38419)
93/186
#FOREACH
Dcembre 2009 maj : mars 2010
La balise #FOREACH permet de boucler sur un contenu quivalent un tableau calcul dans le squelette en appliquant pour chacun de ses lments un modle SPIP.
#FOREACH{balise, modele}
Exemples - Dans un squelette quelconque, lutilisation de #FOREACH{env} affichera toutes les variables de la balise #ENV de la manire suivante :
page=> test_boucle date=> 2009-12-22 22:44:27 date_default=> 1 date_redac=> 2009-12-22 22:44:27 date_redac_default=> 1
Autrement dit, pour chaque lment du tableau associatif php que reprsente la balise #ENV, #FOREACH appliquera le modle foreach.html (cf. plus bas). - On peut vouloir afficher le contenu dune autre balise. #CONFIG par exemple. Pour cela, on passera le nom de la balise comme premier paramtre :
#FOREACH{config}
charset_sql_base=> utf8 charset_collation_sql_base=> utf8_general_ci charset_sql_connexion=> utf8 version_installee=> 14558 nouvelle_install=> 1 plugin=> a:3:{s:3:"CFG";a:4:{s:3:"nom";s:90:"<multi> [fr]cfg: moteur
de configuration [de]cfg: Konfigurationsmotor </multi>";s:4:"etat";s:6:"stable";s:3:"dir";s:8:"auto/cfg";s:7:"versi on";s:6:"1.14.1";}}
Et pour toute balise SPIP reprsentant un tableau php on aura un rsultat similaire (voir #ARRAY). Fabriquer un modle ddi Le modle foreach.html est celui qui est appliqu par dfaut. On le trouve dans squelettes-dist/modeles/. Il est possible de le modifier, mais on peut aussi fabriquer un modle ddi une balise et le placer dans son propre dossier squelettes/modeles/. Le modle foreach_balise.html correspond #FOREACH{balise}.
94/186
On peut aussi souhaiter crer des modles gnraux et les utiliser pour telle ou telle balise. Par exemple, pour des listes non numres un modle nomm squelettes/modeles/foreach_ul_li.html, qui contiendrait : <li><a href="#ENV{valeur}">#ENV{cle}</a></li> serait appel par [<ul>(#FOREACH{ENV, foreach_ul_li})</ul>] et afficherait (source html) :
<ul> <li><a <li><a <li><a <li><a <li><a </ul> href="test_boucle">page</a></li> href="2009-12-22 22:54:40">date</a></li> href="1">date_default</a></li> href="2009-12-22 22:54:40">date_redac</a></li> href="1">date_redac_default</a></li>
Plus de valeurs Enfin, dans les cas plus complexes, on peut passer plus de valeurs au modle en respectant la structure de tableau suivante pour la balise que vous aurez conue :
array ( 'cle' => array ( 'val1' => 'valeur1' 'val2' => 'valeur2' 'val3' => 'valeur3' 'val4' => 'valeur4' ) 'cle2' => array ( 'val1' => 'valeur1bis' 'val2' => 'valeur2bis' 'val3' => 'valeur3bis' 'val4' => 'valeur4bis' ) )
#FORMULAIRE_ADMIN
13 aot 2010
La balise #FORMULAIRE_ADMIN est une balise optionnelle qui permet de placer les boutons dadministration ( recalculer cette page , etc.) dans ses squelettes. Lorsquun administrateur parcours le site public, si cette balise est prsente, elle sera remplace par les boutons dadministration, sinon, les boutons seront placs la fin de la page.
95/186
#FORMULAIRE_ECRIRE_AUTEUR
13 aot 2010
La balise #FORMULAIRE_ECRIRE_AUTEUR fabrique et affiche un formulaire permettant dcrire lauteur. Il faut que le serveur hbergeant le site accepte denvoyer des mails. Ce systme permet de ne pas divulguer ladresse email de lauteur. NB : pour que le formulaire soit affich il faut que lauteur ait renseign le champ email de sa fiche auteur.
#FORMULAIRE_FORUM
Janvier 2009
- #FORMULAIRE_FORUM fabrique et affiche le formulaire permettant de poster un message rpondant cet article. Pour en savoir plus, voir aussi Les formulaires .
#FORMULAIRE_INSCRIPTION
7 septembre 2010
La balise #FORMULAIRE_INSCRIPTION affiche le formulaire permettant linscription de nouveaux rdacteurs. Celui-ci ne saffiche que si vous avez autoris linscription automatique depuis le site public (sinon, cette balise naffiche rigoureusement rien). Linscription ncessite lenvoi des informations de connexion (login et mot de passe) par email ; ce formulaire ne fonctionne donc que si votre hbergeur autorise lenvoi de mails par PHP. est lquivalente de la prcdente, pour linscription des visiteurs, appels crire dans les forums (rservs aux visiteurs enregistrs), option qui se dtermine dans la partie prive configuration/interactivit/Mode de fonctionnement par dfaut des forums publics. Le paramtre 6forum correspond lintitul du statut dauteur dsir lors de linscription.
[(#FORMULAIRE_INSCRIPTION{6forum})]
Aprs la validation, un message avertit le visiteur : "Votre nouvel identifiant vient de vous tre envoy par email."
#FORMULAIRE_SIGNATURE
Janvier 2009
- #FORMULAIRE_SIGNATURE fabrique et affiche le formulaire permettant de signer la ptition associe cet article.
96/186
#GET
Dcembre 2009 maj : mars 2010
#HAUTEUR
Mars 2010 #HAUTEUR
retourne la hauteur dun document de type image (png, gif ou jpg) exprime en pixels (retourne 0 pour les autres types de document).
#HTTP_HEADER
24 mars 2010
La balise #HTTP_HEADER{argument} permet de modifier lentte HTTP de la page retourne par SPIP. Remarques - #HTTP_HEADER ne peut tre prcde daucun caractre ni despace. - #HTTP_HEADER ne doit pas tre prcd de code html. Exemple :
pas bon !
bon !
- Lutilisation de cette balise supprime les boutons dadministration. - Cette balise ne peut pas tre utilise dans des squelettes inclus via la syntaxe <INCLURE>. Exemples dutilisation - #HTTP_HEADER{Content-Type: text/css}, permet de prciser que le squelette (dont lextension reste .html) est en fait une feuille de style. Voir pour plus dinformations larticle sur SPIP-Contrib : http://www.spip-contrib.net/Feuille-de-style-dynamique-des. - #HTTP_HEADER{Content-Type: text/plain; charset=#CHARSET} pour la version texte dun article. Manuel de rfrence des boucles et balises 97/186
pour un
#ID_ARTICLE
Dcembre 2008
- #ID_ARTICLE affiche lidentifiant unique de larticle. Utile pour fabriquer des liens hypertextes non prvus (par exemple vers une page Afficher au format impression ).
#ID_DOCUMENT
Janvier 2010
#ID_RUBRIQUE
Dcembre 2008
#ID_SECTEUR
Dcembre 2008
- #ID_SECTEUR affiche lidentifiant du secteur dont dpend larticle (le secteur tant la rubrique parente situe la racine du site).
98/186
#INSERT_HEAD
Juin2010 #INSERT_HEAD
insre automatiquement les scripts et feuilles de style fournis par SPIP et ses
plugins. La balise #INSERT_HEAD doit se situer entre les balises <head> et </head> de vos squelettes. Elle permet SPIP, ses extensions, ainsi quaux plugins ventuels, dajouter du contenu entre ces deux balises html. Une fonction de compression existe. Cette fonctionnalit optimise la consommation de la bande passante pour lensemble des lments transmis via cette balise en enlevant tous les espaces et commentaires "superflues" des fichiers .js et .css de tous les squelettes. On peut activer ou dsactiver cette fonction dans le panneau de configuration de la partie prive. Depuis SPIP 2.1, il est fortement recommand dutiliser systmatiquement cette balise dans ses squelettes. Cette recommandation est due au passage en extension de certaines fonctionnalits du core qui se comportent alors comme des plugins.
#INSERT_HEAD_CSS
Juillet 2010 #INSERT_HEAD_CSS
Les squelettes peuvent surcharger ces feuilles de style en fonction de leur ordre dappel dans les squelettes. A noter que, pour conserver la compatibilit avec les squelettes existants, si la balise #INSERT_HEAD_CSS nest pas prsente dans le squelette, #INSERT_HEAD insrera son contenu (il est noter alors que lordre dinsertion ne sera pas optimale)
99/186
#INTRODUCTION
Janvier 2009 maj : Septembre 2009
- #INTRODUCTION affiche le descriptif de larticle, sinon affiche les 600 premiers caractres de larticle (chapo puis texte). Pour prciser spcifiquement lintroduction, il est possible dencadrer la portion de texte voulue de son texte (en mode dition) par les tags <intro> et </intro> :
La foule des bourgeois et des bourgeoises s'acheminait donc de toutes parts ds le matin, maisons et boutiques fermes, vers l'un des trois endroits dsigns. <intro>Chacun avait pris parti, qui pour le feu de joie, qui pour le mai, qui pour le mystre.</intro> Il faut dire, l'loge de l'antique bon sens des badauds de Paris, que la plus grande partie de cette foule se dirigeait vers le feu de joie, lequel tait tout fait de saison, ou vers le mystre, qui devait tre reprsent dans la grand'salle du Palais bien couverte et bien close, et que les curieux s'accordaient laisser le pauvre mai mal fleuri grelotter tout seul sous le ciel de janvier dans le cimetire de la chapelle de Braque. _ {(v.hugo)}
affichera Chacun avait pris parti, qui pour le feu de joie, qui pour le mai, qui pour le mystre.
#INTRODUCTION
Lorsquelle coupe un texte de plus de 600 caractres, la balise #INTRODUCTION ajoute lextrait des points de suite ((...)) on peut vouloir modifier ces points de suite et pour cela, il faut ajouter dans mes_options.php :
define('_INTRODUCTION_SUITE', 'ce que je veux ici');
#LANG
Dcembre 2008
: ces balises dfinissent le sens dcriture de la langue du contexte actuel (par exemple, de larticle quon est en train dafficher). Voir larticle Raliser un site multilingue pour plus dinformation.
100/186
#LARGEUR
Mars 2010 #LARGEUR
retourne la largeur dun document de type image (png, gif ou jpg) exprime en pixels (retourne 0 pour les autres types de document).
#LESAUTEURS
Janvier 2009
- #LESAUTEURS affiche les auteurs de cet article, avec lien vers leur propre page publique (afin de pouvoir directement leur crire ou de consulter la liste des articles quils ont publi). Cela vite de crer une boucle AUTEURS pour obtenir le mme rsultat.
#LOGO_ARTICLE
Aot 2010
Cette balise affiche le logo de larticle, ventuellement avec la gestion du survol. Deux balises permettent de rcuprer une seule des deux variantes du logos : #LOGO_ARTICLE_NORMAL affiche le logo sans survol ; #LOGO_ARTICLE_SURVOL affiche le logo de survol. - Dans un squelette, le logo de larticle sinstalle de la manire suivante : [(#LOGO_ARTICLE|alignement|adresse)] Lalignement ne peut tre que left, right, center, top ou bottom. Cet alignement sera traduit dans le code html par class=" ... " (penser dfinir la classe correspondante dans ses feuilles de style). Ladresse est lURL de destination du lien de ce logo (par exemple #URL_ARTICLE). Si lon nindique pas dadresse, limage nest pas cliquable. Exemple :
[(#LOGO_ARTICLE|right|#URL_ARTICLE)]
affiche le logo droite avec une lien vers la page de larticle. - #LOGO_ARTICLE_RUBRIQUE affiche le logo de larticle, ventuellement remplac par le logo de la rubrique sil nexiste pas de logo spcifique larticle. - Si lon veut rcuprer directement le nom du fichier du logo (alors que les balises prcdentes fabriquent le code HTML complet pour insrer limage dans la page), par exemple pour afficher une image en fond de tableau, on utilisera le filtre |fichier comme suit :
[(#LOGO_ARTICLE|fichier)]
101/186
- Les filtres dimage (recadrage, rduction, masque...) peuvent sappliquer sur le logo de larticle. Exemple :
[(#LOGO_ARTICLE||image_reduire{200,200})]
affiche le logo de larticle, dont la plus grande des 2 tailles (si elle est suprieure 200px) est rduite 200px et lautre en proportion (voir le filtre image_reduire). - Il est possible dassocier un attribut alt au logo de larticle en utilisant le filtre inserer_attribut :
[(#LOGO_ARTICLE|#URL_ARTICLE||inserer_attribut{alt,#TITRE})]
utilise le titre de larticle comme attribut alt du logo. - Depuis SPIP 2.1 les filtres de logos ont la mme syntaxe que tous les autres. Un seul pipe suffit :
[(#LOGO_XXX|filtre)]
Mais : - #LOGO_XXX** renvoie le fichier - #LOGO_XXX{top/left/right/center/bottom} gnre un alignement - #LOGO_XXX{url} gnre un logo qui pointe vers lurl.
#LOGO_ARTICLE_RUBRIQUE
juillet 2010
Cette balise affiche le logo de larticle, ventuellement remplac par le logo de la rubrique sil nexiste pas de logo spcifique larticle. - Dans un squelette, ce logo sinstalle de la manire suivante : [(#LOGO_ARTICLE_RUBRIQUE|alignement|adresse)] Lalignement ne peut tre que left, right, center, top ou bottom. Cet alignement sera traduit dans le code html par class=" ... " (penser dfinir la classe correspondante dans ses feuilles de style). Ladresse est lURL de destination du lien de ce logo (par exemple #URL_ARTICLE). Si lon nindique pas dadresse, limage nest pas cliquable. Exemple :
[(#LOGO_ARTICLE_RUBRIQUE|center|#URL_ARTICLE)]
affiche le logo au centre avec une lien vers la page de larticle. - Les filtres dimage (recadrage, rduction, masque...) peuvent sappliquer sur ce logo. Exemple :
[(#LOGO_ARTICLE_RUBRIQUE||image_reduire{200,200})]
102/186
affiche le logo de larticle ou dfaut celui de sa rubrique, dont la plus grande des 2 tailles (si elle est suprieure 200px) est rduite 200px et lautre en proportion (voir le filtre image_reduire).
103/186
#LOGO_AUTEUR
Aot 2010
Cette balise affiche le logo de lauteur, ventuellement avec la gestion du survol. Cette balise affiche le logo de lauteur, ventuellement avec la gestion du survol. Les variantes #LOGO_AUTEUR_NORMAL et #LOGO_AUTEUR_SURVOL permettent un affichage plus fin de ces deux variantes du logo. Depuis SPIP 2.1, lappel des diverses balises #LOGO_xxx ainsi que leur argumentation ont t modifis. - Dans un squelette, le logo sinstalle de la manire suivante :
[(#LOGO_AUTEUR|alignement|adresse)]
Lalignement ne peut tre que left, right, center, top ou bottom. Cet alignement sera traduit dans le code html par class=" ... " (penser dfinir la classe correspondante dans ses feuilles de style). Ladresse est lURL de destination du lien de ce logo (par exemple #URL_AUTEUR). Si lon nindique pas dadresse, limage nest pas cliquable. Exemple :
[(#LOGO_AUTEUR|left|#URL_AUTEUR)]
affiche le logo de lauteur gauche avec un lien sur le logo vers ladresse de la fiche auteur. - Les filtres dimage peuvent sappliquer sur le logo de lauteur. Exemple :
[(#LOGO_AUTEUR||image_reduire{200,200})]
affiche le logo de lauteur, dont la plus grande des 2 tailles (si elle est suprieure 200px) est rduite 200px et lautre en proportion (voir le filtre image_reduire). - Le squelette auteur.html de la dist propose dafficher un favicon personnalis sur la page auteur partir du logo :
[(#MODELE{favicon}{favicon=#LOGO_AUTEUR})]
Depuis SPIP 2.1 les filtres de logos ont la mme syntaxe que tous les autres. Un seul pipe suffit :
[(#LOGO_XXX|filtre)]
Mais : - #LOGO_XXX** renvoie le fichier - #LOGO_XXX{top/left/right/center/bottom} gnre un alignement - #LOGO_XXX{url} gnre un logo qui pointe vers lurl.
104/186
#LOGO_AUTEUR_NORMAL
avril 2010
Cette balise affiche le logo de lauteur, sans survol. Dans un squelette, il sutilise comme la balise #LOGO_AUTEUR :
[(#LOGO_AUTEUR_NORMAL|alignement|adresse)]
#LOGO_AUTEUR_SURVOL
juillet 2010
Cette balise affiche ltat de survol du logo de lauteur. Autrement dit le passage de la souris sur le logo de lauteur dclenche laffichage du logo de survol. - Par dfaut, les logos de survol ne sont pas activs dans SPIP ; on associe alors un seul logo un objet (article, auteur, rubrique...) Pour pouvoir grer laffichage dun logo de survol, il faut tout dabord activer loption "Utiliser les logos de survol " dans linterface dadministration de SPIP, sur la page "Configuration > Contenu du site" (ecrire/?exec=configuration).
affiche le logo de lauteur et au passage de la souris le logo de survol sil existe. Le code html est gnr automatiquement par SPIP. - Si lon souhaite afficher directement le logo de survol, il faudra indiquer, dans la boucle AUTEURS du squelette :
[(#LOGO_AUTEUR_SURVOL|alignement|adresse)]
- Si lon souhaite afficher le logo de survol sil existe, et sinon le logo de larticle il faudra crire, dans la boucle AUTEURS du squelette :
[(#LOGO_AUTEUR_SURVOL||sinon{#LOGO_AUTEUR})]
105/186
#LOGO_DOCUMENT
Avril 2010
Affiche limage-logo associe un document. La balise #LOGO_DOCUMENT utilise dans une boucle DOCUMENTS affiche limage-logo associe au document :
Soit une icone standard dtermine par le type du fichier [1] ; Soit, seulement pour les documents-image et seulement si la gnration automatique des miniatures des images. a t slectionne en configuration sur la page ecrire/?exec=config_fonctions, une rduction du document image ; Soit la vignette personnalise qui a t associe manuellement au document lui-mme.
Notes
...
#LOGO_SITE_SPIP
Avril 2010 #LOGO_SITE_SPIP
affiche le logo du site. Cette image peut tre change depuis lespace priv en cliquant sur "Configuration".
Cette balise renvoie le logo du site (cf. IMG/siteon0.png) qu'il ne faut pas le confondre avec le logo par dfaut des rubriques, aussi dsign "logo standard des rubriques" (cf. IMG/rubon0.png) qui, lui, peut tre chang en cliquant sur "dition" depuis lespace priv.
#MENU_LANG, #MENU_LANG_ECRIRE
Avril 2010 #MENU_LANG
et #MENU_LANG_ECRIRE : ces balises fabriquent et affichent un menu de langues permettant au visiteur dobtenir la page en cours dans la langue choisie. La premire balise affiche la liste des langues du site ; la seconde la liste des langues de lespace priv (elle est utilise sur la page de connexion lespace priv).
106/186
#MIME_TYPE
Septembre 2009 maj : Mars 2010 #MIME_TYPE affiche le type MIME du fichier par exemple : image/jpeg , cf. Type de mdia internet.
#NOM_SITE
Dcembre 2008
- #NOM_SITE et #URL_SITE affichent le nom et lurl du lien hypertexte de larticle (si vous avez activ cette option).
#NOM_SITE_SPIP
mars 2010
affiche le nom du site. linstallation dun SPIP vierge, le nom du site par dfaut est "Mon site SPIP". Pour le modifier, vous devez cliquer sur "Configuration" et changer le texte dans le champ "Nom de votre site".
#NOM_SITE_SPIP
#NOTES
Janvier 2009
- #NOTES affiche les notes de bas de page (calcules partir de lanalyse du texte).
107/186
#PARAMETRES_FORUM
Janvier 2009
- #PARAMETRES_FORUM fabrique et affiche la liste des variables exploites par le formulaire permettant de rpondre cet article. Par exemple :
[<a href="spip.php?page=forum&(#PARAMETRES_FORUM)">Rpondre cet article</a>]
On peut lui passer un paramtre spcifiant ladresse de retour aprs avoir post le message. Par exemple :
<a ref="spip.php?page=forum&(#PARAMETRES_FORUM{#SELF})"> Rpondre cet article</a>
renverra le visiteur sur la page actuelle une fois que le message a t valid.
#PETITION
Janvier 2009 maj : fvrier 2010
- #PETITION affiche le texte de la ptition si elle existe. Si elle existe mais que le texte est vide, retourne un espace (une chane non vide sans incidence dans une page html). Ceci permet de tester lexistence dune ptition dans une boucle (ARTICLES). Exemple tir de la dist, le squelette inc-petition.html nest inclus que si la ptition de larticle est active :
[(#PETITION|?{' '})<INCLURE{fond=inc-petition}{id_article}>]
Exemple plus labor : on inclut le squelette inc-petition.html, soit sil y a des signatures, soit sil y a une ptition. En effet, lorsque lon supprime une ptition via lespace priv, afin de clore la possibilit de la signer, le code prcdent supprime galement la liste des signatures.
<BOUCLE_signatures(SIGNATURES){id_article}{0,1}> <INCLURE{fond=inc-petition}{id_article}> </BOUCLE_signatures> [(#PETITION|?{' '}) <INCLURE{fond=inc-petition}{id_article}> ] <//B_signatures>
108/186
#PLUGIN
Aot 2010
Cette balise permet, soit de tester la prsence dun plugin actif sur le site, soit daccder aux informations contenues dans le fichier plugin.xml si le plugin est actif (aucune information nest fournie si le plugin est inactif).
#PLUGIN{prefixe_du_plugin} renvoie true si le plugin est actif. #PLUGIN{prefixe_du_plugin, information_demandee} renvoie linformation
demande sur le plugin comme sa version, son nom, sa description... #PLUGIN{prefixe_du_plugin, tout} renvoie toutes les informations du plugin sous forme dun tableau associatif qui pourra tre affect une variable pour tre affich en utilisant le filtre |table_valeur.
Le prfixe du plugin est le champ crit dans la balise XML <prefix> du fichier plugin.xml, fichier qui se trouve toujours la racine du rpertoire contenant les scripts du plugin. Lutilisation la plus frquente de la balise #PLUGIN consiste tester ltat dactivit du plugin pour afficher un code HTML :
[(#PLUGIN{prefixe_du_plugin}|oui) blablabla...] plugin prefixe_du_plugin est activ.
affichera "blablabla..." si le
#POPULARITE
Dcembre 2008
- #POPULARITE affiche le pourcentage de popularit de cet article ; voir la documentation La popularit des articles .
#PUCE
avril 2010
affiche une puce (pas complexe comprendre) image prsente la racine de la dist. Vous pouvez personnaliser cette puce-image en crant un fichier "puce.gif" et le placer dans un dossier "squelettes".
#PUCE
109/186
#PS
Dcembre 2008
#REM
Mars 2010
La balise #REM ne produit aucun affichage : elle permet de commenter le code des squelettes. La balise #REM permet de commenter le code des squelettes :
[(#REM) Ceci est une remarque ]
La balise et sa partie optionnelle sont purement et simplement supprimes lors du calcul du squelette. [(#REM)] napparat pas dans le code HTML du site public et ne produit donc aucun affichage. Attention toutefois aux effets pervers de #REM : la partie optionnelle dune balise ne devant pas contenir de boucle, lcriture ci-dessous
[(#REM) essai de boucle: ne pas afficher ! <BOUCLE_a(ARTICLES){...}{0,1}> #ID_ARTICLE - #TITRE </BOUCLE_a> ]
affichera (exemple) : [() essai de boucle : ne pas afficher ! 18 - Mon titre darticle ]
110/186
#SELF
Dcembre 2009 maj mars 2010 #SELF
SPIP. retourne lURL de la page courante. Les variables propres lexcution de SPIP (par exemple, var_mode) sont supprimes.
#SELF
Exemple : pour une page avec lurl spip.php?article25&var_mode=recalcul, la balise #SELF place dans article.html retournera spip.php?article25. Usages - Certaines balises de formulaires acceptent un paramtre pour prciser sur quelle page le visiteur doit tre redirig aprs avoir valid le formulaire. #SELF peut alors tre utilis pour quil revienne sur la page courante. Exemple : [(#FORMULAIRE_FORUM{#SELF})] - Avec le filtre |parametre_url, pour ajouter des variables dans lURL de la page courante. Exemple : [(#SELF|parametre_url{'id_mot','3'})] ajoute id_mot=3 lURL courante. Voir |parametre_url pour plus de dtails. - #SELF est utile dans les formulaires, pour que lutilisateur revienne la page courante aprs validation :
<form action="#SELF"> [(#SELF|form_hidden)] ... </form>
Le filtre |form_hidden calcule les champs cachs (hidden) du formulaire partir des arguments de #SELF. Voir |form_hidden. #SELF dans les squelettes inclus Lorsque lun des paramtres de lURL de la page doit tre rcupr dans un squelette inclus, #SELF doit tre ajout comme paramtre de lINCLURE. De cette faon, un cache diffrent du squelette inclus sera cr pour chaque URL (Ceci constitue une scurit contre une potentielle attaque XSS). - <INCLURE{fond=mon_squelette}{self=#SELF}> - <INCLURE{fond=mon_squelette}{self}> - <INCLURE{fond=mon_squelette}{env}> Ce paramtre {self=#SELF} doit galement tre pass un INCLURE lorsque lon veut utiliser la balise #PAGINATION dans un squelette inclus, tant donn que celle-ci repose sur la fonction self pour retrouver la variable debut_....
111/186
#SESSION
Janvier 2009 maj : mars 2010 #SESSION,
permet daccder aux informations lies au visiteur authentifi et de diffrencier automatiquement le cache en fonction du visiteur.
#SESSION permet daccder certaines informations propres au visiteur. Les informations pour un visiteur authentifi sont :
id_auteur : numro interne unique de lauteur nom : nom de signature de lauteur bio : courte biographie sur lauteur email : ladresse mail de lauteur nom_site : nom/titre du site internet de lauteur url_site : adresse http du site internet de lauteur login : identitifiant de connexion statut : 0minirezo (administrateur ou administrateur restreint), 1comite (rdacteur), 6forum (visiteur) maj : date et heure de la dernire modification des donnes de lauteur (toute modification sur les informations de lauteur contenues dans spip_auteurs telles que la dernire connexion, dernier message interne envoy, dernire modification de fiche perso...) pgp : cl pgp publique en_ligne : date et heure de la dernire connexion (pas celle en cours) imessage : oui si lauteur a envoy un message (priv) messagerie : prefs : liste des prfrences de lauteur (essentiellement affichage de lespace priv, souvenir du cookie...) o couleur => 1 6, code de la couleur de lespace priv o display => 1 (textes seuls) ; 2 (icones et textes) ; 3 (icones seuls) o cnx => vide ou perma (si connect plusieurs jours a t coch) cookie_oubli : hash du cookie de remplacement envoy si oubli, puis vide source : spip ou ldap lang : langue utilise dans lespace priv extra : liste des champs extra dclars pour lauteur auth : type dauthentification utilise (spip, ldap) cookie : oui si connect via cookie - inexistant si connect autrement (dont PHP_AUTH_USER) hash_env : code interne (hash) identifiant de faon unique la session du visiteur ip_change : FALSE tant que lIP du connect ne change pas. TRUE si lIP du connect change. SPIP recre alors une nouvelle session pour le primo connect (avec ip_change FALSE) ; cette nouvelle session dconnectant lventuel voleur de cookie.
De la mme manire, vous pouvez rserver laffichage dun champ selon le statut :
112/186
[(#SESSION{statut}|=={0minirezo}|oui)
#DESCRIPTIF]
#SESSION_SET
Mai 2009 maj : mai 2010
Linformation peut tre nouveau lue via #SESSION{variable} Cette balise permet donc dajouter une donne quelconque la session ouverte lors de laccs dun internaute Spip. Elle peut tre utilise sans modration pour conserver des lments dont on souhaite disposer tout au long de la session ouverte, sans avoir besoin de refaire une boucle ou une autre manipulation. La syntaxe La syntaxe de base est trs simple : #SESSION_SET{variable,valeur} Llment variable est un nom quelconque qui permettra de faire rfrence ce que lon veut utiliser, et valeur est son contenu. Mais un exemple vaut un long discours. Par exemple, je suis passionn par les lphants, et je voudrais lafficher tout moment ... Donc : #SESSION_SET{mapassion,lphants} mettra lphants dans ma passion. Pour lutiliser, cest trs simple : #SESSION{mapassion} affichera lphants. Utilisation pratique Vous navez vu ci-dessus quun exemple pas forcment trs concret. Lutilisation de la balise #SESSION_SET{variable,valeur} est particulirement pertinent ds lors quun accs un site se fait avec identification (du type login public) afin dajouter certaines donnes lies dune faon ou dune autre, dans la session de la personne logue. Si vous affichez la balise #SESSION sur une page, vous verrez quelle contient un grand nombre de donnes, notamment concernant lauteur ou visiteur identifi. Laffichage dune de ces donnes se fait directement via #SESSION, sauf si vous avez ajout des champs extra. Dans #SESSION{extra}, vous verrez safficher, en format texte le contenu de ce champ, sous la forme (par ex.)
113/186
a:2{s:10:"id_salarie";s;1:"1";s:7:"college";s:5:"Cadre";}.
Cela vous permet bien sr de vrifier quil y a bien ce que vous cherchez, mais laffichage laisse dsirer ... [1] Que faire pour remdier cela ? Utiliser #SESSION_SET bien sr, avec la balise #EXTRA !! Je voudrais afficher le collge : Dans une boucle AUTEURS, je vais ajouter ma session le collge de la personne identifie :
<BOUCLE_auteur(AUTEURS){id_auteur=#SESSION{id_auteur}}{tout}>#SESSION_SET{c ollege,(#EXTRA|college)} </BOUCLE_auteur>
Vous pouvez lutiliser tout seul, ou dans une boucle, soit pour afficher le collge, soit dans un critre spcifique, par ex.
<BOUCLE_articles(ARTICLES) {id_rubrique}{titre_mot = #SESSION{college}} {par num titre, date} {doublons} {pagination 20}>
Aller plus loin ? Rappelons-nous que spip 2.0.x permet maintenant douvrir des connexion des bases de donnes extrieures celles de spip, mme distantes ... Quoi de plus simple, maintenant, dajouter une ou des donnes issues de ces bases la session ouverte ... Une (ou plusieurs)boucles louverture, quelques #SESSION_SETvariable,valeur, et jai ma disposition, rapidement, tout ce que dont jai besoin pour dynamiser mon site ... Notes [1] rappel : pour afficher en mode brut (pour vrification) le contenu dtaill de la balise, il est possible dutiliser lcriture :
[<pre>(#SESSION*|unserialize|var_export{1})</pre>]
114/186
#SET et #GET
Dcembre 2009 maj : mars 2010
La balise #SET dfinit une variable qui sera utilisable dans lensemble du squelette. La balise #GET permet ensuite de rcuprer cette variable.
#SET{variable,valeur} #GET{variable} retourne "valeur".
La variable dfinie par #SET peut tre une chane de caractres ou un tableau. - Une chane de caractres :
#SET{ma_chaine, article de #NOM} #GET{ma_chaine}
affichera :
affichera :
permet de rcuprer et dafficher le nom du fichier dun document, dbarrass de son chemin daccs (path) et de son extension. Par exemple, si #FICHIER est IMG/pdf/Stats_Sejour_au_311207.pdf nous afficherons Stats_Sejour_au_311207. Lintrt ici dutiliser les balises #SET et #GET pour lexpression rgulire est de permettre lutilisation des crochets ([ et ]) dans le filtre |replace. - Le rsultat retourn par un INCLURE :
[(#SET{mon_retour, #INCLURE{fond=calculs}})]
115/186
Si variable na pas t dfinie par un #SET{variable, valeur} pralable, il est possible de prciser une valeur par dfaut lors de linsertion de la balise #GET : #GET{variable, valeur_par_defaut} retournera valeur_par_defaut, si variable na pas t dfinie auparavant. Attention : cette mthode nattribue pas valeur_par_defaut variable . Porte de la variable dfinie par #SET Les valeurs dfinies par la balise #SET restent locales au squelette o elles ont t dfinies. Ainsi, la valeur dune variable dfinie par un SET dans un fichier inclu ne pourra pas tre rcupre par le GET correspondant dans le fichier incluant.
#SOUSTITRE
Dcembre 2008
#SQUELETTE
Mars 2009 #SQUELETTE
#SURTITRE
Dcembre 2008
#TAILLE
8 mars
affiche le poids en octets du document. Pour de gros fichiers, cette valeur devient rapidement inutilisable ; on pourra donc lui appliquer le filtre |taille_en_octets, qui affichera successivement en octets, en kilooctets, ou mme en mgaoctets :
#TAILLE [(#TAILLE|taille_en_octets)]
116/186
#TEXTE
Dcembre 2008
#TITRE
Dcembre 2008
#TOTAL_BOUCLE
Septembre 2009 maj : Mars 2010
La balise #TOTAL_BOUCLE retourne le nombre total de rsultats affichs par la boucle. On peut lutiliser dans la boucle, dans ses parties optionnelles avant et aprs ou mme dans la partie alternative aprs la boucle. Par exemple, pour afficher le nombre de documents associs un article :
<BOUCLE_art(ARTICLES){id_article}> <BOUCLE_doc(DOCUMENTS) {id_article}></BOUCLE_doc> [il y a (#TOTAL_BOUCLE) document(s).] <//B_doc> </BOUCLE_art>
#TOTAL_UNIQUE
Octobre 2009
La balise #TOTAL_UNIQUE affiche le nombre dlments fitrs par le filtre |unique. On utilisera #TOTAL_UNIQUE pour afficher le nombre de fois o #BALISE a t filtre par |unique et #TOTAL_UNIQUE{famille} pour afficher le nombre de fois o #BALISE a t filtre par |unique{famille}.
117/186
#TYPE_DOCUMENT
Mars 2010 #TYPE_DOCUMENT
par exemple, pour un fichier dextension ods et de mime_type application/vnd.oasis.opendocument.spreadsheet , #TYPE_DOCUMENT affichera opendocument spreadsheet .
#URL_ARTICLE
Janvier 2009 maj : avril 2010
La balise #URL_ARTICLE affiche lurl relative (cest dire sans la partie http://nom_domaine.ext/) de larticle retourn par une boucle ARTICLES. Cette balise permet ainsi dcrire des liens : <a href="#URL_ARTICLE"> ... </a> indpendamment du choix de configuration effectu pour le type durls. Laffichage retourn pourra tre :
En cas de changement de type durls, la balise affichera toujours la bonne url. En dehors dune boucle ARTICLES, il est possible de demander laffichage de lurl dun article spcifique en passant son id comme argument la balise : #URL_ARTICLE{44} affichera alors lurl de larticle did 44.
118/186
#URL_AUTEUR
Juin 2010
#URL_AUTEUR affiche ladresse de la page spip.php ?auteurxxx. Dans la boucle AUTEURS, #URL_AUTEUR affiche ladresse de la page de lauteur : spip.php?auteurxxx (o xxx est le numro didentifiant de lauteur). Exemple de boucle AUTEURS, qui, dans une boucle ARTICLES, affiche le nom de lauteur de larticle avec un lien vers sa page :
<BOUCLE_auteur(AUTEURS) {id_article}> <a href="#URL_AUTEUR">#NOM</a> </BOUCLE_auteur>
Exemple de boucle AUTEURS qui affiche le logo de lauteur align gauche, avec un lien vers la page de lauteur [1] :
[(#LOGO_AUTEUR{#URL_AUTEUR,left})]
#URL_DOCUMENT
Mars 2010 #URL_DOCUMENT
Associe #LOGO_DOCUMENT, cette balise gnre un lien cliquable : [(#LOGO_DOCUMENT|#URL_DOCUMENT)] affichera une vignette cliquable pointant document.
vers le
119/186
#URL_RUBRIQUE
avril 2010
La balise #URL_RUBRIQUE affiche lurl relative (cest dire sans la partie http://nom_domaine.ext/) de la rubrique retourne par une boucle RUBRIQUES ou ARTICLES. Cette balise permet ainsi dcrire des liens : <a href="#URL_RUBRIQUE"> ... </a> indpendamment du choix de configuration effectu pour le type durls. Laffichage retourn pourra tre :
En cas de changement de type durls, la balise affichera toujours la bonne url. En dehors dune boucle RUBRIQUES ou ARTICLES, il est possible de demander laffichage de lurl dune rubrique spcifique en passant son id comme argument la balise : #URL_RUBRIQUE{12} affichera alors lurl de la rubrique did 12.
#URL_SITE_SPIP
Mars 2010 #URL_SITE_SPIP affiche ladresse du site. Elle ne comprend pas le / final, ainsi vous pouvez crer un lien du type #URL_SITE_SPIP/#URL_ARTICLE Pour connatre lurl de votre site, vous devez cliquer sur "Configuration" et vous verrez cette information inscrite dans le champ "URL de votre site".
#URL_PAGE
Aot 2010
retourne une url de type page (cf. Utiliser des URLs personnalises), vers la page passe en paramtre et qui pourra tre utilise dans un lien. Par exemple, pour accder la page gnre par le squelette toto.html, situe dans votre dossier "squelettes", #URL_PAGE{toto} gnra automatiquement lurl spip.php?page=toto. Un second paramtre est autoris pour ajouter des paramtres lurl. Exemple #URL_PAGE{toto,id_article=#ID_ARTICLE} gnrera lurl spip.php?page=toto&id_article=XXX.
#URL_PAGE
120/186
#URL_SITE, #NOM_SITE
Dcembre 2008
- #NOM_SITE et #URL_SITE affichent le nom et lurl du lien hypertexte de larticle (si vous avez activ cette option).
#VAL
Juin 2009 maj : Dcembre 2009
La Balise #VAL prend un paramtre qui est retourn tel quel. Elle permet par exemple dappliquer des filtres sur des constantes. Par exemple [(#VAL{<:chaine_de_langue:>}|image_typo)] <:chaine_de_langue|image_typo:>) ou encore Si vous dsirez attribuer une feuille de styles (.css) par jour de la semaine, vous pouvez procder de la manire suivante :
[<link rel="stylesheet" href="squelettes/styles/jour_(#VAL{w}|date{#DATE|strtotime}).css" type="text/css" />]
Des feuilles de styles nommes respectivement jour_0.css jour_6.css (traduire : jour_dimanche.css jour_samedi.css)
#VISITES
Dcembre 2008
121/186
Critres
{branche}
Dcembre 2008
- {branche} slectionne lensemble des articles de la rubrique ET de ses sous-rubriques. (Cest une sorte dextension du critre {id_secteur}. Toutefois, linverse de {id_secteur=2}, il nest pas possible dappeler directement une branche en faisant par exemple {branche=2} : techniquement parlant, il faut que la rubrique en question figure dans le contexte courant. Ce critre est utiliser avec parcimonie : si votre site est bien structur, vous ne devriez pas en avoir besoin, sauf dans des cas trs particuliers.)
{collecte}
Octobre 2009
Le critre {collecte} permet de spcifier linterclassement (la collation ) pour la requte gnre par une boucle (appel de la clause COLLATE de MySQL [1]). Le critre {collecte}, permet de forcer la requte sql, gnre par la boucle laquelle il est pass, utiliser un interclassement spcifique pour la clause ORDER BY (critre {par ...}). Exemple Supposons une base en utf-8 avec ses tables en utf8 (DEFAULT CHARSET = utf8) dans ce jeu de caractre (CHARACTER_SET_NAME) il est possible dutiliser 21 collations (interclassements) diffrentes [2] : COLLATION_NAME CHARACTER_SET_NAME utf8_bin utf8 utf8_czech_ci utf8 utf8_danish_ci utf8 utf8_esperanto_ci utf8 utf8_estonian_ci utf8 utf8_general_ci utf8 utf8_hungarian_ci utf8 utf8_icelandic_ci utf8 utf8_latvian_ci utf8 utf8_lithuanian_ci utf8 utf8_persian_ci utf8 utf8_polish_ci utf8 Manuel de rfrence des boucles et balises 122/186
COLLATION_NAME CHARACTER_SET_NAME utf8_roman_ci utf8 utf8_romanian_ci utf8 utf8_slovak_ci utf8 utf8_slovenian_ci utf8 utf8_spanish2_ci utf8 utf8_spanish_ci utf8 utf8_swedish_ci utf8 utf8_turkish_ci utf8 utf8_unicode_ci utf8 partir de l, imaginons que dans la table spip_articles de cette base, table par dfaut en interclassement utf8_general_ci, se trouvent les articles titrs : Nana nina Nina Nia ia ina ina Nono Nunu La boucle :
<BOUCLE_a(ARTICLES) {par titre} {"<br />"}> #TITRE </BOUCLE_a>
retournera ces articles dans lordre alphabtique correspondant linterclassement par dfaut de la table : Nana nina ina Nina Nia ia ina Nono Nunu La boucle :
#SET{collation, utf8_spanish_ci} <BOUCLE_a(ARTICLES) {par titre} {collecte #GET{collation}} {"<br />"}> #TITRE </BOUCLE_a>
123/186
retournera, elle, ces articles dans lordre alphabtique correspondant linterclassement demand : Nana nina Nina Nia Nono Nunu ina ina ia Ainsi les (n tilde) seront classs aprs les n (n nus). Cela correspond en effet lordre alphabtique castillan :
Le est la quinzime lettre de version castillane de lalphabet latin, entre le N et le O dans lordre alphabtique.
Limite Il nest pas possible de faire fonctionner le critre {collecte} en lui affectant directement sa valeur dans la liste des arguments de boucle : les {collecte utf8_spanish_ci}, {collecte 'utf8_spanish_ci'}, {collecte{utf8_spanish_ci}}... ne fonctionneront pas et afficheront une erreur php. Il nest possible de lutiliser que par #GET{} aprs lavoir pralablement dclar en #SET{} Notes [1] Voir la documentation officielle pour la clause COLLATE de Mysql : http://dev.mysql.com/doc/refman/5.0... et : Un exemple de leffet de collation
124/186
[2] Dans le jeu de caractre latin1, 8 collations sont accessibles : COLLATION_NAME CHARACTER_SET_NAME latin1_bin latin1 latin1_danish_ci latin1 latin1_general_ci latin1 latin1_general_cs latin1 latin1_german1_ci latin1 latin1_german2_ci latin1 latin1_spanish_ci latin1 latin1_swedish_ci latin1
{critre ?}
Septembre 2009
Un critre conditionnel (critre associ loprateur logique ? ) ne sera pris en compte par sa boucle que si les donnes requises par ce critre sont prsentes dans lenvironnement dexcution de la boucle. - <BOUCLE_abc(ARTICLES) {id_rubrique ?}>
Sil existe un id_rubrique (nn) dans lenvironnement dexcution de la boucle, alors la boucle ne slectionnera que les donnes correspondantes lgalit id_rubrique =
#ENV{id_rubrique}
Sil nexiste pas did_rubrique dans lenvironnement dexcution de la boucle, le critre sera totalement ignor.
limite laffichage aux rsultats ayant un critre appartenant un ensemble fini. limite laffichage aux rsultats ayant le critre xxxx gal a, b, c ou d.
{xxxx IN a,b,c,d}
Les rsultats sont tris dans lordre indiqu (sauf demande explicite dun autre critre de tri). Il est aussi possible de slectionner des chanes de caractres, par exemple avec {titre IN
'Chine', 'Japon'}
125/186
Il peut sagir dun tableau dfini par une balise #ARRAY ou bien dun tableau provenant dune balise #ENV**{mon_post}. Si #ENV{mon_post} est un tableau (venant par exemple de saisies de formulaire dont lattribut name se termine par []), et si les filtres danalyse ont t dsactivs en suffixant cette balise par une double toile, alors chaque lment du tableau sera considr comme argument de IN, SPIP appliquant les filtres de scurit sur chacun deux [1]. Le squelette standard formulaire_forum_previsu fournit un exemple dutilisation avec une boucle MOTS ayant le critre {id_mot IN #ENV**{ajouter_mot}} : cette boucle slectionne seulement les mots-cls appartenant un ensemble indiqu dynamiquement. Ici, cet ensemble aura t construit par le formulaire du squelette standard choix_mots , qui utilise lattribut name=ajouter_mot[]. Utilisation conditionnelle de loprateur IN dans un critre de boucle exemple dutilisation : - si #ID_ARTICLE est prsent dans lenvironnement et quelle que soit sa valeur :
<BOUCLE_a(ARTICLES) {id_article ?IN 11,12,13}>
naffichera que les articles dont lid nest pas dans la liste IN [2] - si #ID_ARTICLE nest pas prsent dans lenvironnement :
<BOUCLE_a(ARTICLES) {id_article ?IN 11,12,13}>
affichera tous les articles y compris ceux dont lid est dans la liste IN
<BOUCLE_a(ARTICLES) {id_article ?!IN 11,12,13}>
affichera tous les articles y compris ceux dont lid est dans la liste IN [2]
Notes
[1] voir aussi la page de la balise # ENV [2] pour rappel : {id_article !IN 11,12,13} slectionne les articles dont lid nest pas dans la liste 11, 12, 13 (voir critre !oprateur valeur)
Le critre {... LIKE ...} correspond au critre de comparaison SQL LIKE. Par exemple, pour rechercher les AUTEURS dont le login commence par paul :
{login LIKE paul%}
126/186
Nous pouvons aussi utiliser une balise SPIP dans le critre. Dans ce cas vous devez penser lentourer de parenthses. Par exemple, pour rechercher les email contenant la valeur de la balise #ENV{email} :
{email LIKE %(#ENV{email})%}
Autre exemple, pour trouver les email qui ne contiennent pas le critre de recherche, il est possible de faire :
{!email LIKE %(#ENV{email})%}
Prendre en compte le critre uniquement si pour ce critre une valeur est prsente dans lenvironnement. Le critre ne sera pris en compte par la boucle que si une variable de mme nom est prsente dans lenvironnement. - par exemple : {date ?!= #ENV{date}},
{email ?LIKE %(#ENV{email})%}
- ou encore :
<BOUCLE_abc(ARTICLES) {titre ?<= #ENV{titre}}> o Sil existe une variable de nom titre dans lenvironnement
dexcution de la boucle, alors la boucle ne slectionnera que les donnes correspondantes titre <= #ENV{titre} (les articles dont le titre est alphabtiquement plac avant le titre prsent dans lenvironnement) Sil nexiste pas de titre dans lenvironnement dexcution de la boucle, le critre sera totalement ignor (tous les articles seront slectionns).
- On notera que si peu importe la prsence ou non despaces avant ou aprs loprateur ({titre ?<= #ENV{titre}} est quivalent {titre?<=#ENV{titre}}), le ? doit tre coll loprateur.
Oprateur logique du Complmentaire, indique de prendre le complment lopration. Cette criture est principalement utile pour les boucles faisant intervenir des jointures multiples entre tables : par exemple mots-cl/articles ou documents/articles... Elle permet de slectionner non seulement les donnes ne rpondant pas lquation mais
127/186
aussi celles qui ne sont pas concernes par le critre (une table dont la jointure avec une autre table est inexistante).
{!titre_mot = 'X'} : retourne toutes les donnes sauf celles lies au mot-cl X ; cest dire y compris les donnes lies aucun mot-cl. {!id_rubrique < 12}
: retourne les donnes des rubriques dont lid #ID_RUBRIQUE nest pas strictement infrieur 12 (donc qui est suprieur ou gal 12). : retourne toutes les donnes dont lid auteur nest ni 1, ni 2.
{!id_auteur IN 1, 2}
Lexemple suivant est plus complexe, il indique quil ne faut pas prendre en compte les auteurs dont le login contient la chane utilisateur.
{!login LIKE %utilisateur%}
rubrique...) dont le
{extension !IN gif, jpg, png} : retourne les donnes des documents dont lextension nest pas dans la liste gif, jpg ou png.
{date}
Dcembre 2008
- Les critres {date} (ou {date=...} ou {date==...}) permettent de slectionner un article en fonction de la date passe dans lURL.
{doublons}
6 janvier 2010 {doublons} permet dinterdire laffichage des rsultats dj affichs dans dautres boucles utilisant ce critre.
128/186
historique : A partir de [SPIP 1.2] et jusqu [SPIP 1.7.2], seules les boucles ARTICLES, RUBRIQUES, DOCUMENTS et SITES acceptaient ce critre. Le critre {doublons} une fois dcouvert devient rapidement indispensable vos squelettes [1]. Sil est dun emploi un poil curieux, il permet des tris trs intressants mais qui napparaissent pas immdiatement la lecture de la documentation de base sur Spip.net qui nous dit : Le critre {doublons} ou {unique} [2] : permet dinterdire laffichage des rsultats dj affichs dans dautres boucles utilisant ce critre. Ces deux critres sont rigoureusement identiques. Identiques ? Pas tout fait ! Au fil des versions de SPIP, doublons sest enrichi de possibilits supplmentaires : - on peut nommer ses doublons, donc en faire coexister plusieurs dans un mme code, - il permet aussi des pirouettes spipiennes avec lanti-doublons ! Utilisation de base : ne pas retrouver des lments dj traits dans la page Un exemple nous est donn dans le squelette sommaire de dist [3]
<BOUCLE_articles_recents(ARTICLES) {par date}{inverse} {0,2} {doublons}> lments afficher, par exemple #TITRE </BOUCLE_articles_recents> <BOUCLE_autres_articles(ARTICLES) {par date}{inverse} {doublons} > lments afficher, par exemple #TITRE </BOUCLE_articles>
Il sagit de lister les articles du site par ordre chronologique invers ET de rserver aux deux derniers articles publis un traitement particulier. Comme vous le voyez, les boucles "_articles_recents" et "_autres_articles" sont construites de la mme manire. En toute logique, elles doivent donc retourner la mme liste darticles. Cest grce au travail du critre "doublons" que les 2 articles les plus rcents, dj traits dans la premire boucle, ne se retrouveront pas dans la liste affich avec la boucle "_autres_articles" . Autre utilisation courante : exclure des lments Notre grand classique : exclure suivant un mot-cl On voit rgulirement sur la liste spip-users pos ce type de problme : "Je narrive pas a exclure des lments en fonction de leur mot-cl. jessaie :
<BOUCLE_rubriques(RUBRIQUES) {racine} {titre_mot!=invisible}{par num titre, titre}>
129/186
Ce que veut lutilisateur ici, cest slectionner toutes les rubriques qui nont pas reu le mot cl "invisible". Or, ce que comprend la base de donnes avec {titre_mot != invisible}, cest quelle doit slectionner toutes les rubriques qui ONT un mot cl ET que le dit mot cl soit diffrent de "invisible". Et cela change tout. Car dans le rsultat figurera par exemple une rubrique laquelle a t affect un mot cl "bidule", donc diffrent de "invisible" (ok !), y compris si la rubrique est lie au mot cl "invisible" (arg !) et, ny figurera pas, une rubrique qui na aucun mot cl (linverse du rsultat souhait !). [4] La solution : enchaner une boucle vide qui slectionne selon le mot-cl et une autre boucle qui retourne les rsultats en utilisant le critre {doublons}. En reprenant notre exemple ci-dessus cela donne :
<BOUCLE_exclure(RUBRIQUES) {racine} {titre_mot=invisible}{doublons}> </BOUCLE_exclure>
Cette boucle slectionne toutes les rubriques qui ont le mot-cl "invisible" , mais elle naffiche rien.
<BOUCLE_rubriques(RUBRIQUES) {racine}{par num titre, titre} {doublons}> {le traitement effectuer ici} </BOUCLE_rubriques>
Cette deuxime boucle va slectionner grce au critre doublons toutes les autres rubriques et leur appliquera le traitement choisi. Nommer les doublons pour en utiliser plusieurs dans le mme fichier Objectif : grer sur une page daccueil laffichage de liens vers des articles et vers des communiqus. La prsentation des deux derniers articles publis et des deux derniers communiqus est diffrente des autres. Pour lexemple, on retrouve ici le mme schma dj vu avec les boucles de la DIST. Il sagit simplement ici de faire cohabiter sans conflit des boucles trs proches. Nommer les doublons vitera que les tris de lune interfrent dans les tris de lautre.
<BOUCLE_communiques_recents(ARTICLES) {!par date}{id_mot=1} {0,2} {doublons com}> lments afficher, par exemple #TITRE </BOUCLE_communiques_recents> <BOUCLE_autres_communiques(ARTICLES) {!par date}{id_mot=1} {doublons com} > lments afficher, par exemple #TITRE </BOUCLE_autres_communiques> <BOUCLE_articles_recents(ARTICLES) {!par date} {0,2} {doublons art}> lments afficher, par exemple #TITRE </BOUCLE_articles_recents> <BOUCLE_autres_articles(ARTICLES) {!par date} {doublons art} > lments afficher, par exemple #TITRE </BOUCLE_articles>
130/186
De manire gnrale, nommer ses doublons est une bonne pratique pour viter tout tlescopage actuel mais aussi futur (des squelettes cela voluent). Cest aussi un lment qui donne de la lisibilit votre code. Dans le cadre dune utilisation avance, vous pouvez essayer lutilisation de balises SPIP. Par exemple : {doublons #TITRE} ou mme {doublons #_mabouboucle:TITRE} voire mme {doublons (#_mabouboucle:TITRE|supprimer_numero)}. Utilisation avance : anti-doublons ou comment constituer une pile de donnes traiter Mcanique de lanti-doublons Ici "doublons" va permettre de rassembler le rsultats de plusieurs boucles utilisant diffrents critres et " !doublons" dappliquer cet empilement ditems les traitements souhaits. Le schma dutilisation est celui-ci : On slectionne un premire srie darticles (on naffiche rien)...
<BOUCLE0(ARTICLES){id_mot=2}{doublons A}></BOUCLE0>
Un Exemple danti-doublons Objectif : faire une boucle qui rcupre les articles de toutes les rubriques lexception des rubriques 2 et 3, ET pour ce qui concerne les articles de la rubrique 4, seulement ceux de moins de 60 jours. La solution : il nous faut une premire boucle qui ira chercher tous les articles en excluant ceux des rubriques 2, 3 mais aussi 4...
<BOUCLE0(ARTICLES) {id_rubrique !IN 2,3,4}{doublons tri1}></BOUCLE0>
...et cest dans une dernire boucle que lon affiche grce lanti-doublons les articles slectionns tris avec les critres de son choix.
<BOUCLE2(ARTICLES){par date}{!doublons tri1}>#TITRE<br></BOUCLE2>
P.-S.
Article original : http://www.spip-contrib.net/Le-critere-doublons-sa-mecanique. Publi sur spip.net par Teddy Manuel de rfrence des boucles et balises 131/186
Notes [1] Quelques contributions sur ce site lutilisent : http://www.spip-contrib.net/Comment-exclure-des-articles, http://www.spip-contrib.net/Exclure-selon-un-mot-cle, http://www.spip-contrib.net/Menu-depliant-tout-Spip, http://www.spip-contrib.net/Afficher-les-articles-dans-un, http://www.spip-contrib.net/Afficher-5-vignettes-consecutives [2] Attention, ne pas confondre le critre "unique" et le filtre "unique" dont on peut trouver des applications : ici : http://www.spip-contrib.net/Usage-du-filtre-unique-pour et l : http://www.spip-contrib.net/Utiliser-le-filtre-unique-pour. [3] Il sagit du squelette par dfaut de SPIP que lon trouve dans le dossier /DIST. Rappel : vous ne devez pas toucher ces fichiers et ranger les fichiers de votre propre squelette dans un dossier /squelettes crer au mme niveau que /DIST, cest dire la racine du site. [4] ce point est tir de http://permalink.gmane.org/gmane.comp.web.spip.user/122659 (Merci Cdric)
{fusion champ_sql}
Octobre 2010
Le critre fusion permet de regrouper les rsultats dune boucle SPIP selon les valeurs distinctes dun champ. Si la boucle sans le critre {fusion champ_sql} ramne plusieurs enregistrements ayant la mme valeur de champ_sql, alors, la boucle avec le critre {fusion champ_sql} ne prsentera quun seul de ceux ci. Pour cela, la requte SQL gnre intgre une instruction GROUP BY. Exemple pdagogique La boucle suivante affichera les titres de tous les articles du site :
<BOUCLE_tous(ARTICLES)> #TITRE </BOUCLE_tous>
La boucle suivante, avec un critre fusion portant sur la rubrique, partira galement de tous les articles, mais les regroupera par id_rubrique identique, et ne prsentera au final quun seul article par rubrique.
<BOUCLE_extrait(ARTICLES){fusion id_rubrique}> #TITRE
132/186
</BOUCLE_extrait>
Exemples appliqus La boucle suivante affiche les 10 messages de forum les plus rcents, tris par date, et manant dune IP distincte :
<BOUCLE_comment(FORUMS){plat}{par date}{inverse}{0,10}{fusion ip}> <INCLURE{fond=inc/intro_commentaire}{id_forum}> </BOUCLE_comment>
Il est galement possible dutiliser des expressions SQL en paramtre du critre. La boucle suivante affichera la liste des annes pour lesquelles il y a au moins un article :
<BOUCLE_annees_avec_articles(ARTICLES){par date}{inverse}{fusion YEAR(date)}> [(#DATE|annee)] </BOUCLE_annees_avec_articles>
Attention Un critre de tri {par xxx} combin au critre {fusion champ_sql} ne retournera pas forcment les rsultats attendus. - <BOUCLE_a1(ARTICLES){tout}{par id_article}> ramne les articles tris par id_article (du 1 au 10000 par exemple). - <BOUCLE_a2(ARTICLES){par id_article}{fusion id_rubrique}> ramne les articles, tris par id_article aprs regroupement par id_rubrique, mais ces regroupements sont faits en vrac et, a priori, sans tris particuliers !
{id_article}
Dcembre 2008
- {id_article} slectionne larticle dont lidentifiant est id_article. Comme lidentifiant de chaque article est unique, ce critre ne retourne quune ou zro rponse.
{id_auteur}
Dcembre 2008
- {id_auteur} slectionne les articles correspondant cet identifiant dauteur (utile pour indiquer la liste des articles crits par un auteur).
133/186
{id_groupe}
Dcembre 2008
- {id_groupe=zzzz} permet de slectionner les articles lis un groupe de mots-cls ; principe identique au {type_mot} prcdent, mais puisque lon travaille avec un identifiant (numro du groupe), la syntaxe sera plus propre . [Nota : Ce critre nest pas (en ltat actuel du dveloppement de SPIP) cumulable avec le prcdent {type_mot=yyyy}]
{id_mot}
Dcembre 2008
- {id_mot} slectionne les articles correspondant cet identifiant de mot-cl (utile pour indiquer la liste des articles traitant dun sujet donn).
{id_rubrique}
Dcembre 2008
- {id_rubrique} slectionne les articles contenus dans la rubrique dont lidentifiant est id_rubrique.
{id_secteur}
Dcembre 2008
- {id_secteur} slectionne les articles dans ce secteur (un secteur est une rubrique qui ne dpend daucune autre rubrique, cest--dire situe la racine du site).
{lang}
Dcembre 2008
{origine_traduction}
Manuel de rfrence des boucles et balises 134/186
- {origine_traduction} slectionne les articles qui servent de base des versions traduites (les articles "originaux"). Voir sur programmer.spip.org pour des exemples
{recherche}
Dcembre 2008 maj : Janvier 2009
- {recherche} slectionne les articles correspondant aux mots indiqus dans linterface de recherche (moteur de recherche incorpor SPIP). Larticle consacr au moteur de recherche et aux balises #DEBUT_SURLIGNE et #FIN_SURLIGNE donne plus dinformations concernant la gestion de laffichage des rsultats.
{titre_mot}, {type_mot}
Dcembre 2008 maj : Fvrier 2009
- {titre_mot=xxxx}, ou {type_mot=yyyy} slectionne respectivement les articles lis au mot-cl dont le nom est xxxx , ou lis des mots-cls du groupe de mots-cls yyyy . Si lon donne plusieurs critres {titre_mot=xxxx} (ou plusieurs {type_mot=yyyy}), on slectionnera ceux qui auront tous ces mots la fois.
{tous}
Octobre 2009
{tout}
Octobre 2009
Le critre {tout} permet de slectionner les donnes dune table comme si aucun autre critre restrictif ntait appliqu. Ainsi son utilisation relve-telle plus de laide-mmoire pour le webmestre puisque lon obtient le mme rsultat en nindiquant aucun critre. Manuel de rfrence des boucles et balises 135/186
cest--dire les rubriques vides en plus des rubriques contenant des lments publis. On rservera ce choix des besoins trs spcifiques ; en effet, par dfaut, SPIP naffiche pas sur le site public les rubriques qui ne contiennent aucun lment actif, afin de garantir que le site ne propose pas de culs de sac (navigation vers des pages ne proposant aucun contenu). = publie) sont slectionns dans toutes les rubriques. Utile notamment pour afficher les articles les plus rcents (dans lintgralit du site) sur la page daccueil. mis la poubelle (statut != 5poubelle) sont slectionns, quils aient crit un article ou non, quils soient administrateur, administrateur restreint, rdacteur, visiteur ou nouvel inscrit.
<BOUCLE_x(MOTS) {tout}> o tous les mots-clefs sont slectionns dans lintgralit du site. <BOUCLE_x(BREVES) {tout}> o toutes les brves publies (statut = publie) sont slectionnes
dans lintgralit
du site.
<BOUCLE_x(FORUMS) {tout}> o tous les forums publis (statut
= publie) sont slectionns dans lintgralit du site sans prendre en compte leur hirarchie. Avec ce critre, vous pouvez slectionner tous les messages quelle que soit leur position dans un thread (dans la limite des autres critres, bien sr). Cela permet par exemple dafficher les messages par ordre strictement chronologique, ou de compter le nombre total de contributions dans un forum.
Pour faire sauter les dernires restrictions de slection (where statut=publie par exemple) et slectionner vritablement tous les lments dune table, on peut utiliser la notation <BOUCLE_yy(prefixe_table)> o lon prcise en bas de casse le nom exact prfixe compris de la table de recherche (attention : pas de s pour spip_forum). par exemple pour afficher tous les articles quel que soit leur statut (prepa, prop, publie, poubelle, refuse) : <BOUCLE_yy(spip_articles)> Noter que ce critre possde un alias : le critre {tous}.
{traduction}
Dcembre 2008
{vu}
Manuel de rfrence des boucles et balises 136/186
Octobre 2009
le critre {vu = ...} permet de diffrencier les documents qui ont dj t traits par lobjet auquel ils sont rattachs. Le critre vu porte sur une association document<->objet (car un mme document peut tre li plusieurs objets : article, rubrique, etc.). Aussi est-il mis--jour chaque modification du-dit objet. Si le document est intgr dans un objet (typiquement : <imgXX> ou <docYY|left> ou encore <embZZ> dans le texte dun article par exemple), alors cette association document-objet sera note comme vu = oui . Par exemple, pour afficher le portfolio dun article, on peut utiliser, lintrieur dune boucle articles, une boucle documents avec le critre {vu = non} : ainsi, safficheront dans le portfolio uniquement les documents qui nont pas dj t affichs dans le corps de larticle.
137/186
Les filtres
LES FILTRES ..................................................................................................................................................... 78 |ABS_URL ......................................................................................................................................................... 140 |AFFDATE ......................................................................................................................................................... 140 |AFFDATE_COURT ............................................................................................................................................ 140 |AFFDATE_JOURCOURT .................................................................................................................................... 140 |AFFDATE_MOIS_ANNEE .................................................................................................................................. 141 |AFFICHER_ENCLOSURES ................................................................................................................................. 141 |AFFICHER_TAGS.............................................................................................................................................. 141 |AGENDA_AFFICHE........................................................................................................................................... 141 |AGENDA_CONNU............................................................................................................................................. 142 |AGENDA_MEMO .............................................................................................................................................. 142 |ALTERNER....................................................................................................................................................... 143 |ANCRE_URL .................................................................................................................................................... 144 |ANNEE ............................................................................................................................................................ 144 |APPLIQUER_FILTRE ......................................................................................................................................... 144 |ATTRIBUT_HTML............................................................................................................................................. 144 |BALISE_IMG .................................................................................................................................................... 145 |CHOIXSIEGAL{VALEUR, SIOUI, SINON} ........................................................................................................... 145 |CHOIXSIVIDE{SIOUI, SINON} ........................................................................................................................... 145 |COMPACTE ...................................................................................................................................................... 145 |CONCAT{VALEUR1, VALEUR2, ...} .................................................................................................................. 146 |COULEUR_* .................................................................................................................................................... 146 |COPIE_LOCALE................................................................................................................................................ 149 |COUPER ........................................................................................................................................................... 150 |DATE_822....................................................................................................................................................... 151 |DATE_RELATIVE ............................................................................................................................................. 151 |DIRECTION_CSS .............................................................................................................................................. 151 |DIV.................................................................................................................................................................. 152 |ENTITES_HTML ............................................................................................................................................... 152 |ENV_TO_PARAMS ........................................................................................................................................... 152 |ET ................................................................................................................................................................... 153 |EXTRAIRE_ATTRIBUT ...................................................................................................................................... 153 |EXTRAIRE_BALISE .......................................................................................................................................... 154 |FICHIER ........................................................................................................................................................... 154 |FIND ................................................................................................................................................................ 155 |FOREACH ........................................................................................................................................................ 155 |FORM_HIDDEN ................................................................................................................................................ 156 |HAUTEUR ........................................................................................................................................................ 156 |HEURES ........................................................................................................................................................... 156 |IMAGE_PASSE_PARTOUT ................................................................................................................................. 156 |INSERER_ATTRIBUT ........................................................................................................................................ 157 |IS_NULL .......................................................................................................................................................... 157 |JOUR ............................................................................................................................................................... 158 |LARGEUR ........................................................................................................................................................ 158 |LIENS_ABSOLUS .............................................................................................................................................. 158 |LIEN_OU_EXPOSE ........................................................................................................................................... 158 |LIENS_OUVRANTS ........................................................................................................................................... 159 |LIGNES_LONGUES ........................................................................................................................................... 159 |MATCH ............................................................................................................................................................ 160 |MINUTES ......................................................................................................................................................... 160 |MODULO ......................................................................................................................................................... 161 |MOINS ............................................................................................................................................................. 161 |MOIS ............................................................................................................................................................... 162 |MULT .............................................................................................................................................................. 162 |NOM_JOUR ...................................................................................................................................................... 162 |NOM_MOIS ...................................................................................................................................................... 162 |NON ................................................................................................................................................................ 163
138/186
|OU ................................................................................................................................................................... 163 |OUI.................................................................................................................................................................. 163 |PARAMETRE_URL............................................................................................................................................ 163 |PLUS ............................................................................................................................................................... 164 |PTOBR ........................................................................................................................................................... 164 |PUSH ............................................................................................................................................................... 165 |REPLACE ......................................................................................................................................................... 166 |SAFEHTML ...................................................................................................................................................... 166 |SAISON ............................................................................................................................................................ 167 |SECONDES ....................................................................................................................................................... 167 |SINGULIER_OU_PLURIEL{ XXX:CHAINE_UN, XXX:CHAINE_PLUSIEURS} ......................................................... 167 | ?{SIOUI, SINON}............................................................................................................................................. 168 |SINON.............................................................................................................................................................. 168 |SUPPRIMER_NUMERO ...................................................................................................................................... 169 |SUPPRIMER_TAGS ........................................................................................................................................... 169 |TABLE_VALEUR .............................................................................................................................................. 169 |TAILLE_EN_OCTETS ........................................................................................................................................ 170 |TEXTE_BACKEND ............................................................................................................................................ 170 |TEXTEBRUT ..................................................................................................................................................... 171 |TEXTE_SCRIPT ................................................................................................................................................ 171 |TRADUIRE_NOM_LANGUE ............................................................................................................................... 171 |UNIQUE ........................................................................................................................................................... 172 |URL_ABSOLUE ................................................................................................................................................ 173 |URL_ABSOLUE_CSS......................................................................................................................................... 173 |VIDER_ATTRIBUT ............................................................................................................................................ 174 |XOU ................................................................................................................................................................ 174 |>{A}............................................................................................................................................................... 175 |>={A}............................................................................................................................................................. 175 |<{A}............................................................................................................................................................... 175 |<={A}............................................................................................................................................................. 175 | !={A}............................................................................................................................................................. 176 |=={A}............................................................................................................................................................. 176
139/186
|abs_url
Juillet 2009 maj : Novembre 2009
Le filtre |abs_url combine les filtres |liens_absolus et |url_absolue et peut donc sappliquer aussi bien un texte (#TEXTE, #DESCRIPTIF, etc.) qu une balise durl (#URL_ARTICLE, #URL_RUBRIQUE, etc.) et transforme tous les liens en liens absolus (avec lurl complte du site).
|affdate
Juillet 2009
Ce filtre sapplique aux dates - |affdate affiche la date sous forme de texte, par exemple 13 janvier 2001 . [SPIP 1.8] tend la notation de ce filtre. On peut lui passer un paramtre de formatage de la date, correspondant un format spip ( 'saison' , etc.) ou un format de la commande php date ( 'Y-m-d' ). Par exemple :
o o
[(#DATE|affdate{'Y-m'})] affichera numriquement lanne et le mois de la date filtre spars par un tiret, la notation [(#DATE|affdate{'saison'})] est totalement quivalente : [(#DATE|saison)].
- Il existe aussi des variantes de affdate qui fournissent des raccourcis : |affdate_court, |affdate_jourcourt et |affdate_mois_annee.
|affdate_court
Juillet 2009
Ce filtre sapplique aux dates - |affdate_court affiche le nom du mois et le numros du jour, e.g. 19 Avril . Si la date nest pas dans lanne actuelle, alors |affdate_court affichera seulement le mois et lanne sans le numros du jour : Novembre 2004 .
|affdate_court
|affdate_jourcourt
Juillet 2009
140/186
- |affdate_jourcourt affiche le nom du mois et la valeur numrique du jour, e.g. 19 Avril . Si la date nest pas dans lanne actuelle, alors lanne est aussi affiche : 1 Novembre 2004 .
|affdate_jourcourt
|affdate_mois_annee
Juillet 2009
Ce filtre sapplique aux dates - |affdate_mois_annee affiche seulement le mois et lanne : Avril 2005 , Novembre 2003 .
|affdate_mois_annee
|afficher_enclosures
Octobre 2009
Dans le cadre dune syndication, le filtre |afficher_enclosures appliqu la balise #TAGS affichera licone du trombone pour les documents joints de larticle syndiqu (plutt quun lien classqiue).
[(#TAGS|afficher_enclosures)]
|afficher_tags
Octobre 2009
Dans le cadre dune syndication, le filtre |afficher_tags appliqu la balise #TAGS affichera pour larticle syndiqu au choix : les tags/mots-cls : [(#TAGS|afficher_tags{tag})], la rubrique/catgorie : [(#TAGS|afficher_tags{directory})], les documents joints/podcast : [(#TAGS|afficher_tags{enclosure})]. (Par dfaut [(#TAGS|afficher_tags)] est quivalent [(#TAGS|afficher_tags{'tag, directory'})].) Plus dinformations dtailles sur la page de la balise #TAGS
|agenda_affiche
Juillet 2009
- Le filtre agenda_affiche sapplique sur une balise retournant le nombre dlments afficher (en gnral #TOTAL_BOUCLE) et prend trois paramtres :
141/186
1. un texte qui sera affich si la balise filtre ne retourne rien (0 lment afficher) ; 2. un type de calendrier (jour, semaine, mois ou periode) ; 3. des noms de classes CSS utilises dans lappel du filtre prcdent qui permettent de filtrer les lments afficher. Si la balise filtre est nulle, ce filtre retourne son premier argument. Sinon il retourne les lments mmoriss par le filtre agenda_memo mis en page dans un calendrier du type demand. Seul les lments indexs par agenda_memo avec une des classes CSS indiques dans le dernier argument seront affichs (ou alors tous les lments si ce paramtre est omis). Ainsi on peut filtrer les lments pour les rpartir dans plusieurs calendriers sur la mme page. Le type periode restreindra laffichage la priode comprise entre le plus vieil lment et le plus rcent effectivement trouvs, ce qui permet de donner dans le critre une priode trs large sans rcuprer un affichage trop long. Exemple :
<BOUCLE_memorise(ARTICLES) {agenda date, semaine}{par date}>[ (#DATE|agenda_memo{#DESCRIPTIF,#TITRE,#URL_ARTICLE}) ]</BOUCLE_memorise> [(#TOTAL_BOUCLE|agenda_affiche{<:aucun_article:>,semaine})] <//B_memorise>
affiche les articles publis dans la semaine actuelle sous forme de calendrier.
|agenda_connu
juillet 2010
Le filtre |agenda_connu teste si son argument est lun des quatre types de calendriers connus (jour, semaine, mois ou periode). Ce filtre est utilis par les squelettes agenda_jour.html, agenda_semaine.html, agenda_mois.html et agenda_periode.html, appels partir du squelette agenda.html qui indique dans son en-tte les feuilles de style et fonctions javascript ncessaires (mais remplaables volont). Ces squelettes fournissent donc un exemple reprsentatif dutilisation.
|agenda_memo
142/186
juillet 2010
Le filtre |agenda_memo sapplique sur une balise #DATE_MODIF) et prend quatre paramtres :
1. un descriptif 2. un titre 3. une URL reprsentant llment ayant ce titre et ce descriptif (par exemple #URL_ARTICLE) 4. un nom de classe CSS Si la balise sur laquelle agenda_memo sapplique nest pas nulle, il se contente de mmoriser la date et les trois premiers arguments dans un tableau index par le dernier argument (le nom de classe CSS) et ne retourne rien (aucun affichage). Lutilisation du dernier argument comme index pour llment mmoriser permet davoir plusieurs calendriers par page. De plus, la classe spcifie ici sera attribue cet lment dans laffichage en calendrier fourni par agenda_affiche. Ainsi, on peut donner des styles diffrents aux lments. La feuille calendrier.css fournit 28 styles diffrents qui donnent un exemple de diffrents styles de calendrier.
|alterner
Octobre 2009
Le filtre |alterner{a, b, c, ...} appliqu une balise numrique (le plus souvent #COMPTEUR_BOUCLE) lintrieur dune boucle affiche tour de rle et dans lordre chacun de ses arguments chaque changement de valeur de la balise. Par exemple, [(#COMPTEUR_BOUCLE|alterner{white, yellow})] affichera white la premire itration de la boucle, yellow la deuxime, white la troisime, yellow la quatrime, etc. Ainsi, on peut faire une liste darticle qui utilise une couleur diffrente pour les lignes paires et impaires :
<B_lesarticles> <ul> <BOUCLE_lesarticles(ARTICLES) {par titre}> <li style="background: [(#COMPTEUR_BOUCLE|alterner{white, yellow})];">#TITRE</li> </BOUCLE_lesarticles> </ul> </B_lesarticles>
Ce filtre nest pas binaire : il est possible de lui faire afficher une donne tous les x changements de valeur ; la boucle suivante affichera les titres darticle par bloc de 4 en changeant de couleur chaque bloc :
<BOUCLE_lesarticles(ARTICLES) {par titre}> [(#COMPTEUR_BOUCLE|alterner{<p style="color:red;">, '', '', '', <p style="color:green;">, '', '', ''})] #TITRE<br> [(#COMPTEUR_BOUCLE|alterner{'', '', '', </p>})] </BOUCLE_lesarticles> [(#TOTAL_BOUCLE|modulo{4}|=={0}|non)</p>] </B_lesarticles>
143/186
|ancre_url
avril 2010
Le filtre |ancre_url{intitul} ajoute une ancre lurl sur laquelle il est appliqu (ou modifie lancre dj existante attache cette url). Exemple [(#URL_ARTICLE|ancre_url{le_paragraphe})] produira lurl de larticle suffixe de #le_paragraphe.
|annee
Juillet 2009 maj : Septembre 2009
Le filtre |annee affiche numriquement, sur 4 chiffres, lanne de la date sur laquelle il sapplique.
[(#DATE|annee)]
|appliquer_filtre
juillet 2010
Pour utiliser un filtre qui est dfini dans un plugin, quand on est pas certain que le plugin est install et activ, il ne faut pas, depuis SPIP 2.1 appeler directement le filtre ( [(#BALISE|fonction_specifique)] ), car cela gnrerait une erreur de compilation, mais passer par un appel appliquer_filtre :
[(#BALISE|appliquer_filtre{fonction_specifique})]
|attribut_html
Octobre 2009
Le filtre |attribut_html appliqu une balise de texte traduira le rendu html de celle-ci dans un format utilisable sans dommage dans un attribut html (alt="...", title="...", value="..."). Par exemple, partir dune balise #DESCRIPTIF qui retourne normalement le source html suivant : 2 est "suprieur" 1 & c'est not : 2 > 1, pour renseigner lattribut alt dune image on utilisera :
<img alt="[(#DESCRIPTIF|attribut_html)]"...
qui retournera le source html : <img alt="2 est "supérieur" à 1 & c'est noté : 2 > 1"...
144/186
Noter que ce filtre supprime les tags html : <strong>bonjour</strong> l't ! devenant : bonjour l'été !
|balise_img
avril 2010
Le filtre |balise_img gnre un tag image complet (<img src="...) partir du nom de fichier auquel il est appliqu. Il est possible de passer une valeur pour un alt et une class ventuels en fournissant ces deux arguments au filtre : |balise_img{val_alt, val_class}. Exemple :
[(#CHEMIN{monimage.png}|balise_img{paysage, spip_doc})]
produira le tag :
<img src='le_rep/monimage.png' width='180' height='56" alt='paysage' class='spip_doc' />.
affichera "sioui" si la valeur de la balise est gale "valeur" ou "sinon" si ce nest pas gale la valeur souhaite. Exemple :
<BOUCLE_blog(ARTICLES) {par date} {inverse} {"<br />"}> [<hr /><h1>(#ID_ARTICLE|choixsiegal{10, "IMPORTANT", ""})</h1>] #TITRE ... </BOUCLE_blog>
affichera le mot "IMPORTANT" si lID_ARTICLE est gal "10" ou rien sil nest pas gal "10".
|choixsivide{sioui, sinon}
Aot 2009
Le filtre |choixsivide{sioui, sinon} est quivalent au filtre |?{sioui, sinon}. Il prend un ou deux paramtres : - sioui est la valeur afficher la place de llment filtr si celui-ci est vide. - sinon est la valeur afficher si llment filtr est non vide.
[(#TEXTE|choixsivide{"pas de texte", #TEXTE})] affiche pas de texte si le champ #TEXTE na pas t rempli dans la partie prive ; affiche le contenu de #TEXTE sil a t
renseign.
|compacte
145/186
Octobre 2009
Le filtre |compacte appliqu un fichier css ou javascript [1] en cre une copie compacte, de taille rduite, o ont t supprims les commentaires, les dclarations vides, les espaces superflus etc. [2] (pour les fichiers de script Javascript, le filtre utilise la classe JavaScriptPacker). Aprs avoir archiv ce nouveau fichier dans le rpertoire local/ le filtre en retourne le lien[<link rel="stylesheet" href="(#CHEMIN{spip_style.css}|compacte)" type="text/css" media="all" />] retournera quelque chose comme : <link
rel="stylesheet" href="local/cache-css/spip_style-compacte-092e.css" type="text/css" media="all" />
Notes [1] Le fichier auquel sapplique le filtre doit avoir .js ou .css comme extension. [2] pour les fichiers de css, le filtre transforme toutes les url contenues en url absolues
#div { background : url(../prive/images/fond-gris-anim.gif); modifiable **/ width : 48px; height : 48px; margin : auto; } /** image
devenant
#div{background:url(http://www.domaine.tld/prive/images/fond-grisanim.gif);width:48px;height:48px;margin:auto;}
|couleur_*
11 juin 2010
|couleur_extraire
Le filtre ||couleur_extraire appliqu une balise image (logo, image typo...) retourne la valeur RVB hexadcimale dune couleur prsente dans limage. Fonctionnement :
146/186
Le filtre commence par redimensionner limage originale en un carr de 20 pixels par 20 pixels, pour que la couleur extraite soit reprsentative des couleurs rellement prsentes dans limage (en vitant de tomber sur un pixel isol). Puis il retourne la valeur de la couleur du pixel situ lgrement au dessus du centre de limage (par dfaut : coordonnes 10, 6). Il est possible de forcer la slection dun pixel particulier, cest dire de prciser au filtre dans quelle partie de limage originale il doit slectionner sa couleur moyenne. Pour cela on passera au filtre les coordonnes du pixel sous la forme ||couleur_extraire{x, y} o x,y devront se situer dans une fourchette de 0,0 (coin suprieur gauche) 20,20 (coin infrieur droit). Exemple : partir de limage originale ci-dessous :
147/186
agrandie ici :
Enfin, le filtre retournera la valeur colorimtrique de ce pixel. Dans cet exemple : 554839 pour ||couleur_extraire{0, 0} ; aa8454 pour ||couleur_extraire (par dfaut) ; 995c2c pour ||couleur_extraire{10, 10} ; 544738 pour ||couleur_extraire{20, 20}. Attention : le filtre retourne la valeur brute de la couleur ; pour lutiliser dans un style css, ne pas oublier de faire prcder cette valeur dun #.
|couleur_eclaircir et |couleur_foncer
148/186
Associs au filtre |couleur_extraire, les filtres |couleur_eclaircir ou |couleur_foncer permettent dobtenir des dclinaisons (camaeux) de couleurs, lensemble tant trs cohrent. partir de la couleur extraite dune image (imaginons par exemple le logo dune rubrique) :
retourneront :
Palette
|copie_locale
avril 2010
Le filtre |copie_locale cre une copie locale dun fichier distant (image, texte, pdf, html,...) provenant dun autre domaine. Appliqu une URL, ce filtre tente de copier le fichier sur lequel pointe cette url puis, si lopration a aboutie, retourne lurl relative de la copie locale du ficher (par exemple IMG/distant/jpg/l_image.jpg ). Si lopration de copie a choue, le filtre ne retourne rien. LURL du fichier que lon veut copier en local peut - soit tre indique explicitement :
149/186
[(#VAL{url_du_fichier_distant}|copie_locale)]
Mise jour de la copie Le filtre accepte un argument optionnel : |copie_locale{mode} qui peut prendre 4 valeurs. - auto (par dfaut) : dans ce cas une copie en local du fichier distant est ralise dans IMG/distant/. Cette copie nest effectue quune fois. Elle nest pas remise jour au recalcul de la page si le fichier distant a t mis jour et si son URL est reste identique. - force : la copie locale est ralise chaque recalcul de la page. Le fichier local peut donc ventuellement tre mis jour. ( utiliser avec prcautions, cette fonction tant consommatrice de ressources). - modif : la copie locale dj prsente ne sera mise jour que si elle est antrieure lentte IfModified-Since du fichier original. - test : le filtre ne fait que vrifier quil existe bien dj une copie en local du fichier donn en URL et retourne alors lurl de cette copie. Sinon, il ne fait ni ne retourne rien. Note : Pour appliquer un filtre image sur un fichier distant, il est indispensable de lui appliquer prcdemment le filtre |copie_locale. Exemple :
[(#VAL{http://www.spipcontrib.net/IMG/siteon0.png}|copie_locale|image_reduire{100})]
|couper
Septembre 2009
Le filtre |couper coupe un texte aprs un nombre de caractres paramtrable. Il essaie de ne pas couper les mots et enlve le formatage du texte. Si le texte original est plus long que lextrait coup, alors (...) est ajout la fin de lextrait. Le filtre coupe par dfaut 50 caractres, mais on peut spcifier une autre longueur en la passant comme paramtre au filtre, par exemple : [(#TEXTE|couper{80})]. De plus, ce filtre nettoie le texte de toutes ses balises html (ou formatage de texte) : il ny a plus de liens, de gras, de code, de cadre, etc. Nous avons, donc, un texte brut. Il est possible de personnaliser les points de suite de ce filtre de la manire suivante :
[(#TEXTE|couper{80, '...'})] [(#TEXTE|couper{80, ' <img src="truc.png" alt="">'})]
Noter aussi quil est frquent que la coupe ne corresponde pas exactement au nombre demand de caractres (les mots ntant pas coups).
150/186
|date_822
Septembre 2009
Le filtre |date_822 formate une balise de type date (#DATE, #DATE_REDAC, etc.) selon le standard RFC 822 (utilis pour <pubdate> dans certains flux RSS 2.0 notamment photocast). Exemple : la date 2008-10-03 08:22:00 sera affiche Fri, 03 Oct 2008 08:22:00 +0200
|date_relative
juillet 2010
Le filtre |date_relative appliqu toute balise #DATE... affichera une information lie la balise selon la date du contexte. Exemple : nous sommes le vendredi 25 septembre 2009 14h20. Un article a t publi le mercredi 23 septembre 2009 10h20.
[(#DATE|date_relative)]
donnera : Il y a 2 jours et 4 heures. A linverse, si votre site affiche les articles quelque soit leur date de publication, un article publi le dimanche 27 septembre 2009 18h20 affichera ceci : Dans 2 jours et 4 heures.
|direction_css
Octobre 2009
Le filtre |direction_css appliqu un fichier css (feuille de styles) y remplace toutes les occurrences de left par right et de right par left [1]. En fonction de la langue de lenvironnement [2] le filtre permet donc d inverser les rgles de placement dun fichier CSS. Ce filtre commence par chercher un ventuel fichier (invers) existant et, sil ne le trouve pas, le cre dans le rpertoire local/cache-css/ Si le fichier de styles inclu dautres fichiers de styles placs sur le mme domaine (host) (rgle @import url dans le fichier), le filtre propage ses modifications aux fichiers concerns.
Notes
[1] Attention : le filtre ne traite pas (ne modifie pas) les rgles du type : #div { margin: 10px 15px 10px 50px; } ; il vous faut donc prciser dans votre fichier de styles original : Manuel de rfrence des boucles et balises 151/186
#div { margin-top: 10px; margin-left: 15px; margin-bottom: 10px; marginright: 50px; } pour que les inversions puissent y tre appliques.
[2] Il est possible de passer un argument au filtre pour forcer une direction dcriture voulue : |direction_css{rtl} ou |direction_css{ltr}.
|div
Septembre 2009
Le filtre |div{xx} est un filtre doprations mathmatiques. Il retourne le rsultat de la division (le quotient) de la valeur de la balise par xx. Si le retour de la balise nest pas de type numrique, il est considr comme 0 (zro) et le filtre retourne 0 (zro) : [(#TEXTE|div{18})] retournera 0 . Il est possible de donner un nombre ngatif comme argument du filtre :
[(#TOTAL_BOUCLE|div{-5.2})].
Attention, si xx est un nombre virgule, sa notation doit utiliser le point en lieu et place de la virgule : [(#TOTAL_BOUCLE|div{5.2})].
|entites_html
Novembre 2009
Le filtre |entites_html appliqu une balise de texte traduira le rendu html de celle-ci en transformant en entites html les caractres en dehors du charset de la page ainsi que les ", < et >. Ceci permet dinsrer le texte dune balise dans un <textarea> </textarea> sans dommages. Par exemple, partir dune balise #DESCRIPTIF qui retourne normalement le source html suivant : 2 est "suprieur" 1 & c'est not : 2 > 1,
<textarea>[(#DESCRIPTIF|entites_html)]</textarea>
|env_to_params
Octobre 2009
Rcupre les paramtres passs un modle audio ou vido et en cre les correspondances pour le tag html <object>. Utilis dans un squelette de modle, dans une boucle DOCUMENTS et lintrieur dun tag html <object>, ce filtre, spcifiquement appliqu la balise ENV :
152/186
[(#ENV*|env_to_params)], rcupre les paramtres passs au modle (<emb54|center|autoplay=true|loop=false>) et cre pour chacun deux <param value="..." name="..." /> correspondant.
le tag html
Exemple : alors quun simple appel de modle <video386> produira par dfaut :
<param <param <param <param value="IMG/mov/mon_film.mov" name="movie"/> value="IMG/mov/mon_film.mov" name="src"/> value="386" name="id_video"/> value="" name="class"/>
produira :
<param <param <param <param <param <param <param <param <param <param value="IMG/mov/mon_film.mov" name="movie"/> value="IMG/mov/mon_film.mov" name="src"/> value="386" name="id_video"/> value="" name="class"/> value="center" name="center"/> value="6" name="border"/> value="false" name="autostart"/> value="false" name="autoload"/> value="3" name="loop"/> value="true" name="controls"/>
|et
Mars 2010
Le filtre |et (peut aussi tre crit |and) permet de vrifier la prsence de 2 lments. exemples :
# [(#CHAPO|et{#PS}) Il y a un chapo et un post-scriptum ] # [(#CHAPO|et{#PS}|non) Il n'y a pas la fois un chapo et un post-scriptum ]
|extraire_attribut
Octobre 2009
Le filtre |extraire_attribut{nom_attribut} permet de rcuprer lattribut prcis dun tag html. Manuel de rfrence des boucles et balises 153/186
Par exemple : si la balise #LOGO_SITE_SPIP gnre le code html <img width="353" height="120"
style="height: 120px; width: 353px;" class="spip_logos" alt="SPIP" src="local/cache-vignettes/L353xH120/siteon0-1de24.jpg"/>,
alors :
[(#LOGO_SITE_SPIP||extraire_attribut{src})] retournera local/cachevignettes/L353xH120/siteon0-1de24.jpg [(#LOGO_SITE_SPIP||extraire_attribut{width})] retournera 353 [(#LOGO_SITE_SPIP||extraire_attribut{style})] retournera height: 120px; width: 353px;
|extraire_balise
Octobre 2009
Le filtre |extraire_balise{nom_tag} permet de rcuprer le premier tag html de nom nom_tag rencontr dans le source html gnr par la balise laquelle il est appliqu. Exemple : Nous syndiquons un photoblog qui diffuse systmatiquement un petit commentaire suivi dune photographie. Cette dernire se prsente sous la forme dune balise HTML <img src="... />. Une fois ce photoblog syndiqu dans notre site, nous pouvons dcider de nafficher que la photo, sans le commentaire : [(#DESCRIPTIF|extraire_balise{img})] partir de l tout est possible :
|fichier
Septembre 2009 maj : 20 aot
Le filtre |fichier ne peut sappliquer qu une balise #LOGO. Il retourne le chemin daccs (le path) vers le fichier correspondant au logo associ au document. exemples : [(#LOGO_DOCUMENT|fichier)] peut retourner prive/vignettes/pdf.png (cas dune vignette standard de SPIP), ou bien local/cachevignettes/L112xH54/mon_fichier.png (cas dune vignette personnalise), ou encore png/image_1.png (pas de vignette). Attention : bien quil sapplique une balise #LOGO ce filtre ne doit pas tre utilis avec un double pipe (||fichier ne fonctionnera pas) ; ne pas confondre ce filtre avec la balise homonyme #FICHIER.
154/186
volution : Ce filtre devient obsolte partir de SPIP 2.1 et on utilisera en remplacement : #LOGO_DOCUMENT**.
|find
Dcembre 2009
Le filtre |find appliqu un tableau vrifie la prsence dune valeur dans le tableau Le filtre |find permet de vrifier la prsence dune valeur dans le tableau auquel il est appliqu :
[(#GET{mon_tableau}|find{la_valeur}|oui) Ceci s'affiche si la valeur la_valeur est bien prsente dans le tableau mon_tableau.]
Si #GET{mon_tableau} nest pas un tableau (array au sens PHP), la balise filtre par |find ne retourne rien.
|foreach
Avril 2010
Le filtre |foreach utilise le modle squelettes-dist/modeles/foreach.html pour afficher de faon prsentable les couples clef=> valeur du tableau auquel il est appliqu. - Pour #SET{tablo, #ARRAY{0,a,1,b,2,c,3,d}}, [(#GET{tablo}|foreach)] retourne :
- Si la balise laquelle est applique le filtre |foreach est un tableau linaris (voir les fonctions PHP), il est indispensable de lui appliquer le filtre |unserialize aprs lavoir toile pralablement : par exemple : [(#ENV*|unserialize|foreach)]. - On peut forcer lutilisation dun modle autre que foreach.html en appelant : o mon_modele.html est le modle personnalis utiliser et que lon aura pris soin de placer dans squelettes/modeles/. - Exemple : afficher la liste des noms des plugins actifs utiliss sur le site
[(#GET{tablo}|foreach{mon_modele})]
155/186
|form_hidden
juillet 2010
Si on fait un formulaire qui utilise comme action un lien comprenant des arguments (par exemple, quand on utilise la balise #SELF avec le type durl par dfaut), il faut remettre ces valeurs dans des champs hidden ; cette fonction calcule les champs en question. utiliser par exemple comme suit :
<form action="#SELF"> [(#SELF|form_hidden)] ... </form>
|hauteur
Septembre 2009
Le filtre |hauteur appliqu un lment image (balise LOGO, image typographique, ...) retourne la hauteur calcule de cet lment une fois filtr. La hauteur retourne est exprime en pixels. Exemple : aprs avoir appliqu le filtre |image_reduire{250, 500} un logo, pour connatre la hauteur relle de limage obtenue, on crira [(#LOGO_DOCUMENT||image_reduire{250,500}|hauteur)].
|heures
Septembre 2009
Lheure retourne varie de 00 24. Si la date sur laquelle est applique le filtre ne contient pas dinformation horaire ([(#VAL{2009-10-24}|heures)]), le filtre retournera 0 (zro).
|image_passe_partout
juillet 2010
Alors que image_reduire produit la plus petite image tenant dans un rectangle, image_passe_partout produit la plus grande image qui remplit ce rectangle
156/186
Suivi dun image_recadre avec les mmes dimensions il permet de produire des vignettes de dimensions imposes, sans dformation Exemple
[(#FICHIER |image_passe_partout{70,70} |image_recadre{70,70,center} |image_aplatir{jpg,ffffff} |inserer_attribut{class,spip_logos})]
|inserer_attribut
Octobre 2009
Le filtre |inserer_attribut{attribut, valeur} permet de modifier ou ajouter un attribut html dans un tag html gnr par la balise laquelle il est appliqu. Par exemple :
[(#LOGO_DOCUMENT||inserer_attribut{alt, #TITRE|attribut_html})]
modifie lattribut alt du tag html img gnr par la balise #LOGO_DOCUMENT en lui affectant comme valeur le titre du document. Il est aussi possible de vider un attribut en lui passant une valeur vide :
[(#DESCRIPTIF|inserer_attribut{class, ''})]
Notes : Le filtre nintervient que sur la premire occurrence rencontre de attribut ; si aucune occurrence nest releve, alors il sapplique sur le premier tag rencontr. ainsi [(#TEXTE|inserer_attribut{class, perso})] modifiera le premier attribut class rencontr dans #TEXTE et seulement celui-ci ou bien, si aucun attribut class nest prsent dans #TEXTE, crera un class="perso" dans le premier tag html prsent dans #TEXTE (par dfaut, dans le <p> ouvrant).
|is_null
novembre
2010
Une fonction PHP utilise comme filtre et qui sapplique la balise #ENV. Elle permet de tester lexistence ou non dune variable dans lenvironnement SPIP.
Il est parfois ncessaire de diffrencier une variable de contenu vide dune variable inexistante . Ce filtre est l pour vous y aider. Il sapplique la balise #ENV{blabla} et permet donc de tester lexistence ou non de la variable "blabla" dans lenvironnement du squelette.
[(#ENV{blabla}|is_null)]
Ce code retourne "1" si la variable "blabla" est nulle (inexistante) ou rien si elle est non nulle (prsente). Attention : ne pas confondre variable nulle , cest dire inexistante, et variable vide , cest dire prsente dans lenvironnement mais sans valeur affecte.
157/186
Ce filtre ne sapplique pas aux variables dclares avec #SET dont la valeur nest pas prsente dans lenvironnement mais uniquement dans le squelette.
|jour
Septembre 2009
|largeur
Septembre 2009
Le filtre |largeur appliqu un lment image (balise LOGO, image typographique, ...) retourne la largeur calcule de cet lment une fois filtr. La largeur retourne est exprime en pixels. Exemple : aprs avoir appliqu le filtre |image_reduire{500} un logo, pour connatre la largeur relle de limage obtenue, on crira [(#LOGO_DOCUMENT||image_reduire{500}|largeur)].
|liens_absolus
Juillet 2009 maj : Novembre 2009
Le filtre |liens_absolus sapplique sur une balise de texte (#TEXTE, #DESCRIPTIF, etc.) et transforme tous les liens que celui-ci contient (<a href=..., <link href:..., <img src=... et <script src=...) en liens absolus (avec lurl complte du site). exemple :
<img src="local/cache-vignettes/L500xH333/belle_image.jpg"..
sera traduit en
<img src="http://le_site.fr/local/cachevignettes/L500xH333/belle_image.jpg"...
ou encore
<a href="spip.php?page=article&id_article=25"...
donnera
<a href="http://le_site.fr/spip.php?page=article&id_article=25"...
- Ce filtre est particulirement utile dans des squelettes de fil rss par exemple.
|lien_ou_expose
16 avril
158/186
Appliqu une URL, le filtre |lien_ou_expose{intitul, condition} affiche en fonction du rsultat de la condition soit le lien cliquable vers cette url, soit seulement lintitul pass en argument. Exemple :
[(#URL_RUBRIQUE|lien_ou_expose{#TITRE, #ENV{test}|=={en_cours}})]
affichera sil existe une variable de nom test et de valeur en_cours dans lenvironnement : Titre_de_la_rubrique affichera sinon : Titre_de_la_rubrique Le filtre accepte aussi 3 arguments supplmentaires optionnels class , title et rel
[(#URL_RUBRIQUE|lien_ou_expose{#TITRE, #ENV{test}|=={en_cours}, spip_lien, la super rubrique, biblioentry})]
soit :
<strong class='on'>Titre_de_la_rubrique</strong>
|liens_ouvrants
Octobre 2009
Le filtre |liens_ouvrants, appliqu sur une balise de texte, transforme les liens SPIP qui mnent vers des sites extrieurs pour quils souvrent dans une nouvelle fentre ou onglet ( popup ) ; cest lquivalent du target="_blank" du HTML (lire aussi : Des liens qui ouvrent une nouvelle fentre).
|lignes_longues
Octobre 2009
Le filtre |lignes_longues, introduit des csures dans les mots trops longs en y insrant des espaces scables qui permettent alors le passage la ligne (utile, par exemple, pour afficher des urls dans une colonne troite). Ainsi, si le #TEXTE dun article contient un lien comme :
<a href="http://www.spip.net/spip.php?page=recherche&recherche=lignes_longues" >http://www.spip.net/spip.php?page=recherche&recherche=lignes_longues</a>
alors
159/186
affichera
http://www.spip.net /spip. php?page=recherche& recherche=lignes_longues
Noter que la csure conserve les tag html ; dans lexemple ci-dessus, tout le lien est cliquable comme on peut le voir dans le source html. Ce filtre coupe par dfaut 70 caractres, mais on peut spcifier une autre longueur en passant un paramtre au filtre, par exemple : [(#TEXTE|lignes_longues{40})].
|match
Septembre 2009 maj : 23 octobre
Le filtre |match utilise une expression rationnelle (ne pas hsiter consulter la page wikipedia ddie : Expression_rationnelle) pour afficher un motif prsent dans la balise, ou rien si absent. Par exemple : rcuprer le premier mot du titre [(#TITRE|match{^\w+?})] ; afficher "toto" si prsent dans le titre : [(#TITRE|match{toto})] Il est possible de passer 3 arguments ce filtre : le motif (ou pattern ) : ex. ^a trouver$ ; les options (ou modificateurs) : ex. Uims ; le numro de parenthse capturante (par dfaut lintgralit du motif). Mais il est aussi permis de ne passer que 2 arguments : le motif et le numro de parenthse capturante (ex. #BALISE|match{toto_(\d+)$, 1} qui ne retournera que le ou les chiffres finaux qui sont directement prcds par le mot toto_). Attention : Sil nest pas possible de dclarer une classe de caractres comme argument du filtre : |match{[a-zA-Z]+} produira une erreur de compilation due laprsence des crochets [ et ], il est nanmoins possible dcrire des regexp complexes utilisant les classes de caractres en les dfinissant pralablement :
#SET{ma_regexp, ^[[:space:]]*([0-9]+)([.)]|?)[[:space:]]+} [(#DESCRIPTIF|match{#GET{ma_regexp, Uims, 1}})]
|minutes
Septembre 2009
160/186
Laffichage retourn varie de 00 59. Si la date sur laquelle est applique le filtre ne contient pas dinformation horaire ([(#VAL{2009-10-24}|minutes)]), le filtre retournera 0 (zro).
|modulo
Septembre 2009 maj : avril 2010
Le filtre |modulo{xx} est un filtre doprations mathmatiques. Il retourne le reste de la division de la valeur de la balise par xx. Si le retour de la balise nest pas de type numrique, il est considr comme 0 (zro) et le filtre retourne 0 (zro). Ce filtre accepte un deuxime argument qui doit tre numrique (nombre entier ou nombre virgule) et qui sera ajout au rsultat :[(#VAL{20}|modulo{3, 2.4})] retournera 4.4 . Exemple : pour faire varier un affichage dans une boucle chaque tour de boucle : [(#COMPTEUR_BOUCLE|modulo{3})] affichera 0 pour le premier rsultat retourn par la boucle, puis 1 pour le second rsultat, 2 pour le troisime, puis reviendra 0 pour le quatrime, 1 pour le cinquime...
|modulo{x}
moins 1. Attention : si 0 (zro) est pass comme argument du filtre ([(#VAL{20}|modulo{0})] par exemple) un warning php Warning : Division by zero sera mis.
|moins
Septembre 2009
Le filtre |moins{xx} est un filtre doprations mathmatiques. Il retourne le rsultat de la soustraction (la diffrence) de xx la valeur de la balise. Si le retour de la balise nest pas de type numrique, il est considr comme 0 (zro) et le filtre retourne loppos de la valeur de son argument : [(#TEXTE|moins{18})] retournera 18 . Il est possible de donner un nombre ngatif comme argument du filtre : [(#TOTAL_BOUCLE|moins{-5.2})] mais dans ce cas, sans doute est-il prfrable dutiliser le filtre |plus. Attention, si xx est un nombre virgule, sa notation doit utiliser le point en lieu et place de la virgule : [(#TOTAL_BOUCLE|moins{5.2})].
161/186
|mois
Septembre 2009
Le filtre |mois affiche numriquement, sur 2 chiffres, le mois de la date sur laquelle il sapplique.
[(#DATE|mois)]
|mult
Septembre 2009
Le filtre |mult{xx} est un filtre doprations mathmatiques. Il retourne le rsultat de la multiplication (le produit) de la valeur de la balise par xx. Si le retour de la balise nest pas de type numrique, il est considr comme 0 (zro) et le filtre retourne 0 (zro) : [(#TEXTE|mult{18})] retournera 0 . Il est possible de donner un nombre ngatif comme argument du filtre : [(#TOTAL_BOUCLE|mult{-5.2})]. Attention, si xx est un nombre virgule, sa notation doit utiliser le point en lieu et place de la virgule : [(#TOTAL_BOUCLE|mult{5.2})].
|nom_jour
Septembre 2009
Le filtre |nom_jour, appliqu une balise qui retourne une date valide, affiche lintitul littral du jour (lundi, mardi...). Exemple : pour un article publi le 22-01-2008, [(#DATE|nom_jour)] affichera mardi . Ce filtre peut utiliser un argument (soit abbr , soit initiale ) qui modifiera laffichage rsultant en abrviation ou en initiale : [(#VAL{2008-01-22}|nom_jour{abbr})] affichera mar. [(#VAL{2008-01-22}|nom_jour{initiale})] affichera m.
|nom_mois
Septembre 2009
Le filtre |nom_mois, appliqu une balise qui retourne une date valide, affiche lintitul littral du mois (janvier, fvrier...). exemple : pour un article publi le 22-01-2008, affichera janvier .
[(#DATE|nom_mois)]
162/186
|non
Mars 2010
Le filtre |non (peut aussi tre crit |not) retourne soit rien soit un espace. quivalent |?{'',' '} ou |?{''}, il permet de retourner un contenu vide pour signaler que les parties optionnelles de la balise ne doivent pas afficher. exemples :
[(#TITRE|strlen|>{30}|non) Ce titre est court ] [(#EMAIL|non) #FORMULAIRE_SAISIE_EMAIL ]
|ou
17 juin 2010
Le filtre |ou (peut aussi tre crit |or) permet de vrifier la prsence de lun des 2 lments. exemples :
[(#CHAPO|ou{#PS}) Il y a soit un chapo, soit un post-scriptum, soit les deux ] [(#CHAPO|ou{#PS}|non) Il n'y a ni chapo seul, ni post-scriptum seul, ni chapo et post-scriptum ]
|oui
8 mars
Le filtre |oui (peut aussi tre crit |yes) retourne soit un espace soit rien. quivalent |?{' ',''} ou |?{' '}, il permet de retourner un contenu non vide (un espace) pour signaler que les parties optionnelles de la balise doivent safficher. exemples :
[(#TITRE|strlen|>{30}|oui) Ce titre est long ] [(#EMAIL|oui) #FORMULAIRE_CONTACT ]
|parametre_url
26 juillet 2010
Le filtre |parametre_url{nom de variable,valeur}, appliqu une balise durl (par exemple : #SELF, #URL_ARTICLE, #URL_PAGE{sommaire}...), lui ajoute ou lui retire un paramtre. Par exemple :
[(#SELF|parametre_url{pays,france})]
?pays=france
sil sagit du premier paramtre pass cette url, si lurl possde dj au moins un paramtre.
soit :
&pays=france
Pour rcuprer ensuite la valeur du paramtre pass dans lurl, on utilisera la balise #ENV. Ainsi, dans lexemple ci-dessus #ENV{pays} retournera france. Passer plusieurs paramtres lURL On peut enchaner les filtres pour passer en url une suite de paramtres et leurs valeurs :
[(#SELF|parametre_url{pays,france}|parametre_url{monnaie,euro})]
Si lon dsire passer une mme valeur plusieurs paramtres, on utilisera lcriture :
[(#SELF|parametre_url{pays|lieu|terrain,france})]
Supprimer des paramtres existants Pour faire disparaitre un paramtre durl existant, il faut le vider de sa valeur en le dclarant nouveau, mais explicitement vide : [(#SELF|parametre_url{pays,''})] On peut supprimer plusieurs paramtres la fois avec lcriture :
[(#SELF|parametre_url{pays|lieu|terrain,''})]
|plus
Septembre 2009
Le filtre |plus{xx} est un filtre doprations mathmatiques. Il retourne le rsultat de laddition (la somme) de la valeur de la balise et xx. Si le retour de la balise nest pas de type numrique, il est considr comme 0 (zro) et le filtre retourne son propre argument : [(#TEXTE|plus{18})] retournera 18 . Il est possible de donner un nombre ngatif comme argument du filtre : mais dans ce cas, sans doute est-il prfrable dutiliser le
Attention, si xx est un nombre virgule, sa notation doit utiliser le point en lieu et place de la virgule : [(#TOTAL_BOUCLE|plus{5.2})].
|PtoBR
Octobre 2009 maj : avril 2010
Le filtre |PtoBR transforme les sauts de paragraphe en simples retours la ligne, ce qui permet de resserrer une mise en page, par exemple lintrieur dun sommaire.
164/186
Ce filtre permet aussi de supprimer occasionnellement lencadrement systmatique (voir lalina Paragraphes de larticle SPIP 2.0) des balises de texte par les tags <p> et </p> Par exemple, une balise #DESCRIPTIF qui retourne normalement le source html suivant :
<p><strong>William Shakespeare :</strong></p><p style="color:navy;">n Stratford-sur-Avon dans une maison sous les tuiles de laquelle tait cache...</p>
|push
Dcembre 2009 |push
Le filtre |push sapplique une balise contenant un tableau PHP (voir #ARRAY) et y ajoute une nouvelle valeur. La cl est incrmente de 1 chaque nouvelle valeur. Si aucune cl na t dfinie pour la premire valeur, le tableau est index partir de 0 (la premire cl est 0).
#SET{un_tableau,#ARRAY{5,une_valeur}} #SET{un_tableau,#GET{un_tableau}|push{une_autre_valeur}} #SET{un_tableau,#GET{un_tableau}|push{une_troisieme_valeur}} [(#GET{un_tableau}|foreach)]
affiche :
La premire cl est 5 parce quelle a t prcise lors de la cration du tableau (premier #SET). Exemple courant dusage de |push :
#SET{mes_articles, #ARRAY} <BOUCLE_mes_articles(ARTICLES){...}> #SET{mes_articles, #GET{mes_articles}|push{#ID_ARTICLE}} </BOUCLE_mes_articles>
Si les articles slectionns par la BOUCLE portent les numros 2, 5 et 10, [(#GET{mes_articles}|foreach)] retourne :
165/186
Ici, la premire cl est zro car aucune cl na t dfinie pralablement. Contrairement la fonction PHP array_push, |push ne produit pas de message derreur si la balise filtre nest pas un tableau.
|replace
Septembre 2009 maj : Novembre 2009
Le filtre |replace utilise une expression rationnelle (ne pas hsiter consulter la page wikipedia ddie : Expression_rationnelle) pour supprimer ou remplacer toutes les occurences dun motif dans la balise. Utilis avec un seul paramtre, une expression rgulire, le motif sera supprim. Par exemple pour supprimer tous les "notaXX" du texte [(#TEXTE|replace{nota\d*})]. Lorsquun deuxime paramtre est fourni au filtre, les occurences du motif seront remplaces par cette valeur. Par exemple pour remplacer tous les 2005 ou 2006 du texte par 2007 :
[(#TEXTE|replace{200(5|6), 2007})]
. Les arguments du filtre peuvent ntre que de simples textes : remplacer tous les au temps par autant : [(#TEXTE|replace{au temps, autant})] Un troisime paramtre peut encore tre pass au filtre. Il correspondra alors aux options (ou modificateurs) appliquer la regexp :
[(#TEXTE|replace{^ceci$, cela, UimsS})]
Attention : Sil nest pas possible de dclarer une classe de caractres comme argument du filtre : |replace{[0-9]+} produira une erreur de compilation due la prsence des crochets [ et ], il est nanmoins possible dcrire des regexp complexes utilisant les classes de caractres en les dfinissant pralablement :
#SET{ma_regexp, ^[[:space:]]*([0-9]+)([.)]|?)[[:space:]]+} [(#DESCRIPTIF|replace{#GET{ma_regexp}, __, Uims}})]
|safehtml
Octobre 2009
Les contenus HTML provenant de lextrieur (par retour de formulaire ou syndication) sont par dfinition considrs comme non contrls , et donc potentiellement problmatiques sils contiennent des balises mal fermes, des scripts javascript, php, sql... SPIP leur applique donc systmatiquement le filtre safehtml avant affichage. Cela concerne tout particulirement les flux syndiqus, les forums et les ptitions. Manuel de rfrence des boucles et balises 166/186
|saison
Septembre 2009
Le filtre |saison, appliqu une balise qui retourne une date valide, affiche lintitul littral de la saison correspondante (t, automne...). exemple : pour un article publi le 22-01-2008, affichera hiver .
[(#DATE|saison)]
du 21-03 au 20-06 : printemps du 21-06 au 20-09 : t du 21-09 au 20-12 : automne du 21-12 au 20-03 : hiver
|secondes
Septembre 2009
Laffichage produit varie de 00 59. Si la date sur laquelle est applique le filtre ne contient pas dinformation horaire ([(#VAL{2009-10-24}|secondes)]), le filtre retournera 0 (zro).
2010
Le filtre |singulier_ou_pluriel permet de faire varier un affichage en fonction de la valeur numrique retourne par la balise laquelle il est appliqu. Le filtre |singulier_ou_pluriel est la plupart du temps utilis pour accorder (singulier ou pluriel) les chanes de langue en fonction du retour dune balise.
167/186
Noter que lon peut passer un 3e argument ce filtre : nb qui permet dintgrer dans la chane de langue la valeur numrique retourne par la balise. Attention : Ce filtre attend explicitement des item de langue comme arguments. Il ne faudra donc pas lui passer des balises de langue :
|singulier_ou_pluriel{module:item_un, module:item_plus}
| ?{sioui, sinon}
Aot 2009
Le filtre |?{sioui,sinon} est une version volue de |sinon. Il prend un ou deux paramtres : - sioui est la valeur afficher la place de llment filtr si celui-ci est non vide. - sinon est optionnel. Cest la valeur afficher si llment filtr est vide.
[(#TEXTE|?{#TEXTE, "pas de texte"})]
affiche le contenu de #TEXTE sil a t renseign ; pas de texte si celui-ci est vide.
|sinon
Septembre 2009
Le filtre |sinon affiche largument qui lui est donn si le retour produit par la balise laquelle il sapplique est vide :
168/186
[(#TEXTE|sinon{"pas de texte"})]
affichera le contenu de #TEXTE sil existe, et pas de texte si #TEXTE ne retourne rien. Largument du filtre peut tre plus complexe quun simple texte :
[(#TEXTE|sinon{#INCLURE{fond=ma_page, env, id_article}})]
|supprimer_numero
Octobre 2009
Le filtre |supprimer_numero sutilise pour ne pas afficher le prfixe numrot [1] dun titre. Ainsi, pour le titre 0118. Titre de mon article , [(#TITRE|supprimer_numero)] affichera Titre de mon article . Notes [1] Le format des prfixes numrots est : un nombre de n chiffres, suivi dun point ou dune parenthse fermante, suivie dun espace. exemples : 015. Le titre 51) Le titre
|supprimer_tags
Octobre 2009
Le filtre |supprimer_tags supprime du retour de la balise laquelle il sapplique tous les tags html (<...>) tout en conservant le contenu de ces mme tags. Par exemple, pour une balise #DESCRIPTIF qui contiendrait : <p><strong>William Shakespeare</strong> naquit Stratford-sur-Avon, <span class='spip_document_164 spip_documents spip_documents_center' ><img src='IMG/png/maison-2.png' width="68" height="43" alt="" /></span> dans une maison sous les tuiles de laquelle tait cache...</p> retournera, une fois le filtre appliqu :
William Shakespeare naquit Stratford-sur-Avon, tuiles de laquelle tait cache... dans une maison sous les
Noter que le filtre supprime aussi tous les < rencontrs ; ainsi 18 + x < 21 ; x = ? deviendra 18 + x 21 ; x = ?
|table_valeur
Dcembre 2009 |table_valeur
169/186
Le filtre |table_valeur (depuis SPIP 1.9) sapplique une balise contenant un tableau, prend une cl du tableau comme paramtre et retourne la valeur associe cette cl. Voir la balise #ARRAY pour une explication plus gnrale sur les tableaux. Exemple :
#SET{un_tableau,#ARRAY{0,rouge,1,bleu,2,vert}} [(#GET{un_tableau}|table_valeur{2})]
retourne vert. Le paramtre optionnel valeur par dfaut permet de prciser une valeur retourner si la valeur nest pas trouve (la cl nexiste pas ou la balise filtre nest pas un tableau).
[(#GET{un_tableau}|table_valeur{3,noir})]
fonctionne aussi avec des tableaux "linariss", par exemple, les tableaux retourns par les balises #ENV et #CONFIG (mais ces balises disposent de leur propre syntaxe pour accder aux valeurs du tableau). Le tableau ci-dessus linaris (Voir les fonctions serialize et unserialize en PHP) donne ceci :
a:3:{i:0;s:5:"rouge";i:1;s:4:"bleu";i:2;s:4:"vert";} [(#GET{un_tableau}|table_valeur{2})]
|taille_en_octets
Septembre 2009
Le filtre |taille_en_octets traduit un nombre doctets (25678906) en une chane de caractres plus explicite ( 24.4 Mo ). exemple, dans une boucle DOCUMENTS :
#TITRE - #TYPE_DOCUMENT[ - (#TAILLE|taille_en_octets)])
|texte_backend
Octobre 2009
Le filtre |texte_backend appliqu une balise de texte traduira le rendu html de celle-ci dans un format compatible avec les flux XML. Il est utilis, par exemple, dans le squelette backend.html qui gnre un fil RSS.
170/186
Ce filtre transforme les liens en liens absolus, importe les entites html et chappe les tags html. Par exemple, une balise #DESCRIPTIF qui retourne normalement le source html suivant :
<p><strong>William Shakespeare</strong> naquit Stratford-sur-Avon, <span class='spip_document_164 spip_documents spip_documents_center' ><img src='IMG/png/maison-2.png' width="68" height="43" alt="" /></span> dans une maison sous les tuiles de laquelle tait cache...</p>
|textebrut
Octobre 2009
Le filtre |textebrut transforme le retour de la balise sur laquelle il est appliqu en remplaant les tags <p> et <br /> par de simple retour la ligne ; les doubles retours la ligne par un retour simple et en transformant les espaces inscables et les doubles espaces par des espaces simples. Il sutilise, par exemple, pour renseigner un tag meta (html) : [<meta name="description" content="(#DESCRIPTIF|textebrut)">].
|texte_script
Octobre 2009 maj : Dcembre 2009
le filtre |texte_script transforme tout retour de balise en une chane utilisable en toute scurit dans un script PHP ou Javascript. Par exemple le script php suivant :
<?php $x = '[(#TEXTE|texte_script)]'; ?>
Attention : utilisez bien le caractre (simple quote) et non " (double quote) pour dlimiter votre variable php. En effet, dans le second cas, si votre texte contient le signe $, le rsultat peut tre catastrophique (affichage partiel, affichage dautre chose, plantage php, etc.). Appliqu sur une balise dans un squelette (html) hors script js ou php, ce filtre se contente dchapper lapostrophe : c\'tait l\'t.
|traduire_nom_langue
Septembre 2009
171/186
|traduire_nom_langue sapplique la balise #LANG et retourne un traduction du code de langue quelle retourne (fr, en, it, etc.) dans cette langue.
Remarque : Les traductions des codes sont faites dans la langue que reprsente ce code et suivent les conventions dcriture de cette langue. Ainsi fr sera traduit franais en minuscule, alors que es sera traduit Espaol avec une majuscule.
|unique
Octobre 2009
Le filtre |unique retourne la valeur de la balise laquelle il sapplique seulement si cest la premiere fois quelle est rencontre. Il sapplique donc sur une balise place lintrieur dune boucle. Il est possible, pour diffrencier plusieurs utilisations indpendantes au sein de la boucle, de passer un argument de nommage ce filtre. Par exemple : [(#ID_SECTEUR|unique{en_tete})] naura pas dincidence sur (nempchera pas laffichage de) : [(#ID_SECTEUR|unique{corps})]. Le filtre accepte aussi un deuxime argument : 1 pour afficher le nombre de fois o la balise a t filtre. Par exemple : [(#ID_SECTEUR|unique{corps, 1})] affichera le total correspondant au nombre de fois o #ID_SECTEUR aura t filtr par |unique{corps}. On prfrera toutefois cette notation lutilisation (plus conomique) de la balise spcifique #TOTAL_UNIQUE{corps} (Voir la page consacre la balise #TOTAL_UNIQUE). - Le filtre |unique peut tre intressant pour, par exemple, afficher une liste darticles par date :
<BOUCLE_blog(ARTICLES) {par date} {inverse} {"<br>"}> [<hr /><h1>(#DATE|affdate_mois_annee|unique)</h1>] #TITRE ... </BOUCLE_blog>
172/186
Dans ce dernier exemple, on utilise la notation affdate{'Y-m'} pour afficher le nom du mois chaque changement danne. En effet :
si lon ne faisait que [(#DATE|nom_mois|unique)], les noms de mois ne seraient affichs que la premire anne ; si le filtrage tait [(#DATE|unique|nom_mois)], on afficherait toutes les dates. En effet, #DATE retourne une date complte qui contient aussi les heures, minutes et secondes. Il y a donc une grande probabilit que les dates compltes de deux articles publis le mme jours soient diffrentes. Cest pourquoi on ne garde que le mois et lanne de la date avant de la passer au filtre unique.
|url_absolue
Juillet 2009 maj : octobre 2010
- |url_absolue fonctionne de la mme faon que le filtre |liens_absolus, mais sapplique une balise qui retourne une url (par exemple #URL_ARTICLE ou #URL_RUBRIQUE...). exemples :
<a href="-Publications-"... sera traduit en <a href="http://le_site.fr/-Publications-"...
ou encore
<a href="spip.php?rubrique67"...
donnera
<a href="http://le_site.fr/spip.php?rubrique67"...
Attention, cette balise conserve le protocole (http ou https) et le nom dhte de la page appelante. Pour forcer une certaine URL de base, il est possible de la passer en argument. Ceci peut savrer utile si votre site se dcline en plusieurs sous-domaines mais que vous souhaitez forcer un certain prfixe. Par exemple, si votre site se dcline en a.le-site.fr, b.lesite.fr, etc. :
#CHEMIN{truc.css}|url_absolue{#URL_SITE_SPIP}
donnera :
http://le-site.fr/squelettes/truc.css
|url_absolue_css
Octobre 2009
Le filtre |url_absolue_css appliqu un fichier de styles, transforme toutes les url relatives prsentes en url absolues. Manuel de rfrence des boucles et balises 173/186
|vider_attribut
Septembre 2009
Le filtre vider_attribut{attribut} est une variante de inserer_attribut. Il permet de supprimer les attributs html. Par exemple, on peut vouloir rinitialiser un attribut avant de lui affecter une valeur spcifique :
[(#LOGO||vider_attribut{style}|inserer_attribut{style,'width:100px;'})]
Ce code commence par enlever compltement lattribut style sur limage dun logo avant de le remettre mais dot cette fois seulement de la valeur dsire.
|xou
Mars 2010
Le filtre |xou (peut aussi tre crit |xor) permet de vrifier la prsence dun seul lment parmi 2. exemples :
[(#CHAPO|xou{#PS}) Il y a soit un chapo, soit un post-scriptum, mais pas les 2 ] [(#CHAPO|xou{#PS}|non) Il peut y avoir ni chapo ni post-scriptum ou bien un chapo et un post-scriptum]
174/186
Pour tous les filtres ci-aprs : [1] si un nombre dcimal est pass comme valeur, il faut utiliser le point et non la virgule [2] la vrification tient compte de la casse (majuscules-minuscules) utilise
|>{a}
Octobre 2009
Le filtre |>{valeur} retourne vrai si le rsultat de la balise laquelle il sapplique est strictement suprieur valeur .
{valeur}
peut tre numrique [1] (5, 18.2, 84,...), ou alphanumrique [2] (abc, un mot,...)
Par exemple :
[Il y a (#TOTAL_BOUCLE|>{1543}|?{' vraiment beaucoup d'articles', ' trop d'articles'}) dans cette rubrique.].
|>={a}
Septembre 2009
Le filtre |>={valeur} retourne vrai si le rsultat de la balise laquelle il sapplique est suprieur ou gal valeur .
{valeur}
peut tre numrique [1] (5, 18.2, 84,...), ou alphanumrique [2] (abc, un mot,...)
Par exemple :
[(#TOTAL_BOUCLE) [(#TOTAL_BOUCLE|>={2}|?{'articles', 'article'})] dans cette rubrique.] pour afficher correctement laccord.
|<{a}
Octobre 2009
Le filtre |<{valeur} retourne vrai si le rsultat de la balise laquelle il sapplique est strictement infrieur valeur .
{valeur}
peut tre numrique [1] (5, 18.2, 84,...), ou alphanumrique [2] (abc, un mot,...)
Par exemple :
[(#TOTAL_BOUCLE) [(#TOTAL_BOUCLE|<{2}|?{'article', 'articles'})] dans cette rubrique.] pour afficher correctement laccord.
|<={a}
Septembre 2009
175/186
Le filtre |<={valeur} retourne vrai si le rsultat de la balise laquelle il sapplique est infrieur ou gal valeur .
{valeur}
peut tre numrique [1] (5, 18.2, 84,...), ou alphanumrique [2] (abc, un mot,...)
Par exemple :
[(#TOTAL_BOUCLE|<={4})]
| !={a}
Septembre 2009
Le filtre |!={valeur} permet de vrifier la stricte ingalit entre llment filtr et valeur. La vrification tient compte de la casse des caractres ( A diffrent de a ). Par exemple : <li [(#TITRE|!={dito}|?{'','id="edito"'})]>#TITRE</li>
|=={a}
Septembre 2009
Le filtre |=={valeur} permet de vrifier la stricte galit entre llment filtr et valeur. La vrification tient compte de la casse des caractres ( A diffrent de a ). Par exemple : <li [(#TITRE|=={dito}|?{'id="edito"',''})]>#TITRE</li>.
176/186
_CNIL_PERIODE
Septembre 2010
partir de la version 2.1.2 de SPIP, les adresses IP stockes dans la table spip_forum sont encryptes de manire non rversible (algorithme MD5) au bout de 4 mois. Il est possible de modifier le dlai avant cryptage des IP (4 mois par dfaut) en dfinissant cette constante dans votre fichier config/mes_options.php (voir larticle qui lui est consacr). Par exemple :
// crypter les IP au bout de 2 mois define('_CNIL_PERIODE', 3600*24*31*2);
Pour que SPIP ne crypte jamais les IP vous pouvez dfinir cette constante zro :
// ne jamais crypter les IP define('_CNIL_PERIODE', 0);
P.-S. Ce cryptage sappuie sur larticle 226-20 du code pnal franais et les bonnes pratiques dites par la CNIL.
_DIR_PLUGINS_AUTO
Avril 2010 _DIR_PLUGINS_AUTO
dfinit lemplacement du dossier qui contiendra les plugins installables par le mcanisme de tlchargement de plugins intgr SPIP. est une chane de caractres correspondant un chemin relatif partir
_DIR_PLUGINS_AUTO
de la racine de SPIP. Il est possible de dfinir cette constante dans votre fichier config/mes_options.php (voir larticle qui lui est consacr). Manuel de rfrence des boucles et balises 177/186
Dfinir cette constante la valeur '' (chane vide) permet de dsactiver compltement la fonctionnalit dinstallation automatique. Exemple :
// Dsactiver l'installation par tlchargement depuis l'administration de SPIP define('_DIR_PLUGINS_AUTO', '');
_DOC_MAX_SIZE
Mars 2010
Cette constante dfinit le poids maximum en kilo-octets en-dessous duquel SPIP acceptera denregistrer un document [1]. Il est possible de dfinir cette constante dans votre fichier config/mes_options.php (voir larticle qui lui est consacr) [2] - Valeur par dfaut : 0 exemple :
// les documents de plus de 250 Ko ne seront pas enregistrs define('_DOC_MAX_SIZE', 250);
Lorsque cette constante est dfinie 0 (zro), SPIP neffectue pas de vrification lors de lupload dun document. Voir aussi : _IMG_MAX_SIZE. Notes [1] de par le fonctionnement des formulaires dupload, le fichier document sera quand mme envoy sur le serveur. Ce nest quune fois upload que SPIP vrifiera la conformit de ce fichier avec la constante. [2] Attention, cela gnrera un message PHP davertissement de type NOTICE : vrifiez que le serveur naffiche pas ce type derreur.
178/186
_ID_WEBMESTRES
Avril 2010 _ID_WEBMESTRES dfinit le ou les administrateurs ayant le rle de webmestre (ce qui donne des droits supplmentaires dans linterface prive). _ID_WEBMESTRES est une chane de le caractre : (deux points).
Il est possible de dfinir cette constante dans votre fichier config/mes_options.php (voir larticle qui lui est consacr) exemple :
// donner les droits de webmestre aux auteurs 1, 5 et 18 define('_ID_WEBMESTRES', '1:5:18');
Attention : les droits de webmestre ne seront donns aux auteurs did 1, 5 et 18 que si et seulement si ces auteurs sont administrateurs non restreints. Par dfaut, celui qui installe SPIP est webmestre. noter que depuis la version 2.1 de SPIP, cette constante est dprcie : on utilisera plutt linterface prive qui offre dsormais cette possibilit.
_IMG_MAX_HEIGHT
18 mars 2010
Cette constante dfinit la hauteur maximale en pixels en-dessous de laquelle SPIP acceptera denregistrer une image [1]. Il est possible de dfinir cette constante dans votre fichier config/mes_options.php (voir larticle qui lui est consacr) [2] - Valeur par dfaut : 0 exemple :
// les images de plus de 500 pixels de haut ne seront pas enregistres define('_IMG_MAX_HEIGHT', 500);
Lorsque cette constante est dfinie 0 (zro), SPIP neffectue pas de vrification lors de lupload dune image.
179/186
Voir aussi : _IMG_MAX_SIZE et _IMG_MAX_WIDTH. Notes [1] de par le fonctionnement des formulaires dupload, le fichier image sera quand mme envoy sur le serveur. Ce nest quune fois upload que SPIP vrifiera la conformit de ce fichier avec la constante. [2] Attention, cela gnrera un message PHP davertissement de type NOTICE : vrifiez que le serveur naffiche pas ce type derreur.
_IMG_MAX_SIZE
Mars 2010
Cette constante dfinit le poids maximum en kilo-octets en-dessous duquel SPIP acceptera denregistrer une image [1]. Il est possible de dfinir cette constante dans votre fichier config/mes_options.php (voir larticle qui lui est consacr) [2] - Valeur par dfaut : 0 exemple :
// les images de plus de 350 Ko ne seront pas enregistres define('_IMG_MAX_SIZE', 350);
Lorsque cette constante est dfinie 0 (zro), SPIP neffectue pas de vrification lors de lupload dun document. ne pas confondre avec _IMG_MAX_WIDTH et _IMG_MAX_HEIGHT. Notes [1] de par le fonctionnement des formulaires dupload, le fichier image sera quand mme envoy sur le serveur. Ce nest quune fois upload que SPIP vrifiera la conformit de ce fichier avec la constante. [2] Attention, cela gnrera un message PHP davertissement de type NOTICE : vrifiez que le serveur naffiche pas ce type derreur.
180/186
_IMG_MAX_WIDTH
18 mars 2010
Cette constante dfinit la largeur maximale en pixels en-dessous de laquelle SPIP acceptera denregistrer une image [1]. Il est possible de dfinir cette constante dans votre fichier config/mes_options.php (voir larticle qui lui est consacr) [2] - Valeur par dfaut : 0 exemple :
// les images de plus de 500 pixels de large ne seront pas enregistres define('_IMG_MAX_WIDTH', 500);
Lorsque cette constante est dfinie 0 (zro), SPIP neffectue pas de vrification lors de lupload dune image. Voir aussi : _IMG_MAX_SIZE et _IMG_MAX_HEIGHT. Notes [1] de par le fonctionnement des formulaires dupload, le fichier image sera quand mme envoy sur le serveur. Ce nest quune fois upload que SPIP vrifiera la conformit de ce fichier avec la constante. [2] Attention, cela gnrera un message PHP davertissement de type NOTICE : vrifiez que le serveur naffiche pas ce type derreur.
_MAX_ART_AFFICHES
Avril 2010 _MAX_ART_AFFICHES
permet de dfinir le nombre darticles lists dans la boite Dans la mme rubrique de la page /?exec=articles&id_article=xxx dans lespace priv.
Il est possible de dfinir cette constante (par dfaut SPIP affiche 10 articles) dans votre fichier config/mes_options.php (voir larticle qui lui est consacr) Exemple :
// afficher une liste de 25 articles dans la boite 'Dans la mme rubrique' define('_MAX_ART_AFFICHES', '25');
181/186
_NOM_PERMANENTS_ACCESSIBLES
juin 2010
Le nom du rpertoire des fichiers permanents accessibles par HTTP. Ce rpertoire contient les images et documents qui sont tlchargs (ou plutt tlverss) via linterface prive de SPIP. Il contient galement les logos des diffrents lments de SPIP.
define('_NOM_PERMANENTS_ACCESSIBLES', "IMG/");
_NOM_PERMANENTS_INACCESSIBLES
juin 2010
Le nom du rpertoire des fichiers permanents inaccessibles par HTTP. Il contient le fichier de configuration gnr par SPIP lors de linstallation, mais galement la base sqlite et le fichier chmod.php (qui permet de mieux grer le mode daccs en criture dtermin par le serveur)
define('_NOM_PERMANENTS_INACCESSIBLES', "config/");
_NOM_TEMPORAIRES_ACCESSIBLES
juin 2010
Le nom du rpertoire des fichiers temporaires accessibles par HTTP. Ce rpertoire contient principalement le cache des images, feuilles de style et fichiers Javascript qui sont manipuls par SPIP.
define('_NOM_TEMPORAIRES_ACCESSIBLES', "local/");
182/186
_NOM_TEMPORAIRES_INACCESSIBLES
juin 2010
le nom du rpertoire des fichiers temporaires inaccessibles par HTTP. Il contient principalement les fichiers de log, les exports de la base, et la plupart des caches.
define('_NOM_TEMPORAIRES_INACCESSIBLES', "tmp/");
Application : si lon souhaite placer les fichiers concerns ailleurs que dans tmp/, il suffit de changer la valeur de cette constante pour le nom du nouveau rpertoire qui aura t choisi (ex. "tmp123456/") Cette constante doit tre modifie directement dans ecrire/inc_version.php
_TRI_ARTICLES_RUBRIQUE
Avril 2010
permet de dfinir lordre de tri pour laffichage des articles lists dans la boite Dans la mme rubrique de la page /?exec=articles&id_article=xxx ainsi que lordre de tri pour laffichage des articles lists dans la boite Tous les articles publis dans cette rubrique de la page /?exec=naviguer&id_rubrique=xx dans lespace priv.
_TRI_ARTICLES_RUBRIQUE
Par dfaut, SPIP ordonne les articles par date de rdaction (champ sql date) de la plus rcente la plus ancienne. Il est possible de dfinir cette constante dans votre fichier config/mes_options.php (voir larticle qui lui est consacr) Exemple :
// ordonner les listes d'articles dans l'espace priv de celui // de date de modification la plus rcente celui de date de // modification la plus ancienne define('_TRI_ARTICLES_RUBRIQUE', 'date_modif DESC');
$controler_dates_rss
Mai 2010 $controler_dates_rss
dfinit si SPIP doit vrifier les dates des lments des flux rss des
sites syndiqus.
Lorsque SPIP intgre les articles issus dun flux RSS dans sa base de donnes, il vrifie la date des articles : Manuel de rfrence des boucles et balises 183/186
- si larticle a plus dun an - ou sil est dat de plus de deux jours dans le futur Si lune de ces conditions est remplie, SPIP considre alors quil y a une erreur dans la date de larticle, et remplace celle-ci par la date courante. Il est possible de dsactiver ce comportement en dfinissant la variable $controler_dates_rss comme false dans le fichier config/mes_options.php (voir larticle qui lui est consacr) Exemple :
// ne pas modifier la date des articles syndiqus $controler_dates_rss = false;
$filtrer_javascript
Mars 2010
la variable $filtrer_javascript permet de choisir le mode de scurisation que SPIP appliquera sur les scripts javascript embarqus dans les rdactionnels. Pour les scripts javascript contenus dans les articles, rubriques, champ bio des auteurs,... trois modes de traitement sont possibles :
Le mode parano nexcute le code ni dans lespace priv ni lors de laffichage public (le code est simplement affich de manire inoffensive). Le mode par dfaut affiche le code en rouge (sans lexcuter) dans lespace priv mais lexcute (sans lafficher) lors de laffichage public. Le mode ok excute le code partout (affichage public comme affichage dans lespace priv). Il est possible de changer la valeur de cette variable dans le fichier mes_options.php ( placer dans le rpertoire config/) :
// scuriser les scripts javascript en mode parano $filtrer_javascript = -1;
184/186
$nombre_de_logs
25 juin 2010
Cette variable PHP dfinit le nombre maximal darchives de chaque fichier de logs de SPIP (mysql.log, spip.log, prive_spip.log, etc..) qui sont placs dans _NOM_TEMPORAIRES_INACCESSIBLES. En effet, une fois quun fichier de log a atteint sa taille maximale, il est sauvegard sous un autre nom puis un fichier vide est cr. $nombre_de_logs vaut 4 par dfaut (ce qui correspond en fait un fichier en criture et 3 fichiers archivs). Application : si lon souhaite ne plus avoir de fichier de log, il suffit de rajouter dans mes_options.php la ligne suivante :
$nombre_de_logs = 0;
$spip_header_silencieux
25 juin 2010
Cette variable permet de prciser si lon souhaite que lentte HTTP [1] contienne les informations relatives la version de SPIP et aux plugins utiliss, ce que fait SPIP par dfaut. Voici un exemple de capture fournie par Firebug :
Pour limiter au maximum les informations contenues dans lentte HTTP, il suffit de rajouter dans config/mes_options.php la ligne :
$spip_header_silencieux = 1;
185/186
Notes [1] Lentte HTTP permet danalyser ce que renvoie le site web (plus exactement le serveur web) lorsque vous demandez une URL depuis votre navigateur. Vous pouvez tester ce que retourne le serveur sur ce site : http://www.outils-referencement.com
$taille_des_logs
25 juin 2010
Cette variable PHP dfinit la taille maximale (en Ko) des fichiers de logs de SPIP (mysql.log, spip.log, prive_spip.log, etc..) qui sont placs dans _NOM_TEMPORAIRES_INACCESSIBLES. Elle est personnalisable dans mes_options.php, et vaut 100 par dfaut. Application : si lon souhaite ne plus avoir de fichier de log, il suffit de rajouter dans mes_options.php la ligne suivante :
$taille_des_logs = 0;
186/186