Carnet Wiki

Astuces longues pour SPIP

Version 114 — Avril 2021 — goetsu

Voir ausssssi : les Astuces courtes.

1- Partager des données entre plusieurs squelettes inclus (Zpip)

références
Références

balises #SET et #GET balise #FILTRE

Question :
Dans ZPIP, la structure de base est définie à coup d’inclusion de grands blocs logiques du style :

... <div id="contenu">
      <INCLURE{fond=contenu/#ENV{type}, env}>
    </div>
    <div id="navigation">
      <INCLURE{fond=navigation/#ENV{type}, env}>
      <INCLURE{fond=extra/#ENV{type}, env}>
    </div>....

Supposons par exemple que nous soyons dans un contexte « rubrique » http///monsite.fr/spip.php?rubriqueXX et que le squelette contenu/rubrique.html se comporte de manière à afficher l’article n°yy
Comment peut-on transmettre cet id_article dans l’inclusion extra ou dans l’inclusion navigation pour, par exemple, lister les autres articles de la rubrique ? Il faut bien que le squelette appelé connaisse l’id de l’article à exclure que seul contenu/rubrique.html connait !
Pour que extra/rubrique.html ou navigation/rubrique.html puisse tenir compte de la situation, il faut disposer d’un moyen pour leur transmettre cette valeur. Or, seul le squelette appelant peut transmettre une variable...

Réponse :
L’astuce (alambiquée) pour remonter des variables d’un squelette appelé, est d’affecter le résultat sérialisé de ce squelette à une variable tableau dans le squelette appelant :
Dans structure.html :

[(#SET{myvars, [(#INCLURE{fond=vars/#ENV{type}, env})]})]

Dans vars/rubrique.html :

#CACHE{3600}
[(#SET{vars, #ARRAY{
    objet, rubrique,
    id_objet, #ENV{id_rubrique},
    titreRubrique, Rubriques,
    titrePage, #ENV{id_rubrique}?
}})]


<BOUCLE_rub(RUBRIQUES) {id_rubrique}>
    [(#SET{vars, #GET{vars}|array_merge{#ARRAY{titreRubrique, #TITRE, idRubrique, #ID_RUBRIQUE}}})]
</BOUCLE_rub>


[(#GET{vars}|serialize)]
#FILTRE{trim}

Puis dans structure.html :
<INCLURE{fond=extra/#ENV{type}, env}>


2- ZPIP : faire un inclure de squelette suivant une condition

références
Références

filtre |non

dans le body de ZPIP, charger ou non un INCLURE qui contient #ENV{type}

[(#ID_RUBRIQUE|=={10}|?{
  ''
,
  <INCLURE{fond=extra/#ENV{type}, env}>
})]

ne fonctionne pas à cause de accolades de #ENV, donc contourner avec

[(#ID_RUBRIQUE|=={10}|non) <INCLURE{fond=extra/#ENV{type}, env}> ]

3- Une boucle qui ne doit être exécutée que dans un certain contexte

références
Références

balise #ENV balises #SET et #GET critère {si…}

Tout le monde le sait (beaucoup le déplorent) :

[(#ENV{var}|=={val}|oui) <BOUCLE_test(TABLES) {critere}>...</BOUCLE_test> ]

ne fonctionne pas.

En SPIP3, le critère {si ...} permet de définir la condition d’exécution depuis la boucle elle-même.
En SPIP2, il faut utiliser le plugin « bonux » et sa boucle « CONDITION ».

Il existe néanmoins un autre moyen pour arriver à nos fins...

#SET{test, #ENV{truc}|=={coucou}|?{0, 999999}}
<BOUCLE_de_test(TABLES) {id_table > #GET{test}}>
coucou !
</BOUCLE_de_test>

Explications :

  • en premier lieu nous définissons notre test (présence de la variable « truc » dans l’environnement) et nous affectons à une variable « test » la valeur« 0 » ou « 999999 ».
    à ce stade, #GET{test} vaut donc soit « zéro », soit « neuf cent quatre-vingt-dix-neuf mille neuf cent quatre-vingt-dix-neuf ».
  • nous lançons alors la boucle dans laquelle nous demandons que l’« id_table » soit supérieur à notre valeur de test définie juste au-dessus.
    et le tour est joué...

4- Afficher la date du jour

références
Références

balise #DATE balise #ENV balise #VAL

Dans un squelette, afficher la date du jour (la date courante) n’est pas toujours aisé.
deux variables peuvent entrer en jeu :

  • la date retournée par la boucle dans laquelle on veut afficher notre date du jour
  • une variable nommée date passée en url ou par le biais d’un formulaire

Pour chaque cas, néanmoins, il existe une possibilité d’afficher la date du jour et ce sans que cette date soit tributaire du cache du squelette (ce sera toujours la date courante qui sera affichée)

dans une boucle dont la table possède
un champ date ou date_redac
hors boucle
pas de date ni de date_redac en url
ni passées par formulaire
#ENV{date_redac}
ou
#ENV{date}
#DATE_REDAC
ou
#DATE
variable date passée en url ou par formulaire #ENV{date_redac} #DATE_REDAC
variable date_redac passée en url ou par formulaire #ENV{date} #DATE
variables date et date_redac passées
en url ou par formulaire
définir en début de squelette la date courante avec par exemple :
#SET{cur_date, #VAL{Y-m-d h:i:s}|date}
puis l’utiliser dans le squelette avec :
#GET{cur_date}


5- Jouons avec les dates

références
Références

balise #VAL balise #DATE filtre |affdate

<blockquote class="spip">

voir aussi saisie des dates de publication et de rédaction antérieure (spip 2.0.x et 2.1.x)

</blockquote>

-  La date du prochain jeudi qui suit #DATE :

[(#VAL{Y-m-d}|date{#VAL{next Thursday}|strtotime{#DATE|affdate{U}}})]

-  Le nom du jour de l’avant-veille de #DATE :

[(#VAL{Y-m-d}|date{#VAL{-2 days}|strtotime{#DATE|affdate{U}}}|nom_jour)]

-  La date de lundi prochain :

[(#SET{lundi_prochain, #VAL{Y-m-d 00:00:00}|date{#VAL{next Monday}|strtotime{#DATE|affdate{U}}}})]
#GET{lundi_prochain}

-  La date du dimanche d’après lundi prochain :

[(#SET{dimanche_apres, #VAL{Y-m-d 23:59:59}|date{#VAL{+6days}|strtotime{#GET{lundi_prochain}|affdate{U}}}})]
#GET{dimanche_apres}

-  Afficher le label nouveau ! pour un article publié ou modifié il y a moins de 10 jours :

#SET{periode, -10days}
#TITRE[ (#DATE_MODIF|>{#VAL{Y-m-d H:i:s}|date{#GET{periode}|strtotime}}|oui) nouveau !]

et _fil_ (sur irc) propose encore plus simple :

#TITRE[ (#DATE|strtotime|>{#VAL{-10days}|strtotime}|?{ nouveau !, ''})]

-  Afficher le nombre de visites sur le site hier :

<BOUCLE_visites_veille(spip_visites){date=#VAL{Y-m-d}|date{#VAL{-1 days}|strtotime}}>
#VISITES
</BOUCLE_visites_veille>

6- Exporter au format CSV

références
Références

balise #VAL filtre |textebrut balise #COMPTEUR_BOUCLE

Avec les fonctions du noyau spip

Le noyau Spip fournit 2 jeux de fonctions pour importer et exporter les fichiers csv.
-  importer_csv.php
-  exporter_csv.php

Exemple d’utilisation des fonctions du noyau, par b_b

Dans mon squelette < code>export_csv export_csv .html, pour exporter un sommaire des articles de la rubrique 2 :html :

#HTTP_HEADER{Content-Type: text/csv; charset=#CHARSET}
[(#SESSION{statut}|=={0minirezo}|sinon_interdire_acces)]
[(#SET{items,#ARRAY})]
&lt;BOUCLE_items(ARTICLES){id_rubrique=2}{par  &lt;BOUCLE_items(ARTICLES){id_rubrique=#CONFIG{avp/rub_fiches,1385}}{par  titre}>
&#91;(#SET{items,#GET{items}|push{#LISTE{#TITRE*,
 #PRENOM *,
 #ACTIVITE_NOM *,
 #ACTIVITE_DESC *,
#DESCRIPTIF #COMMUNE *,
#PS #TEL ,
 #EMAIL 
}}})]
 </BOUCLE_items>
&#91;(#VAL{export}|inc_exporter_csv_dist{#GET{items},';',#LISTE{titre,descriptif,ps &#91;(#VAL{export}|inc_exporter_csv_dist{#GET{items},';',#LISTE{nom,prenom,activite_nom,activite_desc,commune,tel,email }})]
</B_items>

et dans le fichier de fonction de ce squelette , c’est à dire < code>export_csv_fonctions exprt_csv_fonctions .php</code > :
<code php
<
code class=’php’>

<?php


if (!defined('_ECRIRE_INC_VERSION')) {
    return;
}


include_spip('inc/exporter_csv');
</code>


Ainsi on génère le CSV à partir d'un array.


{{Avec plugin}}


[Le plugin 'spout' utilisant la librairie spout ->5223] est fait pour ça. Vivement conseillé pour des exports un tant soit peu complexes !


{{Sans plugin}}


{Triton} nous confie un petit exemple qui marche pour MS Excel et openOffice (il y a des particularités d'encodage de caractères) :


<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+PGNvZGU+I0NBQ0hFezB9ICNIVFRQX0hFQURFUntDb250ZW50LVR5cGU6IHRleHQvY3N2OyBjaGFyc2V0PXdpbmRvd3MtMTI1Mi9XaW5sYXRpbjF9ICNIVFRQX0hFQURFUntDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1pbnNjcmlwdGlvbnMuY3N2fQ0KJnF1b3Q7ZGF0ZSZxdW90OzsgJnF1b3Q7bm9tX3BhcnRpY2lwYW50JnF1b3Q7OyZxdW90O3ByZW5vbSZxdW90OzsmcXVvdDtwYWllbWVudCBlZmZlY3R1ZSZxdW90OzsgJnF1b3Q7dGFyaWZfdmFsaWRlJnF1b3Q7OyAmcXVvdDtwcm9tbyZxdW90OzsmcXVvdDt0ZWxlcGhvbmUmcXVvdDs7ICZxdW90O2VtYWlsJnF1b3Q7OyZxdW90O3NvY2lldGUmcXVvdDs7ICZxdW90O25icl9wYXJ0JnF1b3Q7OyZxdW90O2NvbmpvaW50JnF1b3Q7OyAmcXVvdDttb2JpbGVfZG9tJnF1b3Q7OyZxdW90O3R5cGVfcGFpZW1lbnQmcXVvdDs7ICZxdW90O3NvdXNjcmlwdGV1ciZxdW90Ow0KJmx0O0JPVUNMRV9sZXNfaW5zY3JpcHRpb25zX291dmVydGVzKEVWRU5FTUVOVFNfTEVTSU5TQ1JJUFRJT05TKSB7aWRfZXZlbmVtZW50fSB7bmJyX3BhcnQgJmd0OyAwfSZndDsmcXVvdDtbKCNEQVRFfGFmZmRhdGV7J2QtbS1ZJ30pXSZxdW90OzsmcXVvdDtbKCNOT01fUEFSVElDSVBBTlR8dXRmOF9kZWNvZGUpXSZxdW90OzsmcXVvdDtbKCNQUkVOT018dXRmOF9kZWNvZGUpXSZxdW90OzsmcXVvdDtbKCNWRVJJRklFUl9QQUlFTUVOVF9JTlNDUklQVElPTnsjSURfSU5TQ1JJUFRJT059fHV0ZjhfZGVjb2RlKV0mcXVvdDs7JnF1b3Q7WygjVEFSSUZfVkFMSURFfHV0ZjhfZGVjb2RlKV0mcXVvdDs7JnF1b3Q7WygjUFJPTU98dXRmOF9kZWNvZGUpXSZxdW90OzsmcXVvdDtbKCNURUxFUEhPTkV8dXRmOF9kZWNvZGUpXSZxdW90OzsmcXVvdDtbKCNFTUFJTHx1dGY4X2RlY29kZSldJnF1b3Q7OyZxdW90O1soI1NPQ0lFVEV8dXRmOF9kZWNvZGUpXSZxdW90OzsmcXVvdDtbKCNOQlJfUEFSVHx1dGY4X2RlY29kZSldJnF1b3Q7OyZxdW90O1soI0NPTkpPSU5UfHV0ZjhfZGVjb2RlKV0mcXVvdDs7JnF1b3Q7WygjTU9CSUxFX0RPTXx1dGY4X2RlY29kZSldJnF1b3Q7OyZxdW90O1soI1RZUEVfUEFJRU1FTlR8dXRmOF9kZWNvZGUpXSZxdW90OzsmcXVvdDtbKCNTT1VTQ1JJUFRFVVJ8dXRmOF9kZWNvZGUpXSZxdW90Ow0KJmx0Oy9CT1VDTEVfbGVzX2luc2NyaXB0aW9uc19vdXZlcnRlcyZndDs8L2NvZGU+PC9wcmU+PC9kaXY+"></div>


-* le http_header indique qu'il s'agit d'un document csv encodé pour MS excel
-* la premiere ligne c'est les têtières (en tete de colonne) du fichier csv
-* La boucle écrit ensuite le contenu ligne par ligne


Il faut, souvent, coller toutes les lignes comme ci-dessus, sinon, on peut, ou pas, se retrouver avec des lignes vides dans le csv....


Si tu colles ça dans un squelette (nommé squelette_cvs), il suffit ensuite d'appeler la page spip.php?page=squelette_cvs et le navigateur te proposera de sauvegarder le fichier (ici inscriptions.csv - voir le filename au dessus) ou de l'ouvrir avec le logiciel de ton choix....


Après, faut voir à quoi doit servir ton cvs, à être lu directement par une appli type MS/ Open Office (cet exemple) ou à autre chose, import dans une base sql par exemple, auquel cas, il faudra peut-être modifier l'encodage de caractères...


Par ailleurs, {paulbe} indique qu'il faut d'abord passer les champs par le filtre textebrut avant de les passer à la moulinette de utf8_decode


on peut aussi «jolifier» et simplifier le code (surtout dans la boucle) :
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+PGNvZGU+I0NBQ0hFezB9DQojSFRUUF9IRUFERVJ7Q29udGVudC1UeXBlOiB0ZXh0L2NzdjsgY2hhcnNldD13aW5kb3dzLTEyNTIvV2lubGF0aW4xfQ0KI0hUVFBfSEVBREVSe0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPWluc2NyaXB0aW9ucy5jc3Z9CgoKJnF1b3Q7b3JkcmUmcXVvdDs7ICZxdW90O2RhdGUmcXVvdDs7ICZxdW90O25vbV9wYXJ0aWNpcGFudCZxdW90OzsgJnF1b3Q7cHJlbm9tJnF1b3Q7OyAmcXVvdDtwYWllbWVudCBlZmZlY3R1ZSZxdW90OzsgJnF1b3Q7dGFyaWZfdmFsaWRlJnF1b3Q7OyAmcXVvdDtwcm9tbyZxdW90OzsgJnF1b3Q7dGVsZXBob25lJnF1b3Q7OyAmcXVvdDtlbWFpbCZxdW90OzsgJnF1b3Q7c29jaWV0ZSZxdW90OzsgJnF1b3Q7bmJyX3BhcnQmcXVvdDs7ICZxdW90O2NvbmpvaW50JnF1b3Q7OyAmcXVvdDttb2JpbGVfZG9tJnF1b3Q7OyAmcXVvdDt0eXBlX3BhaWVtZW50JnF1b3Q7OyAmcXVvdDtzb3VzY3JpcHRldXImcXVvdDsKCgombHQ7Qk9VQ0xFX2luc2NyaXB0aW9uc19vdXZlcnRlcyhFVkVORU1FTlRTX0xFU0lOU0NSSVBUSU9OUykge2lkX2V2ZW5lbWVudH0ge25icl9wYXJ0ICZndDsgMH0mZ3Q7I1ZBTHsjQ09NUFRFVVJfQk9VQ0xFOyZxdW90O1soI0RBVEV8YWZmZGF0ZXsnZC1tLVknfSldJnF1b3Q7OyAmcXVvdDsjTk9NX1BBUlRJQ0lQQU5UJnF1b3Q7OyAmcXVvdDsjUFJFTk9NJnF1b3Q7OyAmcXVvdDsjVkVSSUZJRVJfUEFJRU1FTlRfSU5TQ1JJUFRJT057I0lEX0lOU0NSSVBUSU9OfSZxdW90OzsgJnF1b3Q7I1RBUklGX1ZBTElERSZxdW90OzsgJnF1b3Q7I1BST01PJnF1b3Q7OyAmcXVvdDsjVEVMRVBIT05FJnF1b3Q7OyAmcXVvdDsjRU1BSUwmcXVvdDs7ICZxdW90OyNTT0NJRVRFJnF1b3Q7OyAmcXVvdDsjTkJSX1BBUlQmcXVvdDs7ICZxdW90OyNDT05KT0lOVCZxdW90OzsgJnF1b3Q7I01PQklMRV9ET00mcXVvdDs7ICZxdW90OyNUWVBFX1BBSUVNRU5UJnF1b3Q7OyAmcXVvdDsjU09VU0NSSVBURVVSJnF1b3Q7fXx0ZXh0ZWJydXR8dXRmOF9kZWNvZGUpXQ0KJmx0Oy9CT1VDTEVfaW5zY3JpcHRpb25zX291dmVydGVzJmd0OzwvY29kZT48L3ByZT48L2Rpdj4="></div>


l'astuce consiste à ajouter <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0NPTVBURVVSX0JPVUNMRTs8L2NvZGU+"></span> comme premier champ de <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I1ZBTDwvY29kZT4="></span> (donc aussi <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+JnF1b3Q7b3JkcmUmcXVvdDs7PC9jb2RlPg=="></span> en première ligne de la feuille)


{{Technique de BoOz}}


Pour mes exports excel avec des champs utf-8 et des accents j'utilise un squelette


<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ZXhwb3J0Lnhscy5odG1sPC9jb2RlPg=="></span>


<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+PGNvZGU+I0hUVFBfSEVBREVSe0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsOyBjaGFyc2V0PVVURi0xNkxFfQ0KI0hUVFBfSEVBREVSe0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPW1vbl9leHBvcnQueGxzfQoKCmljaSBkdSBjb2RlIGF2ZWMgZGVzIGxpZ25lcyBldCBkZXMgY2hhbXBzIHPDqXBhcsOpcyBwYXIgZGVzIHRhYnVsYXRpb25zPC9jb2RlPjwvcHJlPjwvZGl2Pg=="></div>


et aussi dans un fichier <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ZXhwb3J0Lnhsc19mb25jdGlvbnMucGhwPC9jb2RlPg=="></span> spécial pour le squelette une fonction de conversion en utf16LE utilisée par Excel (merci Fil)


<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InBocCBzYW5zX3RlbGVjaGFyZ2VtZW50Ij48Y29kZT4mbHQ7P3BocA0KaW5jbHVkZV9zcGlwKCdpbmMvY2hhcnNldHMnKTsNCmluaXRfbWJfc3RyaW5nKCk7DQpvYl9zdGFydCgnY29udmVydF91dGYxNicpOw0KZnVuY3Rpb24gY29udmVydF91dGYxNigkdHh0KSB7DQogICByZXR1cm4gJnF1b3Q7XHhGRlx4RkUmcXVvdDsgLiBtYl9jb252ZXJ0X2VuY29kaW5nKHRyaW0oJHR4dCksICdVVEYtMTZMRScsICdVVEYtOCcpOw0KfQ0KPyZndDs8L2NvZGU+PC9wcmU+PC9kaXY+"></div>


{{Technique de RealET}}


C'est un exemple qui va prendre des valeurs dans des réponses du plugin formidable (avec dédoublonage sur l'email).


L'important, c'est :
-* l'envoi explicite du BOM UTF-8 : <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+I0NIUnsyMzl9I0NIUnsxODd9I0NIUnsxOTF9PC9jb2RlPg=="></span>
-* Et l'envoi du charset UTF-8


<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAiPjxjb2RlPiNDQUNIRXswfSNDSFJ7MjM5fSNDSFJ7MTg3fSNDSFJ7MTkxfQ0KI0hUVFBfSEVBREVSe0NvbnRlbnQtRW5jb2Rpbmc6ICNDSEFSU0VUfQ0KI0hUVFBfSEVBREVSe0NvbnRlbnQtVHlwZTogdGV4dC9jc3Y7IGNoYXJzZXQ9I0NIQVJTRVR9DQojSFRUUF9IRUFERVJ7Q29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9ZXhwb3J0Q1NWLmNzdn0NCiZsdDtCX3JlcG9uc2UmZ3Q7JnF1b3Q7UXVpJnF1b3Q7OyZxdW90O1F1YW5kJnF1b3Q7OyZxdW90O0/DuSZxdW90OyZsdDtCT1VDTEVfcmVwb25zZShGT1JNVUxBSVJFU19SRVBPTlNFUyl7aWRfZm9ybXVsYWlyZT0zfXshcGFyIGRhdGV9Jmd0OyZsdDtCX3JlcG9uc2VfY2hhbXAxJmd0Ow0KJmx0O0JPVUNMRV9yZXBvbnNlX2NoYW1wMShGT1JNVUxBSVJFU19SRVBPTlNFU19DSEFNUFMpe2lkX2Zvcm11bGFpcmVzX3JlcG9uc2V9e25vbT1pbnB1dF8yfSZndDtbJnF1b3Q7KCNWQUxFVVJ8dW5pcXVlKV0mbHQ7L0JPVUNMRV9yZXBvbnNlX2NoYW1wMSZndDsgJmx0O0JPVUNMRV9yZXBvbnNlX2NoYW1wMihGT1JNVUxBSVJFU19SRVBPTlNFU19DSEFNUFMpe2lkX2Zvcm11bGFpcmVzX3JlcG9uc2V9e25vbT1pbnB1dF8xfSZndDtbJmx0OygjVkFMRVVSfHVuaXF1ZSkmZ3Q7JnF1b3Q7O10mbHQ7L0JPVUNMRV9yZXBvbnNlX2NoYW1wMiZndDsmbHQ7Qk9VQ0xFX3JlcG9uc2VfY2hhbXAzKEZPUk1VTEFJUkVTX1JFUE9OU0VTX0NIQU1QUyl7aWRfZm9ybXVsYWlyZXNfcmVwb25zZX17bm9tPXJhZGlvXzF9Jmd0O1smcXVvdDsoI1ZBTEVVUikmcXVvdDs7I1NFVHtvdSzDiXZyeX1dJmx0Oy9CT1VDTEVfcmVwb25zZV9jaGFtcDMmZ3Q7Jmx0O0JPVUNMRV9yZXBvbnNlX2NoYW1wNChGT1JNVUxBSVJFU19SRVBPTlNFU19DSEFNUFMpe2lkX2Zvcm11bGFpcmVzX3JlcG9uc2V9e25vbT1yYWRpb18yfSZndDtbJnF1b3Q7KCNWQUxFVVIpJnF1b3Q7OyNTRVR7b3UsS291cm91fV0mbHQ7L0JPVUNMRV9yZXBvbnNlX2NoYW1wNCZndDsmcXVvdDsjR0VUe291fSZxdW90OyZsdDsvQl9yZXBvbnNlX2NoYW1wMSZndDsmbHQ7L0JPVUNMRV9yZXBvbnNlJmd0OyZsdDsvQl9yZXBvbnNlJmd0OzwvY29kZT48L3ByZT48L2Rpdj4="></div>


----[a7<-]


{{{7- Extraire les adresses email contenues dans un(des) texte(s) <small style="color:grey;">[↖->#aa]</small>}}}
<img12005|alt=références>  [<small style="color:grey;vertical-align:top;">fichier mes_fonctions.php</small>->http://programmer.spip.net/Declarer-des-fonctionsl]


<small>dans {mes_fonctions.php} :</small>
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9J3BocCBzYW5zX3RlbGVjaGFyZ2VtZW50Jz48Y29kZT4vKioNCiAqIExlIGZpbHRyZSBleHRyYWlyZV9lbWFpbCBwZXJtZXQgZGUgcsOpY3VwZXJlciB0b3V0ZXMgbGVzIGFkcmVzc2VzIGVtYWlsDQogKiBwcsOpc2VudGVzIGRhbnMgbGUgdGV4dGUgcmV0b3VybsOpIHBhciBsYSBiYWxpc2Ugc3VyIGxhcXVlbGxlIGlsIHMnYXBwbGlxdWUuDQogKiANCiAqIEBwYXJhbSBzdHJpbmcgJHRleHRlDQogKiAgICAgbCdhZmZpY2hhZ2UgcmV0b3VybsOpIHBhciBsYSBiYWxpc2UNCiAqIAkJDQogKiBAcmV0dXJuIGFycmF5DQogKiAgICAgdW4gdGFibGVhdSBkw6lkb3VibG9ubsOpIGRlcyBhZHJlc3NlcyBlbWFpbA0KKiovDQpmdW5jdGlvbiBleHRyYWlyZV9lbWFpbCgkdGV4dGUpIHsNCiAgICAvLyAgL3RvdG9AdHJ1Yy5uZXQgw6l0YW50IHVuZSBhZHJlc3NlIHZhbGlkZSBuZSBwYXMgY29uZm9uZHJlDQogICAgLy8gIGF2ZWMgdG90b0B0cnVjLm5ldCBkYW5zIGhyZWY9JnF1b3Q7bWFpbHRvOi8vdG90b0B0cnVjLm5ldCZxdW90Ow0KICAgICR0ZXh0ZSA9IHByZWdfcmVwbGFjZSgnLG1haWx0bzovLywnLCAnJywgJHRleHRlKTsKCgovLyAgY29udHLDtGxlIDogdm9pciBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNjk2I3BhZ2UtNg0KICAgIGlmIChwcmVnX21hdGNoX2FsbCgmcXVvdDs7W2EtejAtOSEjJCUmYW1wOycqKy89P15fJmx0O3NwYW4gY2xhc3M9JnF1b3Q7YmFzZTY0JnF1b3Q7IHRpdGxlPSZxdW90O1BHTnZaR1VnWTJ4aGMzTTlJbk53YVhCZlkyOWtaU0J6Y0dsd1gyTnZaR1ZmYVc1c2FXNWxJaUJrYVhJOUlteDBjaUkrZTN4OWZpMWRLeWcvT2x3dVcyRXRlakF0T1NFakpDVW1ZVzF3T3ljcUt5ODlQMTVmUEM5amIyUmxQZz09JnF1b3Q7Jmd0OyZsdDsvc3BhbiZndDt7fH1+LV0rKSpAKD86W2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP1wuKStbYS16MC05XSg/OlthLXowLTktXSpbYS16MC05XSk/O2ltcyZxdW90OywgJHRleHRlLCAkbWF0Y2hlcykpDQogICAgICAgIHJldHVybiBhcnJheV91bmlxdWUoJG1hdGNoZXNbMF0pOw0KICAgIHJldHVybiBhcnJheSgpOw0KfTwvY29kZT48L3ByZT48L2Rpdj4="></div>


exemple d'utilisation dans un squelette :
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9J3NwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCc+PGNvZGU+I1NFVHtyZXMsICNBUlJBWX0NCiZsdDtCT1VDTEVfYXJ0KEFSVElDTEVTKSB7dG91dH0mZ3Q7DQpbKCNTRVR7cmVzLCAjR0VUe3Jlc318YXJyYXlfbWVyZ2V7I1RFWFRFfGV4dHJhaXJlX2VtYWlsfX0pXQ0KJmx0Oy9CT1VDTEVfYXJ0Jmd0OwoKClsoI0dFVHtyZXN9fGZvcmVhY2gpXTwvY29kZT48L3ByZT48L2Rpdj4="></div>


----[a8<-]


{{{8- Une fonction pour joliment afficher les variables de #ENV, #GET ou #SESSION <small style="color:grey;">[↖->#aa]</small>}}}
<img12005|alt=références>  [<small style="color:grey;vertical-align:top;">fichier mes_options.php</small>->http://www.spip.net/fr_article4654.html]


Copiée sur la fonction du débugueur <tt>debusquer_contexte()</tt> (de <tt>ecrire/public/debusquer.php</tt>), cette fonction est à déposer dans le fichier <tt>mes_options.php</tt>


<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InBocCBzYW5zX3RlbGVjaGFyZ2VtZW50Ij48Y29kZT4vKioNCiAqIFVuZSBmb25jdGlvbiByw6ljdXJzaXZlIHBvdXIgam9saW1lbnQgYWZmaWNoZXIgI0VOViwgI0dFVCwgI1NFU1NJT04uLi4NCiAqICAgIGVuIHNxdWVsZXR0ZSA6IFsoI0VOVnxiZWxfZW52KV0sIFsoI0dFVHxiZWxfZW52KV0sIFsoI1NFU1NJT058YmVsX2VudildDQogKiAgICBvdSBlbmNvcmUgWygjQVJSQVl7MCwxLCBhLCNTRVNTSU9OLCAxLCNBUlJBWXt4LHl9fXxiZWxfZW52KV0NCiAqDQogKiBAcGFyYW0gc3RyaW5nfGFycmF5ICRlbnYNCiAqICAgIHNpIHVuZSBzdHJpbmcgZXN0IHBhc3PDqWUgZWxsZSBkb2l0IMOqdHJlIGxlIHNlcmlhbGl6ZSBkJ3VuIGFycmF5IA0KICoNCiAqIEByZXR1cm4gc3RyaW5nDQogKiAgICB1bmUgY2hhw65uZSBodG1sIGFmZmljaGFudCB1bmUgJmx0O3RhYmxlJmd0Ow0KKiovDQpmdW5jdGlvbiBiZWxfZW52KCRlbnYpIHsNCiAgICAkZW52ID0gc3RyX3JlcGxhY2UoYXJyYXkoJyZxdW90OycsICcmYW1wOyMwMzk7JyksIGFycmF5KCcmcXVvdDsnLCAnXCcnKSwgJGVudik7DQogICAgaWYgKGlzX2FycmF5KCRlbnZfdGFiID0gQHVuc2VyaWFsaXplKCRlbnYpKSkgew0KICAgICAgICAkZW52ID0gJGVudl90YWI7DQogICAgfQ0KICAgIGlmICghaXNfYXJyYXkoJGVudikpIHsNCiAgICAgICAgcmV0dXJuICcnOw0KICAgIH0NCiAgICAkc3R5bGUgPSAmcXVvdDsgc3R5bGU9J2JvcmRlcjoxcHggc29saWQgI2RkZDsnJnF1b3Q7Ow0KICAgICRyZXMgPSAmcXVvdDsmbHQ7dGFibGUgc3R5bGU9J2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTsnJmd0O1xuJnF1b3Q7Ow0KICAgIGZvcmVhY2ggKCRlbnYgYXMgJG5vbSA9Jmd0OyAkdmFsKSB7DQogICAgICAgIGlmIChpc19hcnJheSgkdmFsKSB8fCBpc19hcnJheShAdW5zZXJpYWxpemUoJHZhbCkpKSB7DQogICAgICAgICAgICAkdmFsID0gYmVsX2VudigkdmFsKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICR2YWwgPSBlbnRpdGVzX2h0bWwoJHZhbCk7DQogICAgICAgIH0NCiAgICAgICAgJHJlcyAuPSAmcXVvdDsmbHQ7dHImZ3Q7XG4mbHQ7dGQkc3R5bGUmZ3Q7Jmx0O3N0cm9uZyZndDsmcXVvdDsuIGVudGl0ZXNfaHRtbCgkbm9tKS4NCiAgICAgICAgICAgICAgICAgICAmcXVvdDsgOiAmbHQ7L3N0cm9uZyZndDsmbHQ7L3RkJmd0OyZsdDt0ZCRzdHlsZSZndDsmcXVvdDsgLiR2YWwuICZxdW90OyZsdDsvdGQmZ3Q7XG4mbHQ7L3RyJmd0O1xuJnF1b3Q7Ow0KICAgIH0NCiAgICAkcmVzIC49ICZxdW90OyZsdDsvdGFibGUmZ3Q7JnF1b3Q7Ow0KICAgIHJldHVybiAkcmVzOw0KfTwvY29kZT48L3ByZT48L2Rpdj4="></div>
ne reste plus qu'à l'appeler (que l'on soit loggé ou pas) dans un squelette avec :<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+WygjRU5WfGJlbF9lbnYpXTwvY29kZT4="></span>
ou encore :<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+WygjR0VUfGJlbF9lbnYpXTwvY29kZT4="></span>
ou encore :<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+WygjU0VTU0lPTnxiZWxfZW52KV08L2NvZGU+"></span>


Noter que cette fonction est incluse dans le plugin [«dev»->http://zone.spip.org/trac/spip-zone/browser/_core_/plugins/dev].


----[a9<-]


{{{9- Connaître le niveau de profondeur d'une rubrique <small style="color:grey;">[->#aa]</small>}}}
<img12005|alt=références>  [<small style="color:grey;vertical-align:top;">balise #PROFONDEUR</small>->http://www.spip.net/fr_article5628.html]  [<small style="color:grey;vertical-align:top;">balise #INFO_xx</small>->http://www.spip.net/fr_article5544.html]  [<small style="color:grey;vertical-align:top;">boucle (HIERARCHIE)</small>->http://www.spip.net/fr_article913.html]  [<small style="color:grey;vertical-align:top;">fichier mes_fonctions.php</small>->http://programmer.spip.net/Declarer-des-fonctionsl]


- Avec {{SPIP3}} c'est même pas drôle :
-* <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I1BST0ZPTkRFVVI8L2NvZGU+"></span> dans une boucle <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+KFJVQlJJUVVFUyk8L2NvZGU+"></span>
-* <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0lORk9feHtvYmpldCwgaWRfb2JqZXR9PC9jb2RlPg=="></span> en dehors d'une boucle


- Avec {{SPIP2.1}} deux solutions :
-* <div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+PGNvZGU+Jmx0O0JPVUNMRV9uaXZlYXUoSElFUkFSQ0hJRSkge2lkX3J1YnJpcXVlfSB7dG91dH0mZ3Q7DQombHQ7L0JPVUNMRV9uaXZlYXUmZ3Q7DQogICAgICAjU0VUe25pdmVhdSwjVE9UQUxfQk9VQ0xFfQ0KJmx0Oy8vQl9uaXZlYXUmZ3Q7PC9jb2RlPjwvcHJlPjwvZGl2Pg=="></div> et on récupère l'info avec un <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0dFVHtuaXZlYXV9PC9jb2RlPg=="></span>
-* une fonction à poser dans squelettes/mes_fonctions.php :
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayBsYW5ndWFnZS1waHAgc2Fuc190ZWxlY2hhcmdlbWVudCIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgZGF0YS1sYW5ndWFnZT0icGhwIHNhbnNfdGVsZWNoYXJnZW1lbnQiPjxjb2RlPmZ1bmN0aW9uIGZpbHRyZV9wcm9mb25kZXVyX2Rpc3QoJGlkX3J1YnJpcXVlKSB7DQogICAgJGlkX3J1YnJpcXVlID0gaW50dmFsKCRpZF9ydWJyaXF1ZSk7DQogICAgLy8gc2F1dmVyIGxlcyBjYWxjdWxzIGTDqWrDoCBmYWl0cw0KICAgIHN0YXRpYyAkcHJvZnMgPSBhcnJheSgpOw0KICAgIGlmIChpc3NldCgkcHJvZnNbJGlkX3J1YnJpcXVlXSkpIHsNCiAgICAgIHJldHVybiAkcHJvZnNbJGlkX3J1YnJpcXVlXTsNCiAgICB9DQogICAgLy8gcsOpY3Vww6lyZXIgbGUgcGFyZW50Lg0KICAgICRpZF9wYXJlbnQgPSBzcWxfZ2V0ZmV0c2VsKCdpZF9wYXJlbnQnLCAnc3BpcF9ydWJyaXF1ZXMnLCAnaWRfcnVicmlxdWU9Jy4kaWRfcnVicmlxdWUpOw0KICAgIC8vIHBhcyBkZSBwYXJlbnQgOiBpZF9ydWJyaXF1ZSBuJ2V4aXN0ZSBwYXMNCiAgICBpZiAoaXNfbnVsbCgkaWRfcGFyZW50KSkgew0KICAgICAgcmV0dXJuICcnOw0KICAgIH0NCiAgICAvLyBwYXJlbnQgesOpcm8gOiBvbiBlc3QgdG91dCBlbiBoYXV0IChyYWNpbmUpDQogICAgaWYgKCRpZF9wYXJlbnQgPT0gJycpIHsNCiAgICAgIHJldHVybiAkcHJvZnNbJGlkX3J1YnJpcXVlXSA9IDE7DQogICAgfQ0KICAgIC8vIHNpbm9uLCBvbiB0cm91dmUgbGEgcHJvZm9uZGV1ciBkdSBwYXJlbnQNCiAgICAkcGFyZW50ID0gZmlsdHJlX3Byb2ZvbmRldXJfZGlzdCgkaWRfcGFyZW50KTsNCiAgICAkcHJvZnNbJGlkX3J1YnJpcXVlXSA9ICgkcGFyZW50ICsgMSk7DQogICAgcmV0dXJuICRwcm9mc1skaWRfcnVicmlxdWVdOw0KfTwvY29kZT48L3ByZT48L2Rpdj4="></div> à appeler dans un squelette avec : <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+WygjSURfUlVCUklRVUV8cHJvZm9uZGV1cildPC9jb2RlPg=="></span>


----[a10<-]


{{{10- Les modèles et leur contexte en SPIP3 <small style="color:grey;">[↖->#aa]</small>}}}
<img12005|alt=références>  [<small style="color:grey;vertical-align:top;">les &#60;modele&#62;</small>->http://www.spip.net/fr_article3454.html]  [<small style="color:grey;vertical-align:top;">balise #ENV</small>->http://www.spip.net/fr_article4014.html]


En spip2 {{le contexte d'appel d'un modèle}} n'était pas connu lors de la compilation de ce modèle. Ainsi un modèle appelé depuis le corps du texte de l'article 18 ne pouvait savoir qu'il était appelé depuis cet article précis.


{{Cela a changé avec spip3}} ; désormais le modèle véhicule le contexte de son objet appelant. Cela veut dire que appelé depuis l'article 18, le modèle intègre la donnée id_article = 18 ; donnée que l'on peut donc utiliser {dans} le modèle avec :
-* soit <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0lEX0FSVElDTEU8L2NvZGU+"></span>,
-* soit <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0VOVntpZF9hcnRpY2xlfTwvY29kZT4="></span>,
-* soit encore <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0VOVnthcmdzL2lkX2FydGljbGV9PC9jb2RlPg=="></span>.


Mais plusieurs cas peuvent se présenter :
-* modèle appelé depuis un article sans argument explicite :
_ {{<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ICZsdDttb25fbW9kZWxlMSZndDsgPC9jb2RlPg=="></span>}}
-** <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0lEX0FSVElDTEU8L2NvZGU+"></span> vaudra la valeur id_article de l'article appelant (celui où se trouve l'appel du modèle)
-** <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0VOVntpZF9hcnRpY2xlfTwvY29kZT4="></span> vaudra la valeur id_article de l'article appelant (celui où se trouve l'appel du modèle)
-** <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0VOVnthcmdzL2lkX2FydGljbGV9PC9jb2RlPg=="></span> vaudra '' (vide)
-* modèle appelé depuis un article avec argument explicite vide :
_ {{<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ICZsdDttb25fbW9kZWxlMXxpZF9hcnRpY2xlJmd0OyA8L2NvZGU+"></span>}}
-** <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0lEX0FSVElDTEU8L2NvZGU+"></span> vaudra la valeur id_article de l'article appelant (celui où se trouve l'appel du modèle)
-** <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0VOVntpZF9hcnRpY2xlfTwvY29kZT4="></span> vaudra la valeur id_article de l'article appelant (celui où se trouve l'appel du modèle)
-** <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0VOVnthcmdzL2lkX2FydGljbGV9PC9jb2RlPg=="></span> vaudra '' (vide)
-* modèle appelé depuis un article avec argument explicite sans valeur :
_ {{<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ICZsdDttb25fbW9kZWxlMXxpZF9hcnRpY2xlPSZndDsgPC9jb2RlPg=="></span>}}
-** <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0lEX0FSVElDTEU8L2NvZGU+"></span> vaudra '' (vide)
-** <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0VOVntpZF9hcnRpY2xlfTwvY29kZT4="></span> vaudra '' (vide)
-** <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0VOVnthcmdzL2lkX2FydGljbGV9PC9jb2RlPg=="></span> vaudra '' (vide)
-* modèle appelé depuis un article avec argument explicite renseigné :
_ {{<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ICZsdDttb25fbW9kZWxlMXxpZF9hcnRpY2xlPTI1Jmd0OyA8L2NvZGU+"></span>}}
-** <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0lEX0FSVElDTEU8L2NvZGU+"></span> vaudra la valeur passée en argument : 25
-** <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0VOVntpZF9hcnRpY2xlfTwvY29kZT4="></span> vaudra la valeur passée en argument : 25
-** <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0VOVnthcmdzL2lkX2FydGljbGV9PC9jb2RlPg=="></span> vaudra la valeur passée en argument : 25


{{Et alors ?}}
Connaissant l'id de {l'objet} (article, rubrique, mot, site...) depuis lequel notre modèle est appelé, il est désormais possible d'utiliser des boucles utilisant cette information, de telle sorte que le modèle devient ainsi {{contextuel}} en affichant des informations dépendantes de son lieu d'appel. Un {{même}} modèle appelé depuis plusieurs articles retournera ainsi des informations spécifiques différentes pour chaque article.


{{Attention toutefois !}}
Comme désormais l'id de l'objet appelant (id_article, id_rubrique, id_mot...) est toujours transmis au modèle, il devient impossible d'utiliser dans le modèle une boucle avec le [critère conditionnel->http://www.spip.net/fr_article3996.html] <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+e2lkX2FydGljbGU/fTwvY29kZT4="></span> (ou <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+e2lkX3J1YnJpcXVlP308L2NvZGU+"></span>, ou <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+e2lkX21vdD99PC9jb2RlPg=="></span> ...)
L'astuce consistera à utiliser 2 critères dépendants de <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0VOVnthcmdzL2lkX2FydGljbGV9PC9jb2RlPg=="></span> car seul <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0VOVnthcmdzL2lkX2FydGljbGV9PC9jb2RlPg=="></span> nous renseigne sur l'argument «id_article» passé {{explicitement}} au modèle.
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+PGNvZGU+Jmx0O0JPVUNMRV9hX2NvbmQoQVJUSUNMRVMpIHtpZF9hcnRpY2xlICZndDs9ICNFTlZ7YXJncy9pZF9hcnRpY2xlLCAwfX0ge2lkX2FydGljbGUgJmx0Oz0gI0VOVnthcmdzL2lkX2FydGljbGUsIDk5OTk5OTk5fX0geyZxdW90OyZsdDticiAvJmd0OyZxdW90O30mZ3Q7DQojSURfQVJUSUNMRSAtICNUSVRSRQ0KJmx0Oy9CT1VDTEVfYV9jb25kJmd0OzwvY29kZT48L3ByZT48L2Rpdj4="></div>


{Explications :}
-* si <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0VOVnthcmdzL2lkX2FydGljbGV9PC9jb2RlPg=="></span> existe c'est que <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+aWRfYXJ0aWNsZTwvY29kZT4="></span> a été explicitement renseigné dans l'appel du modèle (exemple : <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+Jmx0O21vbl9tb2RlbGUxfGlkX2FydGljbGU9MjUmZ3Q7PC9jb2RlPg=="></span>).
Dans ce cas, la boucle cherchera <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+aWRfYXJ0aWNsZSAmZ3Q7PSAyNTwvY29kZT4="></span> et <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+aWRfYXJ0aWNsZSAmbHQ7PSAyNTwvY29kZT4="></span> ; soit (tout le monde aura trouvé) : <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+aWRfYXJ0aWNsZSA9IDI1PC9jb2RlPg=="></span> ;
-*si <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0VOVnthcmdzL2lkX2FydGljbGV9PC9jb2RlPg=="></span> n'existe pas (<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+aWRfYXJ0aWNsZTwvY29kZT4="></span> n'a pas été explicitement renseigné dans l'appel du modèle : <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+Jmx0O21vbl9tb2RlbGUxJmd0OzwvY29kZT4="></span>), alors la boucle cherchera <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+aWRfYXJ0aWNsZSAmZ3Q7PSAwPC9jb2RlPg=="></span> et <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+aWRfYXJ0aWNsZSAmbHQ7PSA5OTk5OTk5OTwvY29kZT4="></span> ; soit (tout le monde aura trouvé) : tous les articles.


on reproduit bien là le comportement de <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+e2lkX2FydGljbGU/fTwvY29kZT4="></span>.


----[a11<-]


{{{11- Ne pas transformer en lien cliquable les urls saisies en dur dans un texte <small style="color:grey;">[->#aa]</small>}}}
<img12005|alt=références>  [<small style="color:grey;vertical-align:top;">fichier mes_fonctions.php</small>->http://programmer.spip.net/Declarer-des-fonctions] [<small style="color:grey;vertical-align:top;">filtre |ou</small>->http://www.spip.net/fr_article4619.html] [<small style="color:grey;vertical-align:top;">balise #EVAL</small>->http://www.spip.net/fr_article4587.html]


Si l'on veut que ce soit systématique sur l'ensemble du site, il faut ajouter dans un fichier «mes_fonctions.php» à placer dans« squelettes/» :
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InBocCBzYW5zX3RlbGVjaGFyZ2VtZW50Ij48Y29kZT5kZWZpbmUoJ19FWFRSQUlSRV9MSUVOUycsICcvLycpOzwvY29kZT48L3ByZT48L2Rpdj4="></div>


Mais on peut aussi vouloir ne réserver ce traitement qu'à certains articles.
Dans une {copie} de «article.html» que l'on aura placée dans «squelettes/» on écrira alors :
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+PGNvZGU+WygjSURfQVJUSUNMRXw9PXs1fXxvdXsjSURfQVJUSUNMRXw9PXs2Mn19fG91aSkNCiAgICBbKCNFVkFMe2RlZmluZSgnX0VYVFJBSVJFX0xJRU5TJywgJy8vJyl9KV0NCl0NCiZsdDtCT1VDTEVfcHJpbmNpcGFsZShBUlRJQ0xFUykge2lkX2FydGljbGV9Jmd0Ow0KJmx0OyFET0NUWVBFIGh0bWwgUFVCTElDICZxdW90Oy0vL1czQy8vRFREIFhIVE1MIDEuLi4uPC9jb2RlPjwvcHJlPjwvZGl2Pg=="></div>
ceci pour que sur les seuls articles 5 et 62 les urls saisies directement ne soient pas transformées en lien cliquable. Les urls saisies dans tous les autres articles continuant de recevoir le traitement standard de spip seront donc cliquables.


----[a12<-]


{{{12- Utiliser une boucle DATA pour récupérer des champs en CamelCase sur une base externe <small style="color:grey;">[->#aa]</small>}}}
<img12005|alt=références>  [<small style="color:grey;vertical-align:top;">boucle (DATA)</small>->http://www.spip.net/fr_article5443.html]  [<small style="color:grey;vertical-align:top;">base externe</small>->http://programmer.spip.net/Declarer-une-autre-base]


SPIP permet d'aller piocher des données dans une base externe (à condition qu'elle ait été déclarée depuis <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ZWNyaXJlLz9leGVjPWFkbWluX3RlY2g8L2NvZGU+"></span>).
Il peut arriver que cette base externe contienne des tables dont les champs ont été définis en «CamelCase» (un mélange de minuscules et majuscules, comme par exemple : «{NumOrdre}»). Dans ce cas, SPIP est incapable d'afficher tant <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I05VTU9SRFJFPC9jb2RlPg=="></span> que <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0NIQU1QX1NRTHtOdW1PcmRyZX08L2NvZGU+"></span> dans la boucle.
Pour remédier à ça, nous fabriquerons une boucle DATA ainsi :
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+PGNvZGU+I1NFVHtyZXEsICZxdW90O1NFTEVDVCB0YWJsZV9leHQuQ2hhbXBDYW1lbENhc2UgRlJPTSB0YWJsZV9leHQgQVMgJmx0O3NwYW4gY2xhc3M9JnF1b3Q7YmFzZTY0JnF1b3Q7IHRpdGxlPSZxdW90O1BHTnZaR1VnWTJ4aGMzTTlJbk53YVhCZlkyOWtaU0J6Y0dsd1gyTnZaR1ZmYVc1c2FXNWxJaUJrYVhJOUlteDBjaUkrZEdGaWJHVmZaWGgwUEM5amIyUmxQZz09JnF1b3Q7Jmd0OyZsdDsvc3BhbiZndDsmcXVvdDt9DQombHQ7Qk9VQ0xFX3Rlc3QoREFUQSkge3NvdXJjZSBzcWwsIGNvbm5lY3RldXI6I0dFVHtyZXF9fSZndDsNCiAgI1ZBTEVVUntDaGFtcENhbWVsQ2FzZX0mbHQ7YnIgLyZndDsNCiZsdDsvQk9VQ0xFX3Rlc3QmZ3Q7PC9jb2RlPjwvcHJlPjwvZGl2Pg=="></div>
Dans ce code, <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+Y29ubmVjdGV1cjwvY29kZT4="></span> correspond au nom de la base externe déclarée (on peut le retrouver à partir de <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ZWNyaXJlLz9leGVjPWFkbWluX3RlY2g8L2NvZGU+"></span> dans la liste «Bases supplémentaires déjà interrogeables:» ou en parcourant le dossier <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+Y29uZmlnLzwvY29kZT4="></span> pour y repérer le fichier de connexion «<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+bm9tX2R1IGNvbm5lY3RldXIucGhwPC9jb2RlPg=="></span>»


----[a13<-]


{{{13- Table des matières tout en javascript <small style="color:grey;">[↖->#aa]</small>}}}


Récupère les textes des intertitres et génère une table des matières. Comme le javascript se lance après l'affichage de la page, il peut y avoir un petit saut de l'affichage, selon l'endroit où la table des matières est insérée dans le HTML.


L'image utilisée pour le retour au sommaire encodée en base64 et transmise par le javascript.


<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9J2phdmFzY3JpcHQgc2Fuc190ZWxlY2hhcmdlbWVudCc+PGNvZGU+LyoNCiAqIEfDqW7DqXJlciB1bmUgdGFibGUgZGVzIG1hdGnDqHJlcw0KICogw6AgcGFydGlyIGRlcyBoMyBvdSAuaDMgb3UgLnRkbV9ham91dGVyDQogKiBzYXVmIHNpIGNsYXNzPSZxdW90O25vX3RkbSZxdW90Ow0KICogbCdhZmZpY2hlciBkYW5zIGwnw6lsw6ltZW50IGQnaWQ9JnF1b3Q7dGRtJnF1b3Q7IHBhciBkw6lmYXV0DQogKg0KICogQXV0ZXVyIDogY3lfYWx0ZXJuDQogKi8NCmZ1bmN0aW9uIGdlbmVyZXJfdGRtKGlkX3RkbSl7DQoJaWYgKGpRdWVyeSgmcXVvdDtoMywgLmgzLCAudGRtX2Fqb3V0ZXImcXVvdDspLmxlbmd0aCAmbHQ7IDEpDQoJCXJldHVybjsNCglpZiAoaWRfdGRtID09ICcnKQ0KCQlpZF90ZG0gPSAmcXVvdDt0ZG0mcXVvdDs7DQoJdmFyIGh0bWxfdGRtID0gJyZsdDthIG5hbWU9JnF1b3Q7dGRtJnF1b3Q7Jmd0OyZsdDsvYSZndDsmbHQ7aDImZ3Q7VGFibGUgZGVzIG1hdGllcmVzJmx0Oy9oMiZndDsmbHQ7dWwmZ3Q7JyArICZxdW90O1xyXG4mcXVvdDs7DQoJdmFyIGN0ZXVyID0gMTsKCgovLyBnw6luw6lyZXIgbGUgY29udGVudSBkZSBsYSB0ZG0gZXQgYWpvdXRlciBsaWVucyBldCBhbmNyZXMNCglqUXVlcnkoJnF1b3Q7aDMsIC5oMywgLnRkbV9ham91dGVyJnF1b3Q7KS5lYWNoKCBmdW5jdGlvbigpew0KCQlpZiAoalF1ZXJ5KHRoaXMpLmhhc0NsYXNzKCZxdW90O25vX3RkbSZxdW90OykpDQoJCQlyZXR1cm47DQoJCXZhciB0aXRyZSA9IGpRdWVyeSh0aGlzKS50ZXh0KCk7DQoJCWh0bWxfdGRtICs9ICcmbHQ7bGkmZ3Q7Jmx0O2EgaHJlZj0mcXVvdDsjdGRtXycgKyBjdGV1ciArICcmcXVvdDsmZ3Q7JyArIHRpdHJlLnN1YnN0cigwLDI1MCkgKyAnJmx0Oy9hJmd0OyZsdDsvbGkmZ3Q7JyArICZxdW90O1xyXG4mcXVvdDs7CgoKLy8gbCdpbWFnZSBkdSBsaWVuIHZlcnMgdG9wIGVuY29kw6llIGVuIGJhc2U2NA0KCQl2YXIgaW1nX3RkbSA9ICcmbHQ7aW1nIHNyYz0mcXVvdDtkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFGbzlNLzNBQUFBQkdkQlRVRUFBTmJZMUU5WU1nQUFBQmwwUlZoMFUyOW1kSGRoY21VQVFXUnZZbVVnU1cxaFoyVlNaV0ZrZVhISlpUd0FBQUtsU1VSQlZIamFZbUFBZ3UvZnY5c3pmUGp3em43SmtrWC9BUUtJRWN3REFzYTNiMS8vWjJabVpnQUlJTEM4cmEzdC8rZlBuLzdYMDlQOXovanUzUnY3N3orK0hmais3UWVEb0tBZ0EwQUF3ZlZBd1FNR1BUMjkvOVhWMWYvbDVPVCt6NXc1OHovRDZ6Y3Yvd05sL2dPdEFXT1dyOSsrTUx4NCtZemh6NTgvREl4TWpBd0FBWWdjWXh3RWdTZ0t6djhMRXZRUWxuZ2l1Q3MwRkNaNmpLV0YrTEZ4bHc3WmpZbk52R1l5ZWIvR1BpWk5jbWIvODRDbWJab2I3M1hGKzRtMjdiSndyaTk1TmNZUGorY2RkY0l3OUpnWklRUmV0ckJ0a2ZUN3V0anNxMU5GV1pRNFY2Q3FxQ2dpd2xjQWdkd2dEelJKZ1FFTDRPVGtQQWhVOFBYLy8vK01RTlV3WWFnamdSUWpJNU1EMDZaTm14bkN3OE1ZM056Y3dSSXRMYTFBbmR3TUdocWFFUFZBZi8vbjUrZi8vKzNiVjNEb2dFd0VCV3gxZGRWL2NCQzhldjNpLzV1M3IvNERIZnQvNnRRcC82MXRyT0doQm9va3hzZFBIdnhuWVFHNW5KbkJ4TmlNNGVEQi9ReEFFOEUrQUFJSGxsKy9mNEd0QXFwaFdMOWhMUU12THkvUW1mL0JiZ1VwWXZuNzd5OERUSkcwdEJURHYvLy9HSmorTVlIREdPaTNCd0FCK2laL0hRS0NJQTdQeHRWWGlOQlpMK0xpQVdnb2VSS1BJUnBlUkRTb2hlSWFXdGRjeVcyQ0JqdG1mdUpQVHBqTEpuZkozc3pzTjkrQ0E3UGZtZmM1YzhIZlgxcEFPRWhiTloxVnpibE1yTXJBaGpuL3kzZGtzdDg1UnhpQW9qZ0xLczJybU5JMEZXUm5TS1Z5UFFUcjgzUTY0ZkY0aEgyOVhwZTMydzB3QnByR1M5blQ2UWlmREtSaWl1T1lXcTBtSlVsQzFscUtvZ2pWNjFHZGJOVyt1Z25VSnBFY2dwaW5JTEkwd2VHd0IvTFpiRTZkVGhzRkt1VXlMSHNHZkwxY0x6RDhkcnVTRityZWUxcXRseFNHSWRad09IaU5SdUh4QnlWY005RjFFWWltZWhFTE1uRG9tdXNJanpFZng4U2NHM2hUNTM4cC9TZDJ4V0lwdVFOU2dWdkhjOWRra3dBQUFBQkpSVTVFcmtKZ2dnPT0mcXVvdDsgLyZndDsnOw0KCQlqUXVlcnkodGhpcykuYXBwZW5kKCcmbHQ7YSBocmVmPSZxdW90OyN0ZG0mcXVvdDsgdGl0bGU9JnF1b3Q7JnF1b3Q7Jmd0OycgKyBpbWdfdGRtICsnJmx0Oy9hJmd0OycpLmJlZm9yZSgnJmx0O2EgbmFtZT0mcXVvdDt0ZG1fJyArIGN0ZXVyICsgJyZxdW90OyZndDsmbHQ7L2EmZ3Q7Jyk7CgoKY3RldXIgKz0gMTsNCgl9KTsNCglodG1sX3RkbSArPSAnJmx0Oy91bCZndDsnICsgJnF1b3Q7XHJcbiZxdW90OzsKCgovLyBpbnPDqXJlciBsYSB0ZG0NCglqUXVlcnkoJnF1b3Q7I3RkbSZxdW90OykuaHRtbChodG1sX3RkbSk7DQp9DQpqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGdlbmVyZXJfdGRtKTs8L2NvZGU+PC9wcmU+PC9kaXY+"></div>


----[a14<-]


{{{14- Afficher n'importe où (hors BOUCLE) le LOGO d'une rubrique particulière <small style="color:grey;">[↖->#aa]</small>}}}
<img12005|alt=références>  [<small style="color:grey;vertical-align:top;">balise #VAL</small>->http://www.spip.net/fr_article4026.html]  [<small style="color:grey;vertical-align:top;">fonction preg_files()</small>->http://code.spip.net/autodoc/tree/ecrire/inc/flock.php.html]  [<small style="color:grey;vertical-align:top;">filtre |table_valeur</small>->http://www.spip.net/fr_article4572.html]  [<small style="color:grey;vertical-align:top;">filtre |balise_img</small>->http://www.spip.net/fr_article4003.html]


<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+PGNvZGU+ICANClsoI1ZBTHtJTUcvfXxwcmVnX2ZpbGVze3J1Ym9uI0lEX0RFX0xBX1JVQlJJUVVFXC4oanBnfGdpZnxwbmcpfXx0YWJsZV92YWxldXJ7MH18YmFsaXNlX2ltZ3xpbWFnZV9yZWR1aXJlezEyMCwxMjB9KV0NCiAgPC9jb2RlPjwvcHJlPjwvZGl2Pg=="></div>


où <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ICNJRF9ERV9MQV9SVUJSSVFVRSA8L2NvZGU+"></span> peut être soit un {{nombre}} écrit «en dur» dans le squelette, soit un {{#ID_RUBRIQUE}} ou {{#ID_PARENT}}, soit encore un {{#GET}} défini antérieurement.


peut aussi s'appliquer à un {{article}} (on utilisera «arton» au lieu de «rubon») ou un {{site syndiqué}} («siteon») ou un {{auteur}} («auton»)...


----[a15<-]


{{{15- Afficher le logo (même hors boucle) d'un «objet spip» en utilisant un modèle <small style="color:grey;">[↖->#aa]</small>}}}
<img12005|alt=références>  [<small style="color:grey;vertical-align:top;">balise #VAL</small>->http://www.spip.net/fr_article4026.html]  [<small style="color:grey;vertical-align:top;">filtre |table_valeur</small>->http://www.spip.net/fr_article4572.html]  [<small style="color:grey;vertical-align:top;">filtre |balise_img</small>->http://www.spip.net/fr_article4003.html]


Nous créons le modèle «{squelettes/modeles/logo.html}» :
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+PGNvZGU+WygjU0VUe29iamV0LCAjRU5We2FydGljbGV9fD97DQogICAgYXJ0b24jRU5We2FydGljbGV9LCAjRU5We3J1YnJpcXVlfXw/ew0KICAgICAgICBydWJvbiNFTlZ7cnVicmlxdWV9LCAjRU5We2F1dGV1cn18P3sNCiAgICAgICAgICAgIGF1dG9uI0VOVnthdXRldXJ9LCAjRU5We3NpdGV9fD97DQogICAgICAgICAgICAgICAgc2l0ZW9uI0VOVntzaXRlfSwgI0VOVnticmV2ZX18P3sNCiAgICAgICAgICAgICAgICAgICAgYnJldmVvbiNFTlZ7YnJldmV9fQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCn0pXQ0KWygjVkFMe0lNRy99fHByZWdfZmlsZXN7I0dFVHtvYmpldH1cLihqcGd8Z2lmfHBuZyl9fHRhYmxlX3ZhbGV1cnswfSldDQogIDwvY29kZT48L3ByZT48L2Rpdj4="></div>
Ce modèle retourne le chemin d'accès à un logo stocké à la racine de IMG/
par exemple : «{IMG/arton25.png}» ou «{IMG/auton1.jpg}» ... et ce, quel que soit l'objet (article, rubrique, auteur...) et quelle que soit l'extension du fichier logo (gif, png ou jpg).


On peut l'utiliser (y compris en dehors d'une boucle) pour afficher l'image logo de n'importe quel objet :<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+PGNvZGU+ICBbKCNNT0RFTEV7bG9nbywgYXJ0aWNsZT0yNX18YmFsaXNlX2ltZyldDQogIDwvY29kZT48L3ByZT48L2Rpdj4="></div>
ou un lien vers cette image logo :<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+PGNvZGU+ICAmbHQ7YSBocmVmPSZxdW90O1soI01PREVMRXtsb2dvLCBhcnRpY2xlPTI1fSldJnF1b3Q7Jmd0Oy4uLiZsdDsvYSZndDsNCiAgPC9jb2RlPjwvcHJlPjwvZGl2Pg=="></div>


Nous pouvons ainsi avoir un logo qui pointe vers son fichier :<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+PGNvZGU+ICAmbHQ7YSBocmVmPSZxdW90O1soI01PREVMRXtsb2dvLCBhcnRpY2xlPTI1fXx1cmxfYWJzb2x1ZSldJnF1b3Q7Jmd0Ow0KICBbKCNNT0RFTEV7bG9nbywgYXJ0aWNsZT0yNX18YmFsaXNlX2ltZ3xpbWFnZV9yZWR1aXJlezEyMCwxMjB9KV0NCiAgJmx0Oy9hJmd0Ow0KICA8L2NvZGU+PC9wcmU+PC9kaXY+"></div>


----[a16<-]


{{{16- Pouvoir utiliser un critère conditionnel avec un nom de variable quelconque <small style="color:grey;">[->#aa]</small>}}}
<img12005|alt=références>  [<small style="color:grey;vertical-align:top;">critère conditionnel</small>->http://www.spip.net/fr_article4013.html]  [<small style="color:grey;vertical-align:top;">balise #ENV</small>->http://www.spip.net/fr_article4014.html]  [<small style="color:grey;vertical-align:top;">balises #SET et #GET</small>->http://www.spip.net/fr_article3990.html]


L'usage de <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+e2NyaXTDqHJlID9vcMOpcmF0ZXVyICNFTlZ7dmFyaWFibGV9fTwvY29kZT4="></span> est limité par l'obligation que <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+dmFyaWFibGU8L2NvZGU+"></span> soit homonyme de <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+Y3JpdMOocmU8L2NvZGU+"></span>.
On peut (on doit) écrire <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+e3RpdHJlID89ICNFTlZ7dGl0cmV9fTwvY29kZT4="></span> mais pas <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+e3RpdHJlID89ICNFTlZ7bmltcG9ydGVxdW9pfX08L2NvZGU+"></span>.
Pour contrecarrer cette interdiction, on peut néanmoins, {dans certains cas},  utiliser des écritures particulières pour chaque opérateur.
-* pour le critère {{<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+IExJS0UgPC9jb2RlPg=="></span>}} :
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+PGNvZGU+ICAgICNTRVR7b2ssICNFTlZ7bmltcG9ydGVxdW9pfX0NCiAgICAmbHQ7Qk9VQ0xFX2EoQVJUSUNMRVMpe2NoYXBvIExJS0UgJSNHRVR7b2t9JX0mZ3Q7DQogICAgI0NIQVBPDQogICAgJmx0Oy9CT1VDTEVfYSZndDs8L2NvZGU+PC9wcmU+PC9kaXY+"></div>
-* pour le critère {{<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ID0gPC9jb2RlPg=="></span>}} :
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+PGNvZGU+ICAgICNTRVR7b2ssICNFTlZ7bmltcG9ydGVxdW9pfXxzaW5vbnsuKn19DQogICAgJmx0O0JPVUNMRV9iKEFSVElDTEVTKXt0aXRyZSA9PSAjR0VUe29rfX0mZ3Q7DQogICAgI1RJVFJFDQogICAgJmx0Oy9CT1VDTEVfYiZndDs8L2NvZGU+PC9wcmU+PC9kaXY+"></div>
-* pour le critère {{<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ICZsdDsgPC9jb2RlPg=="></span>}} sur un champ {numérique} (id_article) :
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+PGNvZGU+ICAgICNTRVR7b2ssICNFTlZ7bmltcG9ydGVxdW9pfXxzaW5vbns5OTk5OTl9fQ0KICAgICZsdDtCT1VDTEVfYyhBUlRJQ0xFUyl7aWRfYXJ0aWNsZSAmbHQ7ICNHRVR7b2t9fSZndDsNCiAgICAjSURfQVJUSUNMRQ0KICAgICZsdDsvQk9VQ0xFX2MmZ3Q7PC9jb2RlPjwvcHJlPjwvZGl2Pg=="></div>
-* pour le critère {{<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ICZsdDsgPC9jb2RlPg=="></span>}} sur un champ {non numérique} (texte ou date) :
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+PGNvZGU+ICAgICNTRVR7b2ssICNFTlZ7bmltcG9ydGVxdW9pfXxzaW5vbnt6enp6enp9fQ0KICAgICZsdDtCT1VDTEVfZChBUlRJQ0xFUyl7dGl0cmUgJmx0OyAjR0VUe29rfX0mZ3Q7DQogICAgI1RJVFJFDQogICAgJmx0Oy9CT1VDTEVfZCZndDs8L2NvZGU+PC9wcmU+PC9kaXY+"></div>
-* pour le critère {{<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ICZndDsgPC9jb2RlPg=="></span>}} (, c'est facile...) :
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+PGNvZGU+ICAgICZsdDtCT1VDTEVfZShBUlRJQ0xFUyl7aWRfYXJ0aWNsZSAmZ3Q7ICNFTlZ7bmltcG9ydGVxdW9pfX0mZ3Q7DQogICAgI0lEX0FSVElDTEUNCiAgICAmbHQ7L0JPVUNMRV9lJmd0Ow0KICAgICZsdDtCT1VDTEVfZihBUlRJQ0xFUyl7dGl0cmUgICZndDsgI0VOVntuaW1wb3J0ZXF1b2l9fSZndDsNCiAgICAjVElUUkUNCiAgICAmbHQ7L0JPVUNMRV9mJmd0OzwvY29kZT48L3ByZT48L2Rpdj4="></div>


----[a17<-]


{{{17- Retrouver l'objet et l'id_objet concerné par la page en cours <small style="color:grey;">[↖->#aa]</small>}}}


Pouvoir afficher ou tester n'importe où dans le squelette (en dehors de toute boucle et y compris dans un MODELE ou un INCLURE) «l'objet» et l'«id_objet» concerné par la page courante.


<small>dans {mes_fonctions.php} :</small>
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InBocCBzYW5zX3RlbGVjaGFyZ2VtZW50Ij48Y29kZT4vKg0KICogQ2V0dGUgZm9uY3Rpb24gcmV0b3VybmUgc29pdCBsJ29iamV0IHNvaXQgbCdpZF9vYmpldCBjb25jZXJuw6kgcGFyDQogKiBsYSBwYWdlIGVuIGNvdXJzIGV0IGNlLCBlbi1kZWhvcnMgZGUgdG91dGUgYm91Y2xlLg0KICogRWxsZSBzZSBiYXNlIHN1ciBsJ3VybCAjU0VMRiBpbmTDqXBlbmRhbW1lbnQgZHUgdHlwZSBkJ3VybCBjaG9pc2kuDQogKg0KICogYXBwZWxhYmxlIHBhciA6DQogKiAgIFsoI1NFTEZ8cmVmZXJlbmNle29iamV0fSldDQogKiAgIFsoI1NFTEZ8cmVmZXJlbmNle2lkX29iamV0fSldDQogKiAgIFsoI1NFTEZ8cmVmZXJlbmNle3J1YnJpcXVlfSldDQogKiAgIFsoI1NFTEZ8cmVmZXJlbmNle2lkX2F1dGV1cn0pXQ0KICoNCiAqIHBlcm1ldCBkZXMgY2hvc2VzIGNvbW1lIDoNCiAqICAgWygjU0VMRnxyZWZlcmVuY2V7cnVicmlxdWV9KSBqZSBzdWlzIHN1ciB1bmUgcGFnZSBydWJyaXF1ZV0NCiAqICAgWygjU0VMRnxyZWZlcmVuY2V7aWRfYXV0ZXVyfSkgamUgc3VpcyBzdXIgbGEgcGFnZSBkZSBsJ2F1dGV1ciBuXQ0KICogICBbKCNJTkZPX1RJVFJFeyNTRUxGfHJlZmVyZW5jZXtvYmpldH0sICNTRUxGfHJlZmVyZW5jZXtpZF9vYmpldH19KV0NCiAqDQogKiBAcGFyYW0gc3RyaW5nICRzZWxmDQogKiAgIGwndXJsIHJldG91cm7DqWUgcGFyICNTRUxGDQogKiBAcGFyYW0gc3RyaW5nICRyZXENCiAqICAgbGUgbW90IGfDqW7DqXJpcXVlICdvYmpldCcNCiAqICAgbGUgbW90IGfDqW7DqXJpcXVlICdpZF9vYmpldCcNCiAqICAgdW4gbm9tIGxpdHTDqXJhbCBkJ29iamV0ICgncnVicmlxdWUnLCAnYXV0ZXVyJywgJ2V2ZW5lbWVudCcuLi4pDQogKiAgIHVuIG5vbSBsaXR0w6lyYWwgZCdpZF9vYmpldCAoJ2lkX3J1YnJpcXVlJywgJ2lkX2F1dGV1cicuLi4pDQogKiAgICANCiAqIEByZXR1cm4gc3RyaW5nDQogKiAgIHNvaXQgbGUgbm9tIHLDqWVsIGRlICdvYmpldCcgKCdhcnRpY2xlJywgJ3J1YnJpcXVlJywgJ2V2ZW5lbWVudCcuLi4pIDsNCiAqICAgc29pdCBsYSB2YWxldXIgZGUgJ2lkX29iamV0JyA7DQogKiAgIHNvaXQgVFJVRSBzaSBsZSBub20gbGl0dMOpcmFsIGQnb2JqZXQgZGVtYW5kw6kgZXN0IGJpZW4gY2VsdWkgZGUNCiAqICAgICAgbCdvYmpldCBlbiBjb3Vycw0KICogICBzb2l0IGxhIHZhbGV1ciBkZSBsJ2lkX29iamV0IGV4cGxpY2l0ZW1lbnQgZGVtYW5kw6kNCiAqICAgc29pdCBGQUxTRQ0KICovDQpmdW5jdGlvbiByZWZlcmVuY2UoJHNlbGYsICRyZXEgPSAnJykgew0KICAkcmV0ID0gYXJyYXkoKTsNCiAgJHJldFsnb2JqJ10gPSAkcmV0WydpZCddID0gJyc7DQogIGlmIChsaXJlX2NvbmZpZygndHlwZV91cmxzJykgIT0gJ2FyYm8nKSB7DQogICAgJGVsZW1lbnRzID0gdXJsc19kZWNvZGVyX3VybCgkc2VsZik7DQogICAgaWYoIWVtcHR5KCRlbGVtZW50c1swXSkpIHsNCiAgICAgICRyZXRbJ29iaiddID0gJGVsZW1lbnRzWzBdOw0KICAgICAgJHJldFsnaWQnXSA9ICRlbGVtZW50c1sxXVsnaWRfJyAuICRyZXRbJ29iaiddXTsNCiAgICB9DQogIH0NCiAgZWxzZSB7DQogICAgJGVsZW1lbnRzID0gdXJsc19hcmJvX2Rpc3QoJHNlbGYsJycpOw0KICAgIGlmKCFlbXB0eSgkZWxlbWVudHNbMF0pKSB7DQogICAgICAkcmV0WydvYmonXSA9ICRlbGVtZW50c1sxXTsNCiAgICAgICRyZXRbJ2lkJ10gPSAkZWxlbWVudHNbMF1bJ2lkXycgLiAkcmV0WydvYmonXV07DQogICAgfQ0KICB9DQogIGlmICgkcmVxID09ICRyZXRbJ29iaiddKSByZXR1cm4gJyAnOw0KICBlbHNlaWYgKCRyZXEgPT0gJ2lkXycgLiAkcmV0WydvYmonXSkgcmV0dXJuICRyZXRbJ2lkJ107DQogIGVsc2VpZiAoJHJlcSA9PSAnb2JqZXQnKSByZXR1cm4gJHJldFsnb2JqJ107DQogIGVsc2VpZiAoJHJlcSA9PSAnaWRfb2JqZXQnKSByZXR1cm4gJHJldFsnaWQnXTsNCiAgcmV0dXJuICcnOw0KfQoKCi8qIExhIGJhbGlzZSAjU0VMRl9SRUZ7YXJnfQ0KICoNCiAqIFMndXRpbGlzZSBkYW5zIGxlcyBzcXVlbGV0dGVzIHBhciBhcHBlbCBkaXJlY3QgYWNjb21wYWduw6llDQogKiBkJ3VuIHNldWwgYXJndW1lbnQgOg0KICogICBsZSBtb3QgZ8OpbsOpcmlxdWUgJ29iamV0Jw0KICogICBsZSBtb3QgZ8OpbsOpcmlxdWUgJ2lkX29iamV0Jw0KICogICB1biBub20gbGl0dMOpcmFsIGQnb2JqZXQgKCdydWJyaXF1ZScsICdhdXRldXInLCAnZXZlbmVtZW50Jy4uLikNCiAqICAgdW4gbm9tIGxpdHTDqXJhbCBkJ2lkX29iamV0ICgnaWRfcnVicmlxdWUnLCAnaWRfYXV0ZXVyJy4uLikNCiAqDQogKiBwYXIgZXhlbXBsZSA6DQogKiAgIFtjJ2VzdCBvayA6IGplIG0nYWZmaWNoZSBkYW5zIGxhIHBhZ2UgYXJ0aWNsZSBkZSBsJ2FydGljbGUgbsKwIA0KICogICAoI1NFTEZfUkVGe2lkX2FydGljbGV9KV0NCiAqDQogKi8NCmZ1bmN0aW9uIGJhbGlzZV9TRUxGX1JFRigkcCkgew0KICAkcC0mZ3Q7Y29kZSA9IGludGVycHJldGVfYXJndW1lbnRfYmFsaXNlKDEsICRwKTsNCiAgJHAtJmd0O2NvZGUgPSAncmVmZXJlbmNlKHNlbGYoKSwnIC4kcC0mZ3Q7Y29kZSAuICcpJzsNCiAgJHAtJmd0O2ludGVyZGlyZV9zY3JpcHRzID0gZmFsc2U7DQogIHJldHVybiAkcDsNCn08L2NvZGU+PC9wcmU+PC9kaXY+"></div>


----[a18<-]


{{{18- Afficher l'intervalle de temps entre une date donnée et la date courante <small style="color:grey;">[↖->#aa]</small>}}}


<small>dans {mes_fonctions.php} :</small>
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InBocCBzYW5zX3RlbGVjaGFyZ2VtZW50Ij48Y29kZT4vKg0KICogTGUgZmlsdHJlIDogWygjREFURXxkZWNvbXB0ZSldIHJldG91cm5lIGxhIHZhbGV1ciBkZQ0KICogbCdpbnRlcnZhbGxlIGRlIHRlbXBzIGVudHJlIGxhIGRhdGUgY291cmFudGUgZXQgbGEgZGF0ZSBwYXNzw6llDQogKiBlbiBhcmd1bWVudC4gU2kgbCfDqWNhcnQgZXN0IG7DqWdhdGlmICgjREFURSBlc3QgcGFzc8OpZSkgbGEgZm9uY3Rpb24NCiAqIHByw6lmaXhlIGxlIHJldG91ciBkJ3VuIHNpZ25lICdtb2lucycuDQogKg0KICogQHBhcmFtIHN0cmluZyAkZGF0X3gNCiAqICAgdW5lIGRhdGUgcXVlbGNvbnF1ZSA6ICdhYWFhLW1tLWpqIGhoOm1tOnNzJyBvdSAnYWFhYS1tbS1qaicNCiAqICANCiAqIEByZXR1cm4gc3RyaW5nDQogKiAgIGwnaW50ZXJ2YWxsZSBkZSB0ZW1wcyBlbnRyZSBsYSBkYXRlIGNvdXJhbnRlIGV0IGNlbGxlIHBhc3PDqWUgZW4gYXJndW1lbnQuDQogKi8NCmZ1bmN0aW9uIGRlY29tcHRlKCRkYXRfeCkgew0KICAkYXVqb3VyZF9odWkgPSBuZXcgRGF0ZVRpbWUoKTsNCiAgJGRhdGVfY29tcGFyZSA9IG5ldyBEYXRlVGltZSgkZGF0X3gpOw0KICAkZWN0ID0gJGF1am91cmRfaHVpLSZndDtkaWZmKCRkYXRlX2NvbXBhcmUpOw0KICAkc2VucyA9ICgkZWN0LSZndDtpbnZlcnQgPT0gMSkgPyAnLSAnIDogJyc7DQogICRmb3JtYXQgPSAkc2VucyAuICclMSQwNGQtJTIkMDJkLSUzJDAyZCAlNCQwMmQ6JTUkMDJkOiU2JDAyZCc7DQogIHJldHVybiBzcHJpbnRmKCRmb3JtYXQsICRlY3QtJmd0O3ksICRlY3QtJmd0O20sICRlY3QtJmd0O2QsICRlY3QtJmd0O2gsICRlY3QtJmd0O2ksICRlY3QtJmd0O3MpOw0KfQoKCi8qIExhIGJhbGlzZSA6ICNERUNPTVBURXthYWFhLW1tLWpqIGhoOm1tOnNzfQ0KICoNCiAqIEFmZmljaGUgKHNvdXMgbGEgZm9ybWUgJ2FhYWEtbW0tamogaGg6bW06c3MnKSBsYSB2YWxldXIgZGUgbCdpbnRlcnZhbGxlDQogKiBkZSB0ZW1wcyBlbnRyZSBsYSBkYXRlIGNvdXJhbnRlIGV0IGxhIGRhdGUgcGFzc8OpZSBlbiBwYXJhbcOodHJlLg0KICogU2kgJ2hoOm1tOnNzJyBlc3Qgb21pcyBkYW5zIGwnYXJndW1lbnQsIDAwOjAwOjAwIHNlcmEgdXRpbGlzw6kuDQogKiBTaSBsJ8OpY2FydCBlc3QgbsOpZ2F0aWYgbGUgcmV0b3VyIGVzdCBwcsOpZml4w6kgIGQndW4gc2lnbmUgJ21vaW5zJy4NCiAqDQogKi8NCmZ1bmN0aW9uIGJhbGlzZV9ERUNPTVBURSgkcCkgew0KICAkcC0mZ3Q7Y29kZSA9IGludGVycHJldGVfYXJndW1lbnRfYmFsaXNlKDEsICRwKTsNCiAgJHAtJmd0O2NvZGUgPSAnZGVjb21wdGUoJyAuICRwLSZndDtjb2RlIC4gJyknOw0KICAkcC0mZ3Q7aW50ZXJkaXJlX3NjcmlwdHMgPSBmYWxzZTsNCiAgcmV0dXJuICRwOw0KfTwvY29kZT48L3ByZT48L2Rpdj4="></div>


----[a19<-]


{{{19- Auto publier les articles d'une rubrique par l’intermédiaire d'un pipeline (Utilisation hors plugin) <small style="color:grey;">[↖->#aa]</small>}}}
<img12005|alt=références>  [<small style="color:grey;vertical-align:top;">pipeline</small>->http://programmer.spip.net/Qu-est-ce-qu-un-pipeline]


Cette astuce fait suite à [une discussion tenue dans le forum public SPIP->http://forum.spip.net/fr_213485.html].


Comme indiqué dans la documentation technique de SPIP, on peut [utiliser un pipeline sans avoir à passer systématiquement par la création d'un plugin->http://programmer.spip.net/Qu-est-ce-qu-un-pipeline].


Après un rapide coup d'oeil dans dans [la liste des pipelines->http://programmer.spip.net/-Liste-des-pipelines-], nous nous arrêtons sur le pipeline [pre_insertion->http://programmer.spip.net/pre_insertion] qui permet d'agir au moment de l'insertion d'un nouvel élément éditorial.


Suivant les indications mentionnées plus haut, on ajoute ceci dans le fichier config/mes_options.php :
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InBocCBzYW5zX3RlbGVjaGFyZ2VtZW50Ij48Y29kZT4vLyBVdGlsaXNhdGlvbiBkdSBwaXBlbGluZSBwcmVfaW5zZXJ0aW9uIHF1aSB2YSBleMOpY3V0ZXIgbGEgZm9uY3Rpb24gbWFfZm9uY3Rpb25fcHJlX2luc2VydGlvbg0KJEdMT0JBTFNbJ3NwaXBfcGlwZWxpbmUnXVsncHJlX2luc2VydGlvbiddIC49ICZxdW90O3xtYV9mb25jdGlvbl9wcmVfaW5zZXJ0aW9uJnF1b3Q7OwoKCi8vIEZvbmN0aW9uIHF1aSBwYXNzZSBsZSBzdGF0dXQgw6AgbCfDqXRhdCBwdWJsacOpIGRlcyBhcnRpY2xlcyBkZSBsYSBydWJyaXF1ZSBYIGF1IG1vbWVudCBkZSBsJ2luc2VydGlvbg0KZnVuY3Rpb24gbWFfZm9uY3Rpb25fcHJlX2luc2VydGlvbigkZmx1eCkgew0KICAgIGlmICgkZmx1eFsnYXJncyddWyd0YWJsZSddPT0nc3BpcF9hcnRpY2xlcycgJmFtcDsmYW1wOyAkZmx1eFsnZGF0YSddWydpZF9ydWJyaXF1ZSddID09IFgpIHsNCiAgICAgICAgJGZsdXhbJ2RhdGEnXVsnc3RhdHV0J10gPSAncHVibGllJzsNCiAgICB9DQogICAgcmV0dXJuICRmbHV4Ow0KfTwvY29kZT48L3ByZT48L2Rpdj4="></div>


On peut bien entendu adapter le contenu de la fonction pour appliquer ce traitement à tout type d'objet éditorial, ainsi que modifier un autre champ que le champ statut.


Pour finir, le simple fait de se rendre sur la page de gestion des plugins, dans l'espace privé, va rafraîchir le cache pipeline (fichier tmp/cache/charger_pipelines.php). Les modifications effectuées ci-dessus seront alors prises en compte.


----[a20<-]


{{{20- Automatiser un traitement particulier sur la balise #TEXTE des articles <small style="color:grey;">[↖->#aa]</small>}}}
<img12005|alt=références>  [<small style="color:grey;vertical-align:top;">traitements automatiques des balises</small>->http://programmer3.spip.net/Traitements-automatiques-des] [<small style="color:grey;vertical-align:top;">fichier mes_options.php</small>->http://www.spip.net/fr_article4654.html]


On souhaite cibler la balise #TEXTE des articles pour lui appliquer un traitement particulier avant affichage dans une boucle :


Dans le fichier config/mes_options.php, on ajoute :
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InBocCBzYW5zX3RlbGVjaGFyZ2VtZW50Ij48Y29kZT4kdGFibGVfZGVzX3RyYWl0ZW1lbnRzWydURVhURSddWydhcnRpY2xlcyddID0gJ21hZm9uY3Rpb24oJXMpJzsNCmZ1bmN0aW9uIG1hZm9uY3Rpb24oJHRleHRlKSB7DQogICAgIC8vIHJham91dGVyIGljaSBsZSB0cmFpdGVtZW50IHNvdWhhaXTDqQ0KICAgIC8vIC4uLg0KICAgIC8vIC4uLg0KICAgIHJldHVybiAkdGV4dGU7DQp9PC9jb2RlPjwvcHJlPjwvZGl2Pg=="></div>


Selon ses propres besoins, on peut bien évidement utiliser une fonction existante de spip (un filtre par exemple), au lieu de déclarer sa propre fonction.


Comme pour les pipelines, il est nécessaire d'aller dans l'espace privé -> gestion des plugins pour rafraîchir le cache.
----[a21<-]


{{{21- Remplir un tableau de tableaux avec une boucle <small style="color:grey;">[->#aa]</small>}}}
<img12005|alt=références>  [<small style="color:grey;vertical-align:top;">balise #ARRAY</small>->http://www.spip.net/fr_article4009.html] [<small style="color:grey;vertical-align:top;">filtre |table_valeur</small>->http://www.spip.net/fr_article4572.html]


On peut vouloir utiliser les résultats retournés par une BOUCLE en-dehors de cette BOUCLE (dans un tout autre endroit du squelette). L'exemple ci-dessous permet de disposer d'un tableau (array php) dont on pourra extraire les informations souhaitées.


Déclarer le tableau et le remplir avec une boucle :
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+PGNvZGU+I1NFVHt0YWIsICNBUlJBWX0NCiZsdDtCT1VDTEVfdShBUlRJQ0xFUykge3RvdXR9Jmd0Ow0KICAgWygjU0VUe3RhYiwgI0dFVHt0YWJ9fHB1c2h7I0xJU1RFeyNJRF9BUlRJQ0xFLCAjVElUUkV9fX0pXQ0KJmx0Oy9CT1VDTEVfdSZndDsNCiAgIDwvY29kZT48L3ByZT48L2Rpdj4="></div>
À ce stade, nous avons un tableau peuplé ainsi :
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+PGNvZGU+Ky0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tKw0KISAgISAgISAxICAgICAgICAgICAgICAgICENCiEgICAhIDEgISB0aXRyZSBhcnRpY2xlIDEgICENCistLS0rLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSsNCiEgMSAhICAhIDIgICAgICAgICAgICAgICAgIQ0KISAgICEgMSAhIHRpdHJlIGFydGljbGUgMiAgIQ0KKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLS0tKw0KISAyICEgICEgMyAgICAgICAgICAgICAgICAhDQohICAgISAxICEgdGl0cmUgYXJ0aWNsZSA0ICAhDQorLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0rDQogICA8L2NvZGU+PC9wcmU+PC9kaXY+"></div>
Utiliser les informations de ce tableau :
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+PGNvZGU+WygjR0VUe3RhYn18dGFibGVfdmFsZXVyezEvMX0pXSAgYWZmaWNoZXJhIMKrdGl0cmUgYXJ0aWNsZSAywrsNClsoI0dFVHt0YWJ9fHRhYmxlX3ZhbGV1cnsyLzB9KV0gIGFmZmljaGVyYSDCqzPCuzwvY29kZT48L3ByZT48L2Rpdj4="></div>


----[a22<-]


{{{22- Présenter un usage de la balise <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+Jmx0O2NvZGUmZ3Q7PC9jb2RlPg=="></span> à l'intérieur même de balises <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+Jmx0O2NvZGUmZ3Q7PC9jb2RlPg=="></span> <small style="color:grey;">[↖->#aa]</small>}}}


{{pour afficher ceci :}}
bla bla
<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+Jmx0O2NvZGUmZ3Q7IC4uLiAmbHQ7LzwvY29kZT4="></span><span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+Y29kZSZndDs8L2NvZGU+"></span>
bla bla
{{il faudra saisir ceci :}}
<div class="base64" title="PHRleHRhcmVhICBjb2xzPSI0MCIgcm93cz0iNCI+DQpibGEgYmxhDQo8Y29kZT48Y29kZT4gLi4uIDwvPC9jb2RlPjxjb2RlPmNvZGU+PC9jb2RlPg0KYmxhIGJsYQ0KPC90ZXh0YXJlYT4="></div>


{{et pour afficher ceci :}}
bla bla
<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ICZuYnNwOyZsdDtwcmUmZ3Q7PC9jb2RlPg=="></span>
<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ICZuYnNwOyAmbmJzcDsmbHQ7Y29kZSZndDs8L2NvZGU+"></span>
<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ICZuYnNwOyAmbmJzcDsgJm5ic3A7JGZvbyA9ICdiYXInOzwvY29kZT4="></span>
<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ICZuYnNwOyAmbmJzcDsgJm5ic3A7JGJhciA9ICZxdW90O2ZvbyZxdW90Ozs8L2NvZGU+"></span>
<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ICZuYnNwOyAmbmJzcDsmbHQ7L2NvZGU8L2NvZGU+"></span><span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+Jmd0OzwvY29kZT4="></span>
<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ICZuYnNwOyZsdDsvcHJlJmd0OzwvY29kZT4="></span>
bla bla
{{il faudra saisir ceci :}}
<div class="base64" title="PHRleHRhcmVhICBjb2xzPSI0MCIgcm93cz0iOSI+DQpibGEgYmxhDQo8Y29kZT4gIDxwcmU+PC9jb2RlPg0KPGNvZGU+ICAgIDxjb2RlPjwvY29kZT4NCjxjb2RlPiAgICAgICRmb28gPSAnYmFyJzs8L2NvZGU+DQo8Y29kZT4gICAgICAkYmFyID0gImZvbyI7PC9jb2RlPg0KPGNvZGU+ICAgIDwvY29kZTwvY29kZT48Y29kZT4+PC9jb2RlPg0KPGNvZGU+ICA8L3ByZT48L2NvZGU+DQpibGEgYmxhDQo8L3RleHRhcmVhPg=="></div>


----[a23<-]


{{{23- Utiliser la boucle DATA pour afficher une liste d'albums Flickr <small style="color:grey;">[->#aa]</small>}}}
<img12005|alt=références>  [<small style="color:grey;vertical-align:top;">boucle (DATA)</small>->http://www.spip.net/fr_article5443.html]


Petite variante de manipulation de l'API Flickr via la boucle DATA http://spip-love-opendata.nursit.com/xml.
Mission : récupérer une liste d'albums d'un utilisateur Flickr.


La gestion des clés se fait par l'API Garden de Flickr :
http://www.flickr.com/services/api/


On définit la méthode API pour récupérer les albums: http://www.flickr.com/services/api/flickr.galleries.getPhotos.html
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+PGNvZGU+WygjU0VUe2ZsaWNrcl9tZXRob2QsZmxpY2tyLnBob3Rvc2V0cy5nZXRMaXN0fSldPC9jb2RlPjwvcHJlPjwvZGl2Pg=="></div>


Puis le format, JSON avec le paramètre nojsoncallback pour un JSON brut, sans enveloppe de fonction.
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+PGNvZGU+WygjU0VUe2ZsaWNrcl9mb3JtYXQsZm9ybWF0PWpzb24mYW1wO25vanNvbmNhbGxiYWNrPTF9KV08L2NvZGU+PC9wcmU+PC9kaXY+"></div>


L'URL REST (avec l'api_key et user_id passées en constantes dans mes_options.php)
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+PGNvZGU+WygjU0VUe2ZsaWNrcl91cmwsIGh0dHA6Ly9hcGkuZmxpY2tyLmNvbS9zZXJ2aWNlcy9yZXN0Lz9hcGlfa2V5PSNFVkFMe2ZsaWNrcl9rZXl9JmFtcDt1c2VyX2lkPSNFVkFMe2ZsaWNrcl91c2VyaWR9JmFtcDttZXRob2Q9I0dFVHtmbGlja3JfbWV0aG9kfSZhbXA7I0dFVHtmbGlja3JfZm9ybWF0fX0pXTwvY29kZT48L3ByZT48L2Rpdj4="></div>


Et on boucle : 
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+PGNvZGU+Jmx0O0JfZmxpY2tySnNvbiZndDsNCiZsdDt1bCZndDsNCiZsdDtCT1VDTEVfZmxpY2tySnNvbihEQVRBKQ0KCXtzb3VyY2UganNvbiwgI0dFVHtmbGlja3JfdXJsfX0ge2RhdGFwYXRoIHBob3Rvc2V0cy9waG90b3NldH17MCw2fSZndDsNCglbKCNTRVR7ZmxpY2tyX2ltZywgJmx0O2ltZyBzcmM9JnF1b3Q7aHR0cDovL2Zhcm0jVkFMRVVSe2Zhcm19LnN0YXRpYy5mbGlja3IuY29tLyNWQUxFVVJ7c2VydmVyfS8NCgkJI1ZBTEVVUntwcmltYXJ5fV8jVkFMRVVSe3NlY3JldH1fcS5qcGcmcXVvdDsgYWx0PSZxdW90O2ZsaWNrciZxdW90OyZndDt9ICldDQoJJmx0O2xpJmd0Ow0KCQkmbHQ7YSBocmVmPSZxdW90O2h0dHA6Ly93d3cuZmxpY2tyLmNvbS9waG90b3MvI0VWQUx7ZmxpY2tyX3VzZXJpZH0vc2V0cy8jVkFMRVVSe2lkfSZxdW90OyB0aXRsZT0mcXVvdDtWb2lyIGltYWdlIC4uJnF1b3Q7Jmd0Ow0KCQkJJmx0O2RpdiZndDsNCgkJCVsoI0dFVHtmbGlja3JfaW1nfXxpbWFnZV9yZWR1aXJlezEwMH0pXQ0KCQkJJmx0Oy9kaXYmZ3Q7DQoJCQkmbHQ7ZGl2Jmd0OwkJCQkJCQkJCQkNCgkJCSZsdDtoMyZndDtbKCNWQUxFVVJ7dGl0bGUvX2NvbnRlbnR9KV0mbHQ7L2gzJmd0Ow0KCQkJWyZsdDtwJmd0OygjVkFMRVVSe2Rlc2NyaXB0aW9uL19jb250ZW50fSkmbHQ7YnImZ3Q7DQoJCQkJUGhvdG9zIDogI1ZBTEVVUntwaG90b3N9Jmx0Oy9wJmd0O10NCgkJCSZsdDsvZGl2Jmd0OwkNCgkJJmx0Oy9hJmd0Ow0KCSZsdDsvbGkmZ3Q7DQombHQ7L0JPVUNMRV9mbGlja3JKc29uJmd0OwkJCQkJCQkJDQombHQ7L3VsJmd0Ow0KJmx0Oy9CX2ZsaWNrckpzb24mZ3Q7Jmx0Oy8vQl9mbGlja3JKc29uJmd0OzwvY29kZT48L3ByZT48L2Rpdj4="></div>


----[a24<-]
{{{24- Ne boucler sur la table sql d'un plugin que si ce plugin est installé et activé. <small style="color:grey;">[↖->#aa]</small>}}}
<img12005|alt=références>  [<small style="color:grey;vertical-align:top;">critère <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+e3Np4oCmfTwvY29kZT4="></span></small>->http://www.spip.net/fr_article5535.html] [<small style="color:grey;vertical-align:top;">table absente</small>->http://programmer.spip.net/Boucle-sur-une-table-absente]


Une particularité du compilateur de SPIP est que l'on ne peux pas lui demander d’évaluer les critères {avant} de savoir sur quelle table ils portent. Ainsi :
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+PGNvZGU+Jmx0O0JPVUNMRV9oKE1PTl9QTFVHSU4pIHtzaSAjUExVR0lOe21vbl9wbHVnaW59fSZndDs8L2NvZGU+PC9wcmU+PC9kaXY+"></div> retournera l'erreur <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+VW5rbm93biBTUUwgdGFibGUgTU9OX1BMVUdJTjwvY29kZT4="></span> si mon_plugin n'est pas installé et activé.
Pour conditionner l'exécution d'un boucle à la présence d'un plugin, il faut donc écrire :
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+PGNvZGU+Jmx0O0JPVUNMRV9oKE1PTl9QTFVHSU4gPykge3NpICNQTFVHSU57bW9uX3BsdWdpbn19Jmd0OzwvY29kZT48L3ByZT48L2Rpdj4="></div> Dans ce cas,  si mon_plugin est actif, alors sa table existe ; s'il est inactif, alors le <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ID8gPC9jb2RlPg=="></span> empêchera l'exécution de la boucle, puisque sa table est considérée comme n'existant pas.


----[a25<-]


[adminrestcomplet<-]
{{{25- Avertir un administrateur restreint qu'il administre telle ou telle rubrique. <small style="color:grey;">[↖->#aa]</small>}}}
<img12005|alt=références>  [<small style="color:grey;vertical-align:top;">balise #AUTORISER</small>->http://www.spip.net/fr_article3896.html]


On peut vouloir afficher sur le site public des informations concernant une rubrique qu'aux administrateurs (restreints ou complets) qui «gèrent» cette rubrique.
Pour cela nous testerons l'autorisation de publier dans cette rubrique :
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+PGNvZGU+WygjQVVUT1JJU0VSe3B1YmxpZXJkYW5zLCBydWJyaXF1ZSwgI0lEX1JVQlJJUVVFfGludHZhbHxzaW5vbnstMX0sICNTRVNTSU9Oe2lkX2F1dGV1cn19KSANCmNlY2kgbmUgcydhZmZpY2hlcmEgcXVlIHNpIGxlIHZpc2l0ZXVyIGxvZ2d1w6kgZXN0IHNvaXQgYWRtaW5pc3RyYXRldXIgY29tcGxldCwgc29pdCBhZG1pbmlzdHJhdGV1ciByZXN0cmVpbnQgZGUgY2V0dGUgcnVicmlxdWUuXTwvY29kZT48L3ByZT48L2Rpdj4="></div>


{{{Autre exemple d'utilisation :}}}


Nous aurons besoin de 2 squelettes d'INCLURE :
-* squelettes/skel_pour_complet.html
-* squelettes/skel_pour_restreint.html


L'appel se fera depuis un squelette avec : 
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+PGNvZGU+WygjQVVUT1JJU0VSe3B1YmxpZXJkYW5zLCBydWJyaXF1ZSwgI0lEX1JVQlJJUVVFfGludHZhbHxzaW5vbnstMX0sICNTRVNTSU9Oe2lkX2F1dGV1cn19KSZsdDtJTkNMVVJFe2ZvbmQ9c2tlbF9wb3VyXyNBVVRPUklTRVJ7Y29uZmlndXJlcn18P3tjb21wbGV0LCByZXN0cmVpbnR9fSZndDtdPC9jb2RlPjwvcHJlPjwvZGl2Pg=="></div>


{explications :}


d'abord on teste si l'auteur loggué <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I1NFU1NJT057aWRfYXV0ZXVyfTwvY29kZT4="></span> a le droit de publier dans la rubrique <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0lEX1JVQlJJUVVFPC9jb2RlPg=="></span>.
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+PGNvZGU+I0FVVE9SSVNFUntwdWJsaWVyZGFucywgcnVicmlxdWUsICNJRF9SVUJSSVFVRXxpbnR2YWx8c2lub257LTF9LCAjU0VTU0lPTntpZF9hdXRldXJ9fTwvY29kZT48L3ByZT48L2Rpdj4="></div>


dans le test précédent, on récupère l'<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+SURfUlVCUklRVUU8L2NvZGU+"></span> de l'environnement (soit il est déclaré dans une BOUCLE, soit il est passé en URL).
si <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0lEX1JVQlJJUVVFPC9jb2RlPg=="></span> n'existe pas ou n'est pas un entier, alors on lui affecte la valeur -1 (valeur qui ne peut exister comme identifiant de rubrique).
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+PGNvZGU+I0lEX1JVQlJJUVVFfGludHZhbHxzaW5vbnstMX08L2NvZGU+PC9wcmU+PC9kaXY+"></div>


à ce stade, on sait que l'auteur est administrateur.
on teste alors s'il a le droit de configurer le site. si oui, c'est un administrateur complet, si non c'est un administrateur restreint.
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+PGNvZGU+I0FVVE9SSVNFUntjb25maWd1cmVyfXw/e2NvbXBsZXQsIHJlc3RyZWludH08L2NvZGU+PC9wcmU+PC9kaXY+"></div>


il ne reste qu'à appeler le bon squelette d'INCLURE selon les droits de l'administrateur reconnu.
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+PGNvZGU+Jmx0O0lOQ0xVUkV7Zm9uZD1za2VsX3BvdXJfI0FVVE9SSVNFUntjb25maWd1cmVyfXw/e2NvbXBsZXQsIHJlc3RyZWludH19Jmd0OzwvY29kZT48L3ByZT48L2Rpdj4="></div>


----[a26<-]


{{{26- Un critère de tri alphabétique qui ne prend pas en compte les num titre <small style="color:grey;">[↖->#a26]</small>}}}
<img12005|alt=références>  [<small style="color:grey;vertical-align:top;">critère <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+e3BhciAuLi59PC9jb2RlPg=="></span></small>->http://www.spip.net/fr_article5531.html] [<small style="color:grey;vertical-align:top;">fichier mes_options.php</small>->http://www.spip.net/fr_article4654.html]


C'est une demande récurrente sur les listes et les forums : pouvoir ordonner alphabétiquement une liste d'objets par leurs titres {sans tenir compte des  préfixes numérotés qui peuvent leur avoir été associés}.


actuellement le critère <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+e3BhciBudW0gdGl0cmV9PC9jb2RlPg=="></span> affiche :
-* Abracadabra
-* C'est la vie, c'est la vie...
-* 02. Au secours !
-* 08. Du bo, du bon, du bonnet.
-* 99. À la claire fontaine


le critère <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+e3BhciB0aXRyZX08L2NvZGU+"></span>, lui, affiche :
-* 02. Au secours !
-* 08. Du bo, du bon, du bonnet.
-* 99. À la claire fontaine
-* Abracadabra
-* C'est la vie, c'est la vie...


voir également <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+e3BhciBzaW51bSB0aXRyZSwgbnVtIHRpdHJlLCB0aXRyZX08L2NvZGU+"></span> à partir de [SPIP 3.2->https://www.spip.net/fr_article6399.html]


notre nouveau critère {{<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+e3BhciBhbHBoYSB0aXRyZX08L2NvZGU+"></span>}} devra afficher :
-* 99. À la claire fontaine
-* Abracadabra
-* 02. Au secours !
-* C'est la vie, c'est la vie...
-* 08. Du bo, du bon, du bonnet.


<small>dans {mes_options.php} :</small>
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InBocCBzYW5zX3RlbGVjaGFyZ2VtZW50Ij48Y29kZT4vKg0KICogc3VyY2hhcmdlIGRlIGxhIGZvbmN0aW9uIGNyaXRlcmVfcGFyX2Rpc3QNCiAqIHBvdXIgcG91dm9pciBhcHBlbGVyIHVuIGNyaXTDqHJlIGRlIHRyaSBzcMOpY2lmaXF1ZQ0KICovDQpmdW5jdGlvbiBjcml0ZXJlX3BhcigkaWRiLCAmYW1wOyRib3VjbGVzLCAkY3JpdCkgew0KICBpZiAoaXNzZXQoJGNyaXQtJmd0O3BhcmFtWzBdWzBdLSZndDt0ZXh0ZSkgJmFtcDsmYW1wOyBwcmVnX21hdGNoKCZxdW90OyxeYWxwaGEgKC4qKSQsbSZxdW90OywgJGNyaXQtJmd0O3BhcmFtWzBdWzBdLSZndDt0ZXh0ZSwgJG0pKSB7DQogICAgcmV0dXJuIGNyaXRlcmVfcGFyX2FscGhhKCRpZGIsICRib3VjbGVzLCAkY3JpdCk7DQogIH0NCiAgcmV0dXJuIGNyaXRlcmVfcGFyaW52ZXJzZSgkaWRiLCAkYm91Y2xlcywgJGNyaXQpOw0KfQoKCi8qDQogKiBjcml0w6hyZSBkZSB0cmkgYWxwaGFiw6l0aXF1ZSBuZSB0ZW5hbnQgcGFzIGNvbXB0ZQ0KICogZGVzIMOpdmVudHVlbHMgcHLDqWZpeGVzIG51bcOpcm90w6lzDQogKg0KICogcyd1dGlsaXNlIGFpbnNpIDoNCiAqIHtwYXIgYWxwaGEgdGl0cmV9IG91IGJpZW4ge3BhciBhbHBoYSAjRU5We3RydWN9fHNpbm9ue3RpdHJlfX0NCiAqLw0KZnVuY3Rpb24gY3JpdGVyZV9wYXJfYWxwaGEoJGlkYiwgJmFtcDskYm91Y2xlcywgJGNyaXQsICRzZW5zID0gJycpIHsNCiAgJGJvdWNsZSA9ICZhbXA7JGJvdWNsZXNbJGlkYl07DQogIC8vIHtwYXIgYWxwaGEgLi4ufSBvdSB7IXBhciBhbHBoYSAuLi59DQogICRzZW5zID0gJGNyaXQtJmd0O25vdCA/ICZxdW90OyAuICcgREVTQycmcXVvdDsgOiAmcXVvdDsmcXVvdDs7CgoKJHBhciA9IGFycmF5X3NoaWZ0KCRjcml0LSZndDtwYXJhbVswXSk7DQogICRwYXIgPSAkcGFyLSZndDt0ZXh0ZTsNCiAgLy8gdHlwZSBkZSBjb25uZXhpb24gKG1lcmNpIGNlcmRpYyAhKQ0KICAkY29ubmV4aW9uID0gc3BpcF9jb25uZWN0KCk7DQogICRzcWxpdGUgPSBzdHJpc3RyKCRjb25uZXhpb25bJ3R5cGUnXSwgJnF1b3Q7c3FsaXRlJnF1b3Q7KSA/IHRydWUgOiBmYWxzZTsKCgovLyB0ZXN0IGTDqWrDoCBmYWl0IHBsdXMgaGF1dCwgbWFpcyBwZXJtZXQgZGUgcsOpY3Vww6lyZXIgJGNoYW1wDQogIGlmIChwcmVnX21hdGNoKCZxdW90OyxeYWxwaGEgKC4qKSQsbSZxdW90OywgJHBhciwgJG0pKSB7DQogICAgJGNoYW1wID0gdHJpbSgkbVsxXSk7DQogICAgJGNsZSA9ICRib3VjbGUtJmd0O2lkX3RhYmxlIC4nLic7CgoKLy8gY2FzIHNpbXBsZSA6IHtwYXIgYWxwaGEgdGl0cmV9DQogICAgLy8gYmFzZSBzcWxpdGUNCiAgICBpZiAoJHNxbGl0ZSkgew0KICAgICAgJHRleHRlID0gJ0xUUklNKFJFUExBQ0UoJy4gJGNsZS4kY2hhbXAgLicsICgwKycuICRjbGUuJGNoYW1wIC4nKXx8XCcuIFwnLCBcJ1wnKSwgKSc7DQogICAgfQ0KICAgIC8vIGJhc2UgbXlzcWwNCiAgICBlbHNlIHsNCiAgICAgICR0ZXh0ZSA9ICdUUklNKExFQURJTkcgXCdcJyBGUk9NKFJFUExBQ0UoJy4gJGNsZS4kY2hhbXAgLicsIENPTkNBVCgwKycuICRjbGUuJGNoYW1wIC4nLCBcJy4gXCcpLCBcJ1wnKSkpJzsNCiAgICB9CgoKLy8gYmFsaXNlIHBhc3PDqWUgZW4gYXJndW1lbnQgOiB7cGFyIGFscGhhICNFTlZ7dHJ1Y318c2lub257dGl0cmV9fQ0KICAgICRzdWl0ZSA9IGNhbGN1bGVyX2xpc3RlKCRjcml0LSZndDtwYXJhbVswXSwgYXJyYXkoKSwgJGJvdWNsZXMsICRib3VjbGUtJmd0O2lkX3BhcmVudCk7DQogICAgaWYgKCRzdWl0ZSAhPT0gJnF1b3Q7JycmcXVvdDspIHsNCiAgICAgIC8vIGJhc2Ugc3FsaXRlDQogICAgICBpZiAoJHNxbGl0ZSkgew0KICAgICAgICAkdGV4dGUgPSAmcXVvdDtcJnF1b3Q7LigoXCR4ID0gJHN1aXRlKSA/ICgnTFRSSU0oUkVQTEFDRSgnLiBcJHggLicsICgwKycuIFwkeCAuJyl8fFwnLiBcJywgXCdcJyksICknKSA6ICcwJykmcXVvdDsuJnF1b3Q7LlwmcXVvdDsmcXVvdDs7DQogICAgICB9DQogICAgICAvLyBiYXNlIG15c3FsDQogICAgICBlbHNlIHsNCiAgICAgICAgJHRleHRlID0gJnF1b3Q7XCZxdW90Oy4oKFwkeCA9ICRzdWl0ZSkgPyAoJ1RSSU0oTEVBRElORyBcJ1wnIEZST00oUkVQTEFDRSgnLlwkeC4nLCBDT05DQVQoMCsnLlwkeC4nLCBcJy4gXCcpLCBcJ1wnKSkpJykgOiAnMCcpJnF1b3Q7LiZxdW90Oy5cJnF1b3Q7JnF1b3Q7Ow0KICAgICAgfQ0KICAgIH0KCgovLyBub21tZXIgbCdhbGlhcyBkZSBjaGFtcA0KICAgICRhcyA9ICdhbHBoYScuKCRib3VjbGUtJmd0O29yZGVyID8gY291bnQoJGJvdWNsZS0mZ3Q7b3JkZXIpIDogJnF1b3Q7JnF1b3Q7KTsNCiAgICAkYm91Y2xlLSZndDtzZWxlY3RbXSA9ICR0ZXh0ZS4mcXVvdDsgQVMgJGFzJnF1b3Q7Ow0KICAgIGlmICgkc3FsaXRlKSB7DQogICAgICAkb3JkZXIgPSAmcXVvdDsnJGFzIENPTExBVEUgTk9DQVNFJyZxdW90OzsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICAkb3JkZXIgPSAmcXVvdDsnJGFzJyZxdW90OzsNCiAgICB9DQogIH0KCgovLyBjb25zdHJ1aXJlIGxlIG9yZGVyIGJ5DQogICR0ID0gJG9yZGVyLiRzZW5zOw0KICBpZiAocHJlZ19tYXRjaCgmcXVvdDsvXiguKiknXHMqXC5ccyonKFteJ10qJykkLyZxdW90OywgJHQsICRyKSkgew0KICAgICR0ID0gJHJbMV0uJHJbMl07DQogIH0NCiAgJGJvdWNsZS0mZ3Q7b3JkZXJbXSA9ICR0Ow0KfTwvY29kZT48L3ByZT48L2Rpdj4="></div>


----[a27<-]
{{{27- Découper un texte en colonnes selon sa taille <small style="color:grey;">[↖->#a27]</small>}}}
<img12005|alt=références>  [<small style="color:grey;vertical-align:top;">balises #SET et #GET</small>->http://www.spip.net/fr_article3990.html]  [<small style="color:grey;vertical-align:top;">filtre |couper</small>->http://www.spip.net/fr_article4275.html]  [<small style="color:grey;vertical-align:top;">filtre |replace</small>->http://www.spip.net/fr_article4309.html]


Nous voulons afficher un texte en le répartissant sur 2 colonnes, mais s'il est très long (par exemple + de 6 000 caractères) nous voudrions afficher sa première moitié sur 2 colonnes côte-à-côte, puis sa seconde moitié au-dessous, toujours sur 2 colonnes.
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InRleHRlIHNhbnNfdGVsZWNoYXJnZW1lbnQiPjxjb2RlPnNpIHRleHRlIGNvdXJ0ICAgIHNpIHRleHRlIGxvbmcKCgorLS0tLS0rKy0tLS0tKyAgICstLS0tLSsrLS0tLS0rDQp8ICAgICB8fCAgICAgfCAgIHwgICAgIHx8ICAgICB8DQp8ICAgICB8fCAgICAgfCAgIHwgICAgIHx8ICAgICB8DQp8ICAxICB8fCAgMiAgfCAgIHwgIDEgIHx8ICAyICB8DQp8ICAgICB8fCAgICAgfCAgIHwgICAgIHx8ICAgICB8DQorLS0tLS0rKy0tLS0tKyAgICstLS0tLSsrLS0tLS0rDQogICAgICAgICAgICAgICAgICB8ICAgICB8fCAgICAgfA0KICAgICAgICAgICAgICAgICAgfCAgICAgfHwgICAgIHwNCiAgICAgICAgICAgICAgICAgIHwgIDMgIHx8ICA0ICB8DQogICAgICAgICAgICAgICAgICB8ICAgICB8fCAgICAgfA0KICAgICAgICAgICAgICAgICAgKy0tLS0tKystLS0tLSs8L2NvZGU+PC9wcmU+PC9kaXY+"></div>
Nous commençons par compter le nombre de caractères de notre texte, ce qui nous permet de choisir un affichage en 2 colonnes ou en 2 fois 2 colonnes.
Si le texte n'est pas trop long, nous utilisons uniquement les propriétés css3 de colonnage pour l'afficher.
Sinon, nous préparons 2 blocs :
- la première moitié du texte en utilisant le filtre <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+fGNvdXBlcjwvY29kZT4="></span> sur la demi longueur du texte ;
- la seconde moitié (la fin donc) en supprimant du texte sa première moitié
- Puis nous utilisons css3 pour l'affichage de chacune des moitiés.
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9J2NzcyBzYW5zX3RlbGVjaGFyZ2VtZW50Jz48Y29kZT4mbHQ7c3R5bGUgdHlwZT0mcXVvdDt0ZXh0L2NzcyZxdW90OyZndDsNCi5kZXV4X2NvbCB7DQogIC1tb3otY29sdW1uLWNvdW50OiAyOw0KICAtbW96LWNvbHVtbi1nYXA6IDJlbTsNCiAgLW1vei1jb2x1bW4tcnVsZTogMXB4IGRvdHRlZCAjZTdlN2U3Ow0KICAtd2Via2l0LWNvbHVtbi1jb3VudDogMjsNCiAgLXdlYmtpdC1jb2x1bW4tZ2FwOiAyZW07DQogIC13ZWJraXQtY29sdW1uLXJ1bGU6IDFweCBkb3R0ZWQgI2U3ZTdlNzsNCiAgbWFyZ2luLWJvdHRvbTogMmVtOw0KfQ0KJmx0Oy9zdHlsZSZndDs8L2NvZGU+PC9wcmU+PC9kaXY+"></div>
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9J3NwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCc+PGNvZGU+Jmx0O0JPVUNMRV9jb2woQVJUSUNMRVMpe2lkX2FydGljbGV9Jmd0Ow0KWygjVEVYVEV8c3RybGVufCZndDt7NjAwMH18bm9uKQ0KICAmbHQ7ZGl2IGNsYXNzPSZxdW90O2RldXhfY29sJnF1b3Q7Jmd0Ow0KICAjVEVYVEUNCiAgJmx0Oy9kaXYmZ3Q7DQpdDQpbKCNURVhURXxzdHJsZW58Jmd0O3s2MDAwfXxvdWkpDQogICNTRVR7dGV4dDEsICNURVhURXxjb3VwZXJ7I1RFWFRFfHN0cmxlbnxkaXZ7Mn0sICcnfX0NCiAgI1NFVHt0ZXh0MiwgI1RFWFRFKnxyZXBsYWNleyNURVhURSp8Y291cGVyeyNURVhURXxzdHJsZW58ZGl2ezJ9LCAnJ30sICcnfX0NCiAgJmx0O2RpdiBjbGFzcz0mcXVvdDtkZXV4X2NvbCZxdW90OyZndDsNCiAgWygjR0VUe3RleHQxfXxwcm9wcmUpXQ0KICAmbHQ7L2RpdiZndDsNCiAgJmx0O2RpdiBjbGFzcz0mcXVvdDtkZXV4X2NvbCZxdW90OyZndDsNCiAgWygjR0VUe3RleHQyfXxwcm9wcmUpXQ0KICAmbHQ7L2RpdiZndDsNCl0NCiZsdDsvQk9VQ0xFX2NvbCZndDs8L2NvZGU+PC9wcmU+PC9kaXY+"></div>


----[a28<-]
{{{28- Se passer du filtre <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+IHxfVCA8L2NvZGU+"></span> dans les squelettes <small style="color:grey;">[↖->#a28]</small>}}}
<img12005|alt=références>  [<small style="color:grey;vertical-align:top;">balise #ENV</small>->http://www.spip.net/fr_article4014.html]  [<small style="color:grey;vertical-align:top;">les balises de langue</small>->http://www.spip.net/fr_article2128.html#fichiers_lang]


depuis spip 2.1.23 et 3..13 (commits 
[ 20035->http://core.spip.org/projects/spip/repository/revisions/20035], [20775->http://core.spip.org/projects/spip/repository/revisions/20775] et [20900->http://core.spip.org/projects/spip/repository/revisions/20900]) il est désormais possible d’utiliser les balises de langue ainsi :


avec en {url} :<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ID9ub21fbW9kdWxlPXBldGl0aW9ucyZhbXA7Y2xlX2l0ZW09Zm9ybV9wZXRfZW52b2lfbWFpbF9jb25maXJtYXRpb248L2NvZGU+"></span>
et dans le {squelette} :<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ICNTRVR7YXJnLCB0b3RvQHRpdGkuY29tfTwvY29kZT4="></span>


{{ces 5 écritures sont fonctionnelles}} :<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+PGNvZGU+Jmx0OzpwZXRpdGlvbnM6Zm9ybV9wZXRfZW52b2lfbWFpbF9jb25maXJtYXRpb257ZW1haWw9dG90b0B0aXRpLmNvbX06Jmd0OwoKCiZsdDs6cGV0aXRpb25zOmZvcm1fcGV0X2Vudm9pX21haWxfY29uZmlybWF0aW9ue2VtYWlsPSNHRVR7YXJnfX06Jmd0OwoKCiZsdDs6cGV0aXRpb25zOns9I0VOVntjbGVfaXRlbX0sIGVtYWlsPSNHRVR7YXJnfX06Jmd0OwoKCiZsdDs6ez0jRU5We25vbV9tb2R1bGV9OmZvcm1fcGV0X2Vudm9pX21haWxfY29uZmlybWF0aW9uLCBlbWFpbD0jR0VUe2FyZ319OiZndDsKCgombHQ7Ons9I0VOVntub21fbW9kdWxlfTojRU5We2NsZV9pdGVtfSwgZW1haWw9I0dFVHthcmd9fTomZ3Q7PC9jb2RlPjwvcHJlPjwvZGl2Pg=="></div>
elles afficheront toutes :
<quote>Un courrier électronique de confirmation vient d’être envoyé à toto@titi.com. Vous devrez visiter l’adresse web mentionnée dans ce courrier pour valider votre signature.</quote>


cette nouvelle syntaxe permet donc de se passer de :<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ICZuYnNwO1soI1ZBTHsjRU5We2V4ZWN9fXxjb25jYXR7JzpsYWJlbF8nLCNWQUxFVVJ9fF9UKV08L2NvZGU+"></span>
pour un bien plus simple :<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ICZuYnNwOyZsdDs6ez0jRU5We2V4ZWN9OmxhYmVsXyNWQUxFVVJ9OiZndDs8L2NvZGU+"></span>


on s’affranchit ainsi (au coût certes d’une nouvelle gymnastique syntaxique) de l’usage du filtre {{<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+fF9UPC9jb2RlPg=="></span>}} dans les squelettes.


On peut noter le cas suivant pour afficher une chaîne de langue depuis une balise quelconque : 
<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+Jmx0Ozp7PWZpY2hpZXI6I0JBTElTRX06Jmd0OzwvY29kZT4="></span>


avec le fichier de langue {{lang/fichier_fr.php}}


----[a29<-]
{{{29- Afficher les objets selon une date en paramètre URL <small style="color:grey;">[↖->#aa]</small>}}}


Il est possible d'afficher les objets ayant une date (<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+QUFBQS1NTS1ERCBISDpNTTpTUzwvY29kZT4="></span> en base de données) selon un paramètre URL de type <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+JmFtcDtwYXJhbWV0cmU9QUFBQS1NTS1ERDwvY29kZT4="></span>.
Prenons pour exemple une boucle <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+QVJUSUNMRVM8L2NvZGU+"></span> :
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+PGNvZGU+Jmx0O3VsJmd0Ow0KJmx0O0JPVUNMRV9hcnRpY2xlcyhBUlRJQ0xFUykge2RhdGUgTElLRSAlI0VOVntsYV9kYXRlfSV9IHtwYXIgZGF0ZX0mZ3Q7DQombHQ7bGkmZ3Q7I1RJVFJFICZsdDsvbGkmZ3Q7DQombHQ7L0JPVUNMRSZndDsNCiZsdDsvdWwmZ3Q7PC9jb2RlPjwvcHJlPjwvZGl2Pg=="></div>
Il suffit passer dans l'url de notre page le paramètre <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+bGFfZGF0ZT0yMDEzLTEyLTA2PC9jb2RlPg=="></span>.


{{ATTENTION}} : il ne faut pas nommer le paramètre en <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+ZGF0ZTwvY29kZT4="></span> car si la variable d'environnement <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0VOVntkYXRlfTwvY29kZT4="></span> n'est pas renseignée, alors SPIP considérera que <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0VOVntkYXRlfTwvY29kZT4="></span> doit retourner la date d'aujourd'hui. 
{cf. paragraphe 4 de cette page.}


----[a30<-]
{{{30- Créer un lien pour forcer le téléchargement du fichier d'un document <small style="color:grey;">[->#aa]</small>}}}


-* créer un fichier de squelette avec un header qui imposera le téléchargement du contenu du document.
Ici on appelle ce fichier "telechargement.html" dans lequel on mettra le contenu suivant:
<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+Jmx0O0JPVUNMRV9wcmluY2lwYWxlKERPQ1VNRU5UUyl7aWRfZG9jdW1lbnQ9I0VOVntpZF9kb2N1bWVudH19ezAsMX0mZ3Q7WygjSFRUUF9IRUFERVJ7Q29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9JnF1b3Q7WygjRklDSElFUnxiYXNlbmFtZSldJnF1b3Q7fSldWygjSFRUUF9IRUFERVJ7J0NvbnRlbnQtVHlwZTpbKCNGSUNISUVSfGV4dHJhaXJlX2F0dHJpYnV0e3NyY318bWltZV9jb250ZW50X3R5cGUpXSd9KV1bKCNGSUNISUVSfGZpbGVfZ2V0X2NvbnRlbnRzKV0mbHQ7L0JPVUNMRV9wcmluY2lwYWxlJmd0OzwvY29kZT4="></span>
_ {{Attention!}} il est important de ne pas avoir d'espaces ou de sauts de ligne en dehors de ce code sous peine de foirer le contenu du fichier!
-* dans le squelette on fait alors un lien vers cette page en donnant l'id_document comme paramètre d'URL:
<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+Jmx0O2EgaHJlZj0mcXVvdDtbKCNVUkxfUEFHRXt0ZWxlY2hhcmdlbWVudCxpZF9kb2N1bWVudD0jSURfRE9DVU1FTlR9KV0mcXVvdDsmZ3Q7I1RJVFJFJmx0Oy9hJmd0OzwvY29kZT4="></span>


Alternative en HTML5, utiliser l'attribut <em>download</em> dans une balise <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+Jmx0O2EmZ3Q7PC9jb2RlPg=="></span>.
<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+Jmx0O2EgaHJlZj0mcXVvdDtbKCNVUkxfUEFHRXt0ZWxlY2hhcmdlbWVudCxpZF9kb2N1bWVudD0jSURfRE9DVU1FTlR9KV0mcXVvdDsgW2Rvd25sb2FkPSZxdW90OygjRklDSElFUnxiYXNlbmFtZXxhdHRyaWJ1dF9odG1sKSZxdW90O10mZ3Q7I1RJVFJFJmx0Oy9hJmd0OzwvY29kZT4="></span>


----[a31<-]
{{{31- Afficher les initiales du nom d'un auteur}}}


Il arrive parfois qu'on ait besoin d'afficher que les initiales d'un auteur et pas tout son nom saisi dans l'espace privé. Si l'auteur a un pseudonyme d'un mot, le filtre <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+fGNvdXBlcnsxfTwvY29kZT4="></span> suffit amplement (ce filtre prend en compte les accents). Mais lorsque l'auteur a comme nom "Guy de Maupassant", ou "Marie-Cécile d’Autemont", le filtre <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+Y291cGVyPC9jb2RlPg=="></span> ne suffit pas.
Voici une fonction PHP "maison" qui pourra être utilisé comme filtre :
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InBocCI+PGNvZGU+Ly8gQXZvaXIgbGEgcHJlbWnDqHJlIGxldHRyZSBkZSBjaGFxdWUgbW90Lg0KLy8gY2YuIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzk3MDY0NzYNCi8vIFV0aWxpc2F0aW9uIDogWygjTk9NfGluaXRpYWxlcyldCgoKZnVuY3Rpb24gaW5pdGlhbGVzKCR3b3Jkcykgew0KICAgICR3b3JkcyA9IHRyaW0oJHdvcmRzKTsgLy8gT24gZW5sw6h2ZSBsZXMgZXNwYWNlcyBhdmFudCBldCBhcHLDqHMgc3VwZXJmbHVzDQogICAgJHdvcmRzID0gcHJlZ19zcGxpdCgmcXVvdDsvW1xzLF9cLSfigJldKy8mcXVvdDssICR3b3Jkcyk7IC8vIE9uIHRyYW5zZm9ybWUgbGVzIG1vdHMgZW4gdGFibGVhdQ0KICAgICR3b3JkcyA9IGFycmF5X2ZpbHRlcigkd29yZHMpOyAvLyBPbiBzdXBwcmltZSBsZXMgdGFibGVhdXggJnF1b3Q7dmlkZXMmcXVvdDssIGMnZXN0IGp1c3RlIHVuZSBzw6ljdXJpdMOpDQogICAgJGFjcm9ueW0gPSAnJzsKCgpmb3JlYWNoICgkd29yZHMgYXMgJHcpIHsNCiAgICAgICAgJGFjcm9ueW0gLj0gbWJfc3Vic3RyKCR3LCAsIDEpOyAvLyBPbiBwcmVuZCBsZSBwcmVtaWVyIGNhcmFjdMOocmUgZHUgbW90DQogICAgfQ0KICAgIHJldHVybiAkYWNyb255bTsNCn08L2NvZGU+PC9wcmU+PC9kaXY+"></div>
Copier-coller le code ci-dessus dans votre fichier <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+bWVzX2ZvbmN0aW9ucy5waHA8L2NvZGU+"></span>. Vous pouvez l'utiliser dans vos squelettes de cette façon : <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+WygjTk9NfGluaXRpYWxlcyldPC9jb2RlPg=="></span>


----[a32<-]
{{{32- Afficher le numéro de version SPIP dans un article, une rubrique...}}}


La balise #SPIP_VERSION permet d'afficher la version de SPIP installée sur le site ainsi que le numéro de révision, tels qu'ils apparaissent en pied des pages publiques, par exemple <samp>3..22 [22914]</samp>. Pour l'afficher dans un article, il faut écrire un modèle <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+c3BpcF92ZXJzaW9uLmh0bWw8L2NvZGU+"></span> (à placer dans <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+c3F1ZWxldHRlcy9tb2RlbGVzLzwvY29kZT4="></span>) qui appelle cette balise.


Le modèle ci-dessous offre des possibilités supplémentaires. En l'appelant avec un paramètre "afficher", on peut moduler le résultat et choisir de n'afficher qu'une partie de la chaîne de caractères.
-* <kbd><spip_version|afficher=x.y.z></kbd> ou <kbd><spip_version|afficher=num_version></kbd> n'affiche que le numéro de version au format "<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+eC55Lno8L2NvZGU+"></span>", par exemple <samp>3..22</samp>.
-* <kbd><spip_version|afficher=revision></kbd> n'affiche que  le numéro de révision, entre crochets. Exemple <samp>[22914]</samp>
-* <kbd><spip_version|afficher=num_rev></kbd> n'affiche que le numéro de révision mais sans les crochets. Exemple <samp>22914</samp>
-* <kbd><spip_version|afficher=tout></kbd> affiche toute la chaîne, comme s'il n'y avait pas de paramètre. C'est l'équivalent de <kbd><spip_version|></kbd>.


<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InNwaXAgc2Fuc190ZWxlY2hhcmdlbWVudCI+PGNvZGU+WygjUkVNKSAmcXVvdDtNb2TDqGxlJnF1b3Q7IHBvdXIgYWZmaWNoZXIgbGEgdmVyc2lvbiBkZSBTUElQLgoKCl0jU0VUe3F1b2ksI0VOVnthZmZpY2hlcn18c2lub257dG91dH19Ww0KKCNSRU0pDQpPbiBlc3Qgb2JsaWfDqSBkZSBwcsOpLWTDqWNvdXBlciBsYSBjaGHDrm5lIHBvdXIgZXh0cmFpcmUgbGUgbnVtw6lybyBkZSB2ZXJzaW9uIHNpbXBsZSwgc2lub24gbGUgdHJhaXRlbWVudCBkZXMgY3JvY2hldHMgcGVydHVyYmUgbGUgZGVybmllciB0ZXN0Lg0KXSNTRVR7DQp2ZXJzaW9uLCNTUElQX1ZFUlNJT058ZXhwbG9kZXsnICd9fSNTRVR7DQpyZXYsI0dFVHt2ZXJzaW9ufXx0YWJsZV92YWxldXJ7MX19I1NFVHsNCm5yLCNHRVR7cmV2fXxleHBsb2RleyddJ318YXJyYXlfc2hpZnR9I1NFVHsNCm51bV9yLCNHRVR7bnJ9fGV4cGxvZGV7J1snfXx0YWJsZV92YWxldXJ7MX19WwoKCigjUkVNKSBSZW52b2kgZGUgbGEgY2hhw65uZSBkZW1hbmTDqWUgZW4gZm9uY3Rpb24gZHUgcGFyYW3DqHRyZSB0cmFuc21pcy4NCl1bKCNHRVR7DQpxdW9pfXw9PXt0b3V0fXw/eyNTUElQX1ZFUlNJT059KV1bKCNHRVR7DQpxdW9pfXw9PXt4Lnkuen18b3V7I0dFVHtxdW9pfXw9PXtudW1fdmVyc2lvbn19fD97I0dFVHt2ZXJzaW9ufXxhcnJheV9zaGlmdH0pXVsoI0dFVHsNCnF1b2l9fD09e3JldmlzaW9ufXw/eyNHRVR7cmV2fX0pXVsoI0dFVHsNCnF1b2l9fD09e251bV9yZXZ9fD97I0dFVHtudW1fcn19KV08L2NvZGU+PC9wcmU+PC9kaXY+"></div>


----[a33<-]
{{{33- Un critère pour comparer l'âge en minutes, heures, mois ou années}}}


Le critère 'age' et sa famille ('age_relatif' et 'age_debut' qui compare date_debut) portent sur des valeurs en jours. Pour comparer avec des durées en secondes, minutes, heures, semaines, mois ou années etc, on pourra définir le critère suivant (dans mes_options) :


<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9J3BocCc+PGNvZGU+LyoqDQogKiBDcml0w6hyZSBwb3VyIGF2b2lyIGwnw6lxdWl2YWxlbnQgZHUgY3JpdMOocmUgJmx0O3NwYW4gY2xhc3M9JnF1b3Q7YmFzZTY0JnF1b3Q7IHRpdGxlPSZxdW90O1BHTnZaR1VnWTJ4aGMzTTlJbk53YVhCZlkyOWtaU0J6Y0dsd1gyTnZaR1ZmYVc1c2FXNWxJaUJrYVhJOUlteDBjaUkrWVdkbFBDOWpiMlJsUGc9PSZxdW90OyZndDsmbHQ7L3NwYW4mZ3Q7IGVuIG1pbnV0ZXMgb3UgYXV0cmUNCiAqDQogKiA0IHBhcmFtw6h0cmVzIDogbGUgY2hhbXAgZGUgZGF0ZSDDoCB1dGlsaXNlciwgbCdvcMOpcmF0ZXVyLCBsYSB2YWxldXIgY29tcGFyw6llIGV0IGwndW5pdMOpIChlbiBhbmdsYWlzKS4NCiAqIEwndW5pdMOpIHBhcm1pIDogTUlDUk9TRUNPTkQgKG1pY3Jvc2Vjb25kcyksIFNFQ09ORCwgTUlOVVRFLCBIT1VSLCBEQVksIFdFRUssIE1PTlRILCBRVUFSVEVSLCBvciBZRUFSICh0b3Vqb3VycyBhdSBzaW5ndWxpZXIpDQogKiANCiAqIEBzeW50YXhlDQogKiAgICAgIC0gJmx0O3NwYW4gY2xhc3M9JnF1b3Q7YmFzZTY0JnF1b3Q7IHRpdGxlPSZxdW90O1BHTnZaR1VnWTJ4aGMzTTlJbk53YVhCZlkyOWtaU0J6Y0dsd1gyTnZaR1ZmYVc1c2FXNWxJaUJrYVhJOUlteDBjaUkrZTJGblpYTWdZMmhoYlhCZlpHRjBaU3h2Y01PcGNtRjBaWFZ5TEhaaGJHVjFjaXgxYm1sMHc2bDlQQzlqYjJSbFBnPT0mcXVvdDsmZ3Q7Jmx0Oy9zcGFuJmd0Ow0KICogICAgICAtIGV4ZW1wbGUgOiAmbHQ7c3BhbiBjbGFzcz0mcXVvdDtiYXNlNjQmcXVvdDsgdGl0bGU9JnF1b3Q7UEdOdlpHVWdZMnhoYzNNOUluTndhWEJmWTI5a1pTQnpjR2x3WDJOdlpHVmZhVzVzYVc1bElpQmthWEk5SW14MGNpSStlMkZuWlhNZ1pHRjBaU3dtYkhRN0xERXdNREFzYldsdWRYUmxmVHd2WTI5a1pUND0mcXVvdDsmZ3Q7Jmx0Oy9zcGFuJmd0Ow0KICogDQogKiBAcGFyYW0gc3RyaW5nICRpZGIgSWRlbnRpZmlhbnQgZGUgbGEgYm91Y2xlDQogKiBAcGFyYW0gYXJyYXkgJGJvdWNsZXMgQVNUIGR1IHNxdWVsZXR0ZQ0KICogQHBhcmFtIENyaXRlcmUgJGNyaXQgUGFyYW3DqHRyZXMgZHUgY3JpdMOocmUgZGFucyBjZXR0ZSBib3VjbGUNCioqLw0KZnVuY3Rpb24gY3JpdGVyZV9hZ2VzX2Rpc3QoJGlkYiwgJmFtcDskYm91Y2xlcywgJGNyaXQpIHsNCgkkYm91Y2xlID0gJmFtcDskYm91Y2xlc1skaWRiXTsNCgkkaWRfdGFibGUgPSAkYm91Y2xlLSZndDtpZF90YWJsZTsgICAvLyBhcnRpY2xlcw0KCSRwcmltYXJ5ID0gJGJvdWNsZS0mZ3Q7cHJpbWFyeTsgICAgIC8vIGlkX2FydGljbGUNCgkkb2JqZXQgPSBvYmpldF90eXBlKCRpZF90YWJsZSk7ICAvLyBhcnRpY2xlCgoKaWYgKA0KCQkvLyB5IGFpdCA0IHBhcmFtw6h0cmVzIG9ibGlnYXRvaXJlbWVudA0KCQljb3VudCgkY3JpdC0mZ3Q7cGFyYW0pID09IDQNCgkpew0KCQkkY2hhbXBfZGF0ZSA9IGNhbGN1bGVyX2xpc3RlKCRjcml0LSZndDtwYXJhbVswXSwgYXJyYXkoKSwgJGJvdWNsZXMsICRib3VjbGVzWyRpZGJdLSZndDtpZF9wYXJlbnQpOw0KCQkkb3BlcmF0ZXVyICA9IGNhbGN1bGVyX2xpc3RlKCRjcml0LSZndDtwYXJhbVsxXSwgYXJyYXkoKSwgJGJvdWNsZXMsICRib3VjbGVzWyRpZGJdLSZndDtpZF9wYXJlbnQpOw0KCQkkdmFsZXVyICAgICA9IGNhbGN1bGVyX2xpc3RlKCRjcml0LSZndDtwYXJhbVsyXSwgYXJyYXkoKSwgJGJvdWNsZXMsICRib3VjbGVzWyRpZGJdLSZndDtpZF9wYXJlbnQpOw0KCQkkdW5pdGUgICAgICA9IGNhbGN1bGVyX2xpc3RlKCRjcml0LSZndDtwYXJhbVszXSwgYXJyYXkoKSwgJGJvdWNsZXMsICRib3VjbGVzWyRpZGJdLSZndDtpZF9wYXJlbnQpOwoKCiMkYm91Y2xlLSZndDt3aGVyZVtdID0gYXJyYXkoJG9wZXJhdGV1ciwgJnF1b3Q7XCZxdW90O1RJTUVTVEFNUERJRkYoXCZxdW90OyAuICR1bml0ZSAuIFwmcXVvdDssIFwmcXVvdDsgLiAkY2hhbXBfZGF0ZSAuIFwmcXVvdDssIE5PVygpKVwmcXVvdDsmcXVvdDssICR2YWxldXIpOw0KCQkkYm91Y2xlLSZndDtoYXZpbmdbXSA9IGFycmF5KCRvcGVyYXRldXIsICZxdW90OydhZ2VzJyZxdW90OywgJHZhbGV1cik7DQoJCSRib3VjbGUtJmd0O3NlbGVjdFtdID0gJnF1b3Q7VElNRVNUQU1QRElGRihcJnF1b3Q7IC4gJHVuaXRlIC4gXCZxdW90OywgXCZxdW90OyAuICRjaGFtcF9kYXRlIC4gXCZxdW90OywgTk9XKCkpIEFTIGFnZXMmcXVvdDs7DQoJfSBlbHNlIHsNCgkJcmV0dXJuIChhcnJheSgnemJ1Z19jcml0ZXJlX2luY29ubnUnLCBhcnJheSgnY3JpdGVyZScgPSZndDsgJGNyaXQtJmd0O29wKSkpOw0KCX0KCgp9CgoKLyoqDQogKiBCYWxpc2UgI0FHRVMgaXNzdWUgZHUgY3JpdMOocmUge2FnZXMgLi4ufQ0KICogDQogKiBAcGFyYW0gdW5rbm93bl90eXBlICRwDQogKi8NCmZ1bmN0aW9uIGJhbGlzZV9hZ2VzX2Rpc3QoJHApIHsNCglyZXR1cm4gcmluZGV4X3BpbGUoJHAsICdhZ2VzJywgJ2FnZXMnKTsNCn08L2NvZGU+PC9wcmU+PC9kaXY+"></div>


Voici un exemple d'usage :
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9J3NwaXAnPjxjb2RlPiZsdDtCT1VDTEVfcihBUlRJQ0xFUyl7IXBhciBkYXRlfXswLDIwfXthZ2VzIGRhdGUsJmx0Oyw2MDAwLE1JTlVURX0mZ3Q7DQpbKCNEQVRFfGFmZmRhdGV7J1ktbS1kIEg6aTpzJ30pXSAtICNBR0VTJmx0O2JyIC8mZ3Q7DQombHQ7L0JPVUNMRV9yJmd0OzwvY29kZT48L3ByZT48L2Rpdj4="></div>


----[a34<-]
{{{34- Surcharger deux fois une autorisation}}}
Si une autorisation {{autoriser_quoi_action_dist()}} existe, on peut créer une surcharge en la renommant  {{autoriser_quoi_action()}}, mais il ne peut pas en exister plusieurs du même nom. Donc...


{{Première approche : une autre autorisation dédiée à cette sur-surcharge}}


Si un plugin B nécessite un plugin A, si A surcharge une autorisation que B devra surcharger à son tour, alors prendre exemple sur :
https://zone.spip.org/trac/spip-zone/browser/_plugins_/info_sites/trunk/info_sites_autorisations.php#L281


Le principe : la surcharge d'une autorisation peut-être réglée par une nouvelle autorisation qui elle pourra être surchargée normalement....


Autorisation du plugin A qui surcharge la fonction {{autoriser_page_convertir_dist()}} du plugin Pages :
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InBocCI+PGNvZGU+LyoqDQogKiBvbiBuZSB2ZXV0IHBhcyBsYSBwb3NzaWJpbGl0ZSBkZSBjb252ZXJ0aXIgdW4gYXJ0aWNsZSBlbiBwYWdlLCBkb25jIG9uIHN1cmNoYXJnZSBsYSBmb25jdGlvbiBkdSBwbHVnaW4gUGFnZXMNCiAgIGVuIHV0aWxpc2FudCB1bmUgbm91dmVsbGUgZm9uY3Rpb24gZCdhdXRvcmlzYXRpb24gYXZlYyAqX2Rpc3QNCiAqLw0KZnVuY3Rpb24gYXV0b3Jpc2VyX3BhZ2VfY29udmVydGlyKCRmYWlyZSwgJHR5cGUsICRpZCwgJHF1aSwgJG9wdCkgew0KCXJldHVybiBhdXRvcmlzZXIoJ3BhZ2Vjb252ZXJ0aXInLCAncHJlZicsICRxdWkpOw0KfQ0KZnVuY3Rpb24gYXV0b3Jpc2VyX3ByZWZfcGFnZWNvbnZlcnRpcl9kaXN0KCRmYWlyZSwgJHR5cGUsICRpZCwgJHF1aSwgJG9wdCkgew0KCXJldHVybiBmYWxzZTsNCn08L2NvZGU+PC9wcmU+PC9kaXY+"></div>


Du coup rien n'empêche B de surcharger l'autorisation de A avec {{autoriser_pref_pageconvertir()}} :
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyIgY2xhc3M9InBocCI+PGNvZGU+LyoqDQogKiBvbiB2ZXV0IGxhIHBvc3NpYmlsaXRlIGRlIGNvbnZlcnRpcg0KICovDQpmdW5jdGlvbiBhdXRvcmlzZXJfcHJlZl9wYWdlY29udmVydGlyKCRmYWlyZSwgJHR5cGUsICRpZCwgJHF1aSwgJG9wdCkgew0KCXJldHVybiB0cnVlOw0KfTwvY29kZT48L3ByZT48L2Rpdj4="></div>


{{Deuxième approche : spécialiser l'autorisation}}


Parfois on utilise une autorisation large: par exemple {{autoriser_iconifier_dist()}} est déjà surchargée. Il suffit de surcharger l'autorisation pour l'objet spécifique dont on a besoin {{autoriser_article_iconifier_dist()}}.


Dans tous les cas, une seule surcharge s'applique, contrairement aux implémentations d'un pipeline, qui s'appliquent toutes successivement.


----[a35<-]
{{{35- Ne pas charger le jQuery fourni par SPIP}}}


Parfois, on désire ne pas charger le ou les jQuery fournis par SPIP en conservant quand même la balise  <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0lOU0VSVF9IRUFEPC9jb2RlPg=="></span> pour les autres insertions de plugins.
Exemple typique: on intègre un thème conçu pour jquery 1.1 et la migration vers jQuery récent est trop lourde.


Voici la méthode d'après https://forum.spip.net/fr_249697.html


1. Ajouter dans {{mes_options.php}}
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayBsYW5ndWFnZS1waHAiIGRpcj0ibHRyIiBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiIGRhdGEtbGFuZ3VhZ2U9InBocCI+PGNvZGU+Jmx0Oz9waHANCi8vIGRlc2FjdGl2ZXIgbCdpbnNlcnRpb24gZGUganF1ZXJ5ICBkYW5zIGxlIGluc2VydF9oZWFkDQovLyBodHRwczovL2ZvcnVtLnNwaXAubmV0L2ZyXzI0OTY5Ny5odG1sDQokR0xPQkFMU1snc3BpcF9waXBlbGluZSddWydqcXVlcnlfcGx1Z2lucyddIC49ICZxdW90O3xsaW1pdGVyX2phdmFzY3JpcHQmcXVvdDs7CgoKZnVuY3Rpb24gbGltaXRlcl9qYXZhc2NyaXB0KCRwbHVnaW5zKXsNCglpbmNsdWRlX3NwaXAoJ2luYy91dGlscycpOwoKCi8vIHVuaXF1ZW1lbnQgc3VyIGxlcyBwYWdlcyBwdWJsaXF1ZXMgZGUgU1BJUCAobmUgcGFzIGNhc3NlciBsJ2FkbWluKQ0KICAgICBpZighdGVzdF9lc3BhY2VfcHJpdmUoKSkgew0KCQkvL3JldHVybiBhcnJheSgnamF2YXNjcmlwdC9qcXVlcnkuanMnKTsgIC8vIGV4ZW1wbGUgZGFucyBsZXF1ZWwgb24gZ2FyZGUgdW5pcXVlbWVudCBqUXVlcnkgbWFpcyBwYXMgbGVzIGF1dHJlcyBqUXVlcnkgVUkNCgkJJHBsdWdpbnMgPSBhcnJheSgpOyAvLyBBdWN1biBqUXVlcnkNCgl9CgoKcmV0dXJuICRwbHVnaW5zOw0KfTwvY29kZT48L3ByZT48L2Rpdj4="></div>


2. Dans la configuration privée du SPIP, choisir la configuration suivante
-* Configurer les barres d’outils > Ne pas charger  ( ecrire/?exec=configurer_avancees )
-* Squelettes > boite multimédia > Ne pas activer ( ecrire/?exec=configurer_mediabox )


----[a36<-]
{{{36- Personnaliser le message affiché dans la page Erreur 403 (espace privé)}}}


La page 403 est la page {Accès interdit} qui s'affiche lorsque l'utilisateur n'a pas les droits définis pour voir la page en question. Le texte affiché par défaut peut être modifié en surchargeant la page dans "/config/mes_options.php" en recopiant à l'identique la fonction native SPIP à l'exception de la ligne commençant par "$message", ainsi : 
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+PGNvZGU+ZnVuY3Rpb24gZXhlY180MDMoJG1lc3NhZ2UgPSAnJykgew0KCSRleGVjID0gX3JlcXVlc3QoJ2V4ZWMnKTsNCgkkdGl0cmUgPSAmcXVvdDtleGVjXyRleGVjJnF1b3Q7Ow0KCSRuYXZpZ2F0aW9uID0gJyc7DQoJJGV4dHJhID0gJyc7DQoJaWYgKCEkbWVzc2FnZSkgew0KCQkkbWVzc2FnZSA9IF9UKCd0ZXh0ZV9hY2Nlc19pbnRlcmRpdCcsIGFycmF5KCdleGVjJyA9Jmd0OyBfcmVxdWVzdCgnZXhlYycpKSk7IA0KCX0gLy8gaWNpIG9uIGEgaW5jbHV0IGxhIG5vdXZlbGxlIGNoYcOubmUgZGUgbGFuZ3VlIHRleHRlX2FjY2VzX2ludGVyZGl0DQoJJGNvbnRlbnUgPSAmcXVvdDsmbHQ7aDEgY2xhc3M9J2dyb3N0aXRyZScmZ3Q7JnF1b3Q7IC4gX1QoJ2luZm9fYWNjZXNfaW50ZXJkaXQnKSAuICcmbHQ7L2gxJmd0OycgLiAkbWVzc2FnZTsNCglpZiAoX3JlcXVlc3QoJ3Zhcl96YWpheCcpKSB7DQoJCWluY2x1ZGVfc3BpcCgnaW5jL2FjdGlvbnMnKTsNCgkJYWpheF9yZXRvdXIoJGNvbnRlbnUpOw0KCX0gZWxzZSB7DQoJCWluY2x1ZGVfc3BpcCgnaW5jL3ByZXNlbnRhdGlvbicpOyAvLyBhbGxlZ2VyIGxlcyBpbmNsdXNpb25zIGF2ZWMgdW4gaW5jL3ByZXNlbnRhdGlvbl9taW5pDQoJCSRjb21tZW5jZXJfcGFnZSA9IGNoYXJnZXJfZm9uY3Rpb24oJ2NvbW1lbmNlcl9wYWdlJywgJ2luYycpOw0KCQllY2hvICRjb21tZW5jZXJfcGFnZSgkdGl0cmUpOw0KCQllY2hvIGRlYnV0X2dhdWNoZSgmcXVvdDs0MDNfJGV4ZWMmcXVvdDssIHRydWUpOw0KCQllY2hvIHJlY3VwZXJlcl9mb25kKCdwcml2ZS9zcXVlbGV0dGVzL25hdmlnYXRpb24vZGlzdCcsIGFycmF5KCkpOw0KCQllY2hvIHBpcGVsaW5lKCdhZmZpY2hlX2dhdWNoZScsIGFycmF5KCdhcmdzJyA9Jmd0OyBhcnJheSgnZXhlYycgPSZndDsgJzQwMycsICdleGVjX2VycmV1cicgPSZndDsgJGV4ZWMpLCAnZGF0YScgPSZndDsgJycpKTsNCgkJZWNobyBjcmVlcl9jb2xvbm5lX2Ryb2l0ZSgnNDAzJywgdHJ1ZSk7DQoJCWVjaG8gcGlwZWxpbmUoJ2FmZmljaGVfZHJvaXRlJywgYXJyYXkoJ2FyZ3MnID0mZ3Q7IGFycmF5KCdleGVjJyA9Jmd0OyAnNDAzJywgJ2V4ZWNfZXJyZXVyJyA9Jmd0OyAkZXhlYyksICdkYXRhJyA9Jmd0OyAnJykpOw0KCQllY2hvIGRlYnV0X2Ryb2l0ZSgnNDAzJywgdHJ1ZSk7DQoJCWVjaG8gcGlwZWxpbmUoDQoJCQknYWZmaWNoZV9taWxpZXUnLA0KCQkJYXJyYXkoJ2FyZ3MnID0mZ3Q7IGFycmF5KCdleGVjJyA9Jmd0OyAnNDAzJywgJ2V4ZWNfZXJyZXVyJyA9Jmd0OyAkZXhlYyksICdkYXRhJyA9Jmd0OyAkY29udGVudSkNCgkJKTsNCgkJZWNobyBmaW5fZ2F1Y2hlKCksIGZpbl9wYWdlKCk7DQoJfQ0KfTwvY29kZT48L3ByZT48L2Rpdj4="></div>
Ensuite : ajouter la chaîne de langue <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+Jmx0Ozp0ZXh0ZV9hY2Nlc19pbnRlcmRpdDogJmd0OzwvY29kZT4="></span> dans vos fichiers de langue (ecrire_fr et ecrire_en, ou toute autre langue) avec le contenu souhaité.


----[a37<-]


<!-- deplacement depuis astuces courtes -->
{{{37- Afficher la liste des langues du site sur une même ligne}}}
Par défaut la balise <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I01FTlVfTEFORzwvY29kZT4="></span> crée un formulaire de liste déroulante, peu esthétique si seulement 2 langues sont disponibles. Modifier \formulaires\menu_lang.html (copié au préalable dans votre dossier \squelettes\formulaires\) pour remplacer les lignes suivantes :
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+PGNvZGU+Jmx0O3NlbGVjdCBuYW1lPSZxdW90OyNFTlZ7bm9tfSZxdW90OyBpZD0mcXVvdDsjRU5We25vbX0mcXVvdDsgb25jaGFuZ2U9JnF1b3Q7dGhpcy5wYXJlbnROb2RlLnBhcmVudE5vZGUuc3VibWl0KCkmcXVvdDsmZ3Q7DQoJCSgjSU5DTFVSRXtmb25kPWZvcm11bGFpcmVzL2luYy1vcHRpb25zLWxhbmd1ZXMsbmFtZT0jRU5WKntuYW1lfSxkZWZhdWx0PSNFTlYqe2RlZmF1bHQsJyd9fSkNCgkmbHQ7L3NlbGVjdCZndDs8L2NvZGU+PC9wcmU+PC9kaXY+"></div>
par le code php suivant: 
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayIgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+PGNvZGU+Jmx0Oz9waHANCgkkbGFuZ3VlcyA9ICdsYW5nJzsNCgkkdGFiX2xhbmd1ZXMgPSBleHBsb2RlKCZxdW90OywmcXVvdDssICRHTE9CQUxTWydtZXRhJ11bJ2xhbmd1ZXNfbXVsdGlsaW5ndWUnXSk7DQoJd2hpbGUgKCBsaXN0KCRjbGVmLCAkdmFsZXVyKSA9IGVhY2goJHRhYl9sYW5ndWVzKSApIHsNCgkJZWNobyAnJmx0O2EgY2xhc3M9JnF1b3Q7Zm9ybWwmcXVvdDsgbmFtZT0mcXVvdDsjRU5WKntub219JnF1b3Q7IGRlZmF1bHQ9I0VOVip7ZGVmYXVsdCwnJ30gaWQ9JnF1b3Q7I0VOVntub219JnF1b3Q7IGhyZWY9JnF1b3Q7I0VOVip7dXJsfSZhbXA7I0VOVip7bm9tfT0nLiR2YWxldXIuJyZxdW90OyZndDsnLiR2YWxldXIuJyAmbHQ7L2EmZ3Q7fCc7CX0NCgk/Jmd0OzwvY29kZT48L3ByZT48L2Rpdj4="></div>
Puis utiliser la balise <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I01FTlVfTEFORzwvY29kZT4="></span> dans le squelette de vos pages pour faire apparaître les différentes langues.
_ voir aussi le plugin [->art3300].


----[a38<-]
{{{38- Utiliser la balise <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0NPTkZJRzwvY29kZT4="></span> sur une base externe}}}
La balise <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+I0NPTkZJRzwvY29kZT4="></span> n'est pas disponible pour lire des bases externes mais on peut facilement récupérer sa valeur


J'ai une base externe {{fdh}} dont j'ai indiqué la connection via  {{config/fdh_connect.php}}. Je peux récupérer la config de mon plugin  {{fdh}}  via la boucle suivante
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayBsYW5ndWFnZS1zcGlwIiBkaXI9Imx0ciIgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7IiBkYXRhLWxhbmd1YWdlPSJzcGlwIj48Y29kZT4mbHQ7Qk9VQ0xFX2dldF9jb25maWdfZmRoKGZkaF9jb25uZWN0OnNwaXBfbWV0YSl7bm9tPWZkaH0mZ3Q7DQojU0VUe2NvbmZpZ19mZGgsI1ZBTEVVUnx1bnNlcmlhbGl6ZX0NCiZsdDsvQk9VQ0xFX2dldF9jb25maWdfZmRoJmd0OzwvY29kZT48L3ByZT48L2Rpdj4="></div>


Ensuite pour récupérer une valeur
<div class="base64" title="PGRpdiBjbGFzcz0icHJlY29kZSI+PHByZSBjbGFzcz0ic3BpcF9jb2RlIHNwaXBfY29kZV9ibG9jayBsYW5ndWFnZS1zcGlwIiBkaXI9Imx0ciIgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7IiBkYXRhLWxhbmd1YWdlPSJzcGlwIj48Y29kZT4jQ09ORklHe2ZkaC9saWVuX2Rvbn0NCmRldmllbnQNCiNHRVR7Y29uZmlnX2ZkaC9saWVuX2Rvbn0NCm91IGRhbnMgbGUgY2FzIGQndW4gdGFibGVhdQ0KI0dFVHtjb25maWdfZmRoL2xpZW5fZG9uLzB9PC9jb2RlPjwvcHJlPjwvZGl2Pg=="></div>

Retour à la version courante

Toutes les versions