syntaxe conditions

Bonjour,
j’ai toujours des problèmes avec la syntaxe de SPIP …
Voici ce que je fais : j’ai stocké (sur les conseils Manu, sur la liste ici) les ID d’articles qui m’intéressaient dans une #ARRAY.
Dans certaines circonstances, je veux pouvoir faire un deuxième tri avec des critères supplémentaires : je veux sélectionner les articles dont le mois et la date ont été déterminés par ailleurs. Je n’ai pas trouvé comment le faire directement dans les critères d’une boucle alors j’ai choisi de le faire avec des conditions à l’intérieur d’une boucle qui parcourt tous les ID. Voici le code

    #SET{stock2,#ARRAY}
    <BOUCLE_rub_blog2(ARTICLES){id_article IN #GET{stock}}{par date}{inverse}>
    #SET{date_blog_test,(#ENV{date_blog}|annee)-(#ENV{date_blog}|mois)}
    #SET{date_article_test,(#DATE|annee)-(#DATE|mois)}
    [(#GET{date_blog_test}|=={#GET{date_article_test}}|oui) ICI]
    #SET{stock2,(#GET{stock2}|push{#ID_ARTICLE})}
         </BOUCLE_rub_blog2>

je crée deux variables qui mettent sous la forme année-mois la date à la fois pour mon critère et pour la date issue de l’article.
Puis je fais un test d’égalité |==
Le « ICI » s’affiche le nombre de fois qu’il faut, ce qui semble dire que mon critère fonctionne.
Le #SET en dessous (sur stock2), sorti de la condition, fonctionne aussi, et aboutit à une recopie de la totalité des articles.

Quand je place ce #SET à la place du « ICI », SPIP me trouve une erreur de syntaxe … au niveau du 1er #SET de la boucle dans ce code …

Je n’y comprends rien. Quelqu’un peut m’aider ?

  Merci,
    Mikhaël

Le 12/10/2017 à 12:30, Mikhaël MYARA a écrit :

Bonjour,
  j’ai toujours des problèmes avec la syntaxe de SPIP …
Voici ce que je fais : j’ai stocké (sur les conseils Manu, sur la liste ici) les ID d’articles qui m’intéressaient dans une #ARRAY.
Dans certaines circonstances, je veux pouvoir faire un deuxième tri avec des critères supplémentaires : je veux sélectionner les articles dont le mois et la date ont été déterminés par ailleurs. Je n’ai pas trouvé comment le faire directement dans les critères d’une boucle alors j’ai choisi de le faire avec des conditions à l’intérieur d’une boucle qui parcourt tous les ID. Voici le code

    #SET{stock2,#ARRAY}
    <BOUCLE_rub_blog2(ARTICLES){id_article IN #GET{stock}}{par date}{inverse}>
    #SET{date_blog_test,(#ENV{date_blog}|annee)-(#ENV{date_blog}|mois)}
    #SET{date_article_test,(#DATE|annee)-(#DATE|mois)}
    [(#GET{date_blog_test}|=={#GET{date_article_test}}|oui) ICI]
    #SET{stock2,(#GET{stock2}|push{#ID_ARTICLE})}
         </BOUCLE_rub_blog2>

je crée deux variables qui mettent sous la forme année-mois la date à la fois pour mon critère et pour la date issue de l’article.
Puis je fais un test d’égalité |==
  Le « ICI » s’affiche le nombre de fois qu’il faut, ce qui semble dire que mon critère fonctionne.
  Le #SET en dessous (sur stock2), sorti de la condition, fonctionne aussi, et aboutit à une recopie de la totalité des articles.

  Quand je place ce #SET à la place du « ICI », SPIP me trouve une erreur de syntaxe … au niveau du 1er #SET de la boucle dans ce code …

Je n’y comprends rien. Quelqu’un peut m’aider ?

Dans l'expression suivante :
#SET{stock2,(#GET{stock2}|push{#ID_ARTICLE})}
je crois que les parenthèses sont inutiles et il serait préférable de les enlever.

Pour #SET{date_blog_test,(#ENV{date_blog}|annee)-(#ENV{date_blog}|mois)}
c'est incorrect car il y a 2 balises au même niveau dans l'argument.
Rigoureusement, c'est indécidable : laquelle des balises conditionne le tout ?
Il vaut donc mieux utiliser le filtre |concat.
Ça devrait résoudre ton problème.

À part ça, si on bloque sur des limites de l'analyseur syntaxique de SPIP,
il y a une ultime solution : faire un filtre sur mesure,
auquel le passe tous les éléments utiles, qui fait le boulot en php
et qui renvoie la valeur au squelette SPIP.
S'il ne sert qu'une fois, il va dans le fichier _fonctions associé au fichier squelette qui l'utilise.
Ainsi ça reste clair et facilement lisible à la fois pour le codeur et pour SPIP.

JLuc

Le 12/10/2017 à 13:35, JLuc a écrit :

S'il ne sert qu'une fois, il va dans le fichier _fonctions associé au fichier squelette qui l'utilise.

Ah, je ne connaissais pas cette possibilité de faire différents fichiers _fonctions... Intéressant ! C'est documenté quelque part ?

Le 12/10/2017 à 13:45, Manu a écrit :

Le 12/10/2017 à 13:35, JLuc a écrit :

S'il ne sert qu'une fois, il va dans le fichier _fonctions associé au fichier squelette qui l'utilise.

Ah, je ne connaissais pas cette possibilité de faire différents fichiers _fonctions... Intéressant ! C'est documenté quelque part ?

spip.net est grand
JL

Le 12/10/2017 à 13:45, Manu a écrit :

Le 12/10/2017 à 13:35, JLuc a écrit :

S'il ne sert qu'une fois, il va dans le fichier _fonctions associé au fichier squelette qui l'utilise.

Ah, je ne connaissais pas cette possibilité de faire différents fichiers _fonctions... Intéressant ! C'est documenté quelque part ?