Artifact ID: | e2374794f008fc0f5649883dc27b794fcbe04979 |
---|---|
Page Name: | Squelettes |
Date: | 2021-01-08 16:04:04 |
Original User: | bohwaz |
Mimetype: | text/x-markdown |
Parent: | 8b6bb6edf9e646fc8b21036efdd5f20df2a38732 (diff) |
Next | 94c79500cff39ff7d9ab8a8d81e961c1aee8d4e2 |
Les squelettes (depuis la version 1.1)
La syntaxe utilisée est entre Mustache, Smarty et PHP.
Syntaxe de base
Affichage de variable
Une variable est affichée à l'aide de la syntaxe : {{$date}}
affichera la valeur brute de la date par exemple : 2020-01-31 16:32:00
.
La variable peut être modifiée à l'aide de filtres de modification, qui sont ajoutés avec le symbole de la barre verticale (pipe |
) : {{$date|date_long}}
affichera une date au format long : jeudi 7 mars 2021
.
Ces filtres peuvent accepter des paramètres, séparés par deux points :
. Exemple : {{$date|date:"%d/%m/%Y"}}
affichera 31/01/2020
.
Par défaut la variable sera recherchée dans le contexte actuel de la section, si elle n'est pas trouvée elle sera recherchée dans le contexte parent (section parente), etc. jusqu'à trouver la variable.
Il est possible de faire référence à une variable d'un contexte particulier avec la notation à points : {{$article.date}}
.
Il existe deux variables de contexte spécifiques : $_POST
et $_GET
qui permettent d'accéder aux données envoyées dans un formulaire et dans les paramètres de la page.
Par défaut le filtre escape
est appliqué à toutes les variables, à moins de rajouter le filtre escape
ou raw
explicitement.
Conditions
Il est possible d'utiliser des conditions de type "si" (if
), "sinon si" (elseif
) et "sinon" (else
). Celles-ci sont terminées par un block "fin si" (endif
).
{{if $date|date:"%Y" > 2020}}
La date est en 2020
{{elseif $article.is_draft}}
La page est un brouillon
{{else}}
Autre chose.
{{endif}}
Sections
Une section est une partie de la page qui sera répétée une fois, plusieurs fois, ou zéro fois, selon ses paramètres et le résultat. Une section commence par un bloc avec un signe hash (#
) et se termine par un bloc avec un slash (/
).
Un exemple simple avec une section qui n'aura qu'une seule répétition :
{{#categories uri=$_GET.uri}}
<h1>{{$title}}</h1>
{{else}}
<p>Catégorie non trouvée</p>
{{/categories}}
Un exemple de sous-section
{{#categories uri=$_GET.uri}}
<h1>{{$title}}</h1>
{{#articles parent_id=$id order="created DESC" limit="10"}}
<h2><a href="{{$url}}">{{$title}}</a></h2>
<p>{{$text|truncate:600:"..."}}</p>
{{else}}
<p>Aucun article trouvé.</p>
{{/articles}}
{{/categories}}
Il est possible d'utiliser une condition {{else}}
avant la fin du bloc pour avoir du contenu alternatif si la section ne se répète pas.
Voir la référence des sections pour voir quelles sont les sections possibles et quel est leur comportement.
Sections litérales
Pour qu'une partie du code ne soit pas interprété, pour éviter les conflits avec certaines syntaxes, il est possible d'utiliser un bloc literal
:
{{literal}}
<script>
// Ceci ne sera pas interprété
function test (a) {{
}}
</script>
{{/literal}}
Commentaires
Les commentaires sont figurés dans des blocs qui commencent et se terminent par une étoile (*
) :
{{* Ceci est un commentaire
Il sera supprimé du résultat final
Il peut contenir du code qui ne sera pas interprété :
{{if $test}}
OK
{{endif}}
*}}
Référence des sections
Dans toutes les sections il est possible d'utiliser les paramètres suivants :
where |
Condition de sélection des résultats |
limit |
Limitation des résultats |
order |
Ordre de tri des résultats |
Il est également possible de passer des arguments dans les paramètres à l'aides des arguments nommés qui commencent par deux points :
: {{#articles order=":order DESC" :order="date"}}
sql
Effectue une requête SQL de type SELECT
dans la base de données.
{{#sql select="*, julianday(date) AS day" tables="membres" where="id_categorie = :id_categorie" :id_categorie=$_GET.id_categorie order="numero DESC" limit=":page*100,100" :page=$_GET.page}}
…
{{/sql}}
articles
categories
files
Paramètres possibles
image |
pour filtrer les fichiers qui sont des images (= 1) ou pas (= 0) |
except_in_text |
passer à ce paramètre un texte, et seuls les fichiers qui ne sont pas liés dans le texte seront renvoyés : except_in_text=$text |
Paramètres
Les squelettes dans Garradin (jusqu'à la version 1.0)
ATTENTION Cette page est encore à l'état de brouillon !
Dans Garradin le site public de l'association est affiché via des squelettes. Ce sont des fichiers HTML qui permettent de choisir les données affichées sur le site. Ils sont semblables aux squelettes de SPIP.
Une bonne introduction à la logique des boucles et balises SPIP est disponible dans la documentation SPIP.
Cependant certaines différences existent, notamment au niveau des types de boucles et de leurs critères, et certaines fonctions avancées du langage SPIP ne sont pas prises en charge (voir la fin de cette page).
Mes squelettes sont un langage de programmation qui permet d'afficher les pages du wiki marquées comme "visible sur le site public".
Exemples
Boucle simple
La boucle suivante affiche les titres des 10 derniers articles (= pages wiki qui n'ont pas de sous-pages) :
<BOUCLE_derniers(ARTICLES){par date}{inverse}{0,10}>
<article>
<h1><a href="#URL">#TITRE</a></h1>
</article>
</BOUCLE_derniers>
La boucle est composée d'un tag ouvrant <BOUCLE_
suivi du nom la boucle (ici c'est derniers
), puis du type de la boucle (ARTICLES
) et des critères. Ici il y a trois critères :
par date
indique de trier les résultats par dateinverse
indique d'inverser l'ordre de tri (et donc ici ça sera par date anté-chronologique : de l'article le plus récent au plus ancien)0,10
: ne renvoyer que 10 articles, en commençant par le premier (qui est donc le0
en informatique
Voir plus bas pour la liste complète des critères et types de boucles disponibles.
Dans le contenu de la boucle on retrouve des balises qui sont en majuscules et commencent par un signe hash :
#URL
renvoie l'adresse absolue de l'article (par exemplehttp://monasso.tld/Kermesse-du-23-juillet
)#TITRE
affiche le titre de l'article
Voir plus bas la liste des balises disponibles selon le type de boucle.
Enfin à la fin il faut refermer la boucle par un tag fermant contenant le nom de la boucle : </BOUCLE_derniers>
.
Il ne peut y avoir qu'une seule boucle avec le même nom dans un même squelette (donc il ne peut pas y avoir deux boucles avec le même nom !).
Utilisation de filtres
Il est possible d'ajouter des filtres aux balises. En reprenant l'exemple du dessus on arrive à :
<BOUCLE_derniers(ARTICLES){par date}{inverse}{0,10}>
<article>
<h1><a href="#URL">#TITRE</a></h1>
<h5>Posté : [(#DATE_CREATION|date_intelligente)]</h5>
<p>[(#TEXTE|supprimer_skriv|couper{200})]</p>
</article>
</BOUCLE_derniers>
On a rajouté deux lignes et deux balises. On peut voir qu'on a entouré les balises de parenthèses et de crochets et qu'on y a ajouté après un signe pipe un ou plusieurs filtres. Ces filtres modifient le contenu renvoyé par la balise.
Dans le premier cas, le filtre date_intelligente
renverra la date relative à la date du jour, par exemple hier
, ou mardi 5 juin
si la date de l'article date de plusieurs jours.
Dans le second cas on applique deux filtres :
supprimer_skriv
supprime le formatage SkrivML du contenu du textecouper
coupe le texte au nombre de caractères passé en premier paramètre
Contenu conditionnel
Si on souhaite afficher un message pour les visiteurs anglophones, on peut utiliser :
[(#LANGUE_VISITEUR|=={en})
<p>
Welcome to our non-profit organization website!
</p>
]
Guide de référence
Les boucles
Note : les boucles ne peuvent renvoyer que des pages wiki identifiées comme apparaissant sur le site public. Les pages privées ne peuvent apparaître sur le site public.
Boucles de type ARTICLES, RUBRIQUES et PAGES
- ARTICLES renvoie les pages wiki publiques n'ayant pas de page "enfant".
- RUBRIQUES renvoie les pages wiki publiques ayant au moins une autre page "enfant".
- PAGES renvoie toutes les pages wiki quelque soit leur position hiérarchique.
Critères
Il est possible de filtrer ou ordonner les résultats retournés par une boucle à l'aide des critères suivants :
- id
- uri
- titre
- date_creation
- date (alias de date_creation)
- date_modification
- parent
- rubrique (alias de parent)
- revision
- texte
- age
- recherche
- points (uniquement disponible pour ordonner les résultats de recherche)
Boucles de type DOCUMENTS, IMAGES et FICHIERS
- DOCUMENTS renvoie tous les documents quel que soit leur type.
- IMAGES renvoie tous les documents de type image.
- FICHIERS renvoie tous les documents qui ne sont pas de type image.
Critères
- id
- nom
- type
- date
- image (booléen)
- hash (somme de contrôle SHA1)
- taille (en octets)
- parent (ID de la page associée au document)
- rubrique (alias de parent)
- article (alias de parent)
- page (alias de parent)
- sauf_mention = n'inclure que les documents qui ne sont pas mentionnés dans le texte de la page parente
Les balises
- #TITRE
- #TEXTE
- #DATE_CREATION (ou #DATE, synonyme)
- #DATE_MODIFICATION
- #URI = adresse relative de la page (par exemple
Kermesse-du-23-juillet
) - #URL = adresse absolue de la page (par exemple
https://monsite.tld/Kermesse-du-23-juillet
) - #ID = Numéro de page
- #PARENT = Numéro de page parente
- #RUBRIQUE = Numéro de rubrique (alias de #PARENT)
Les balises générales
#LANGUE_VISITEUR
Donne la langue principale du visiteur.
Les filtres
choixsiegal
Ce filtre permet d'afficher un contenu alternatif.
Différences connues avec la syntaxe SPIP
Boucles
- La syntaxe raccourcie n'est pas reconnue (par exemple
<BOUCLE_a(ARTICLES) />#TOTAL_BOUCLE</B_a>
ne fonctionnera pas, il faut utiliser<BOUCLE_a(ARTICLES) />#TOTAL_BOUCLE</BOUCLE_a>
)
Balises
Les fonctions suivantes ne sont pas supportées par Garradin pour le moment :
- La balise
#ENV
n'est pas gérée - La double étoile
#BALISE**
n'est pas pris en compte, seulement#BALISE*
(voir la doc SPIP) - Les paramètres des balises dynamiques ne sont pas supportés (par exemple
#ENV{lang,fr}
) - Les balises non-ambigües ne sont pas supportées (par exemple
#_rubriques:TITRE
) - Il n'est pas possible d'imbriquer des balises étendues dans les arguments des filtres d'une balise. Exemple :
[(#LANGUE_VISITEUR|!={fr}|et{#LANGUE_VISITEUR|!={ro}})