Overview

Artifact ID: 94c79500cff39ff7d9ab8a8d81e961c1aee8d4e2
Page Name:Squelettes
Date: 2021-01-08 16:07:21
Original User: bohwaz
Mimetype:text/x-markdown
Parent: e2374794f008fc0f5649883dc27b794fcbe04979 (diff)
Next 39797e34b6738c4bf64b89247614cbfca96344b4
Content

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" (/if).

{{if $date|date:"%Y" > 2020}}
    La date est en 2020
{{elseif $article.is_draft}}
    La page est un brouillon
{{else}}
    Autre chose.
{{/if}}

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
{{/if}}
*}}

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 date
  • inverse 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 le 0 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 exemple http://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 texte
  • couper 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}})