Carnet Wiki

ElementsDeGrammaireSpip

La doc officielle décrit les contours de la grammaire de SPIP et constitue un mode d’emploi pour démarrer.

Cette page vise à compléter la doc avec plus de détails sur ce qui est possible pour chacune des expressions intervenant dans la syntaxe des boucles SPIP et autres éléments du langage.

Cette liste des possibles et des impossibles devrait éviter de longues et stériles heures de debuging à des codeurs aventuriers mais mal renseignés.

-  Eléments de grammaire SPIP
-  Exemples d’expressions composées

Eléments de grammaire SPIP

Pas de langage spécialisé, juste du français pour décrire ce qui pose problème.

Régle : ne pas mettre les crochets parenthèses pour appeler un filtre en critère

Exemple :

{date_birth < #ENV{agemin,9999-99-99}|approxdate}
{date_birth != #ENV{agemin}|?{0000-00-00, 9999-99-99}}

Note : Depuis SPIP 1.9, on peut utiliser des fonctions SQL dans les critères, notamment pour le tri :
{par FCT(titre)}

Régle : ne pas mettre les crochets parenthèses dans la partie valeur d’un #SET

exemple :

#SET{dater,[(#DATE|affdate{'m-d'})]}      <!-- ne marche pas -->
#SET{dater,#DATE|affdate{'m-d'}}           <!-- marche -->

Régle : pas trop compliquer les expressions

<:une_chaine|image_typo{police=[(#CONFIG{dir/police})]}:>
ne sera pas compris par spip [1], tandis que :
<:article|image_typo{police=#CONFIG{dir/police}}:>
le sera.

Règle : quand c’est possible, faire texto comme c’est indiqué dans la doc

Exemple : le critère associé à l’opérateur SQL IN s’écrit en majuscules dans la doc. Si on le met en minuscule comme critère d’une boucle, le compilateur ne signale pas d’erreur, mais il compile un petit peu différemment (exemple : avec {surtitre IN un surtitre possible, #GET{autre_surtitre}} il doublenquote le paramètre valeur avec une paire de backslash en prime), et l’exécution ne signale pas d’erreur mais les résultats sont un peu différents de ceux attendus...

Si par contre, il s’avère que la doc s’avère érronée sur un point précis de la syntaxe, dans un exemple donné, alors il faut le signaler !

Ce qui suit date et doit être vérifié ou actualisé :

Règle : pas de boucles SPIP ni de <INCLURE> à l’intérieur d’un filtre.

Ainsi, par exemple :
[(#POPULARITE_ABSOLUE|<{'3'}|?{'',<INCLURE(inclusions/inc_article_decompte_popularite.php){id_article}>})]

n’est pas possible, mais ce qui suit est possible (à partir de spip 2.0) :

[(#POPULARITE_ABSOLUE|<{'3'}|non) <INCLURE(inclusions/inc_article_decompte_popularite.php){id_article}>]

Règle : parenthèse parfois nécessaires dans les critères

Il faut écrire {par (#ENV{x})}    
car ce n’est pas accepté comme ça : {par #ENV{x}}

Exemples de codes composés

1) #SET imbriqués et appels de filtre [2] :

[(#ENV{retour}|=={'./'}|?{
              [(#SET{retour,../})],
              [(#SET{retour,[(#VAL{../}|concat{#ENV{retour,''}})]})]  
})]


Peut en l’occurence également s’écrire :

[(#ENV{retour}|=={./}|?{
              #SET{retour, ../},
              #SET{retour, ../#ENV{retour, ''}}    
})]

Aspects théoriques

Le 15 avril 2010 à 00h40, Maïeul théorise certaines spécificités du compilateur :

si j’ai bien compris, le compilateur ne semble pas compter le nombre d’accolades fermantes — tout comme il s’arrete dans certaines expressions à la première parenthèse fermante.

-  En pratique, ne fonctionnent pas sous SPIP2.1

[(#STATUT|=={publie}|oui)#FORMULAIRE_EDITER_ARTICLE{#ID_ARTICLE, #ID_RUBRIQUE, [(#URL_ARTICLE|parametre_url{var_mode,calcul})]}]

ou

[(#STATUT|=={publie}|oui)#FORMULAIRE_EDITER_ARTICLE{#ID_ARTICLE, #ID_RUBRIQUE, (#URL_ARTICLE|parametre_url{var_mode,calcul})}]

-  Par contre les deux exemples ci-dessous fonctionnent :

[(#STATUT|=={publie}|oui)#FORMULAIRE_EDITER_ARTICLE{#ID_ARTICLE, #ID_RUBRIQUE, #URL_ARTICLE|parametre_url{var_mode,calcul}}]

et

[(#STATUT|=={publie}|oui)#FORMULAIRE_EDITER_ARTICLE{#ID_ARTICLE, #ID_RUBRIQUE, #URL_ARTICLE|parametre_url{var_mode,calcul}]

[1nov 08

[2Avril 2010

- Mise à jour :9 février 2019 à 15h20min