Messages : 23
Sujets : 3
Inscription : Apr 2016
Réputation :
0
Il s'agissait de code de menu, où le choix des pièces présentées du menu dépendait de conditions.
Voici un exemple corrigé (autres.tpl), patron utilisé dans un gabarit :
[ins]<ul style="list-style-type:none; ">
{foreach from=$nodelist item=node}
{if ($node->extra1 == 'retour' ) || ($node->extra1== 'annonce') ||
( ($node->extra1=='membres' && feu_smarty::is_user_memberof('Membres')) ||
($node->extra1=='auteurs' && feu_smarty::is_user_memberof('Auteurs'))||
($node->extra1=='attente' && feu_smarty::is_user_memberof('potentiel'))
)}
{if $node->current == true}
<li><a href="{$node->url}" class="currentpage"{if $node->target ne ""} target="{$node->target}"{/if}> {$node->menutext} </a>
{else}
<li><a href="{$node->url}">{$node->menutext}</a></li>
{/if}
{/if}
{/foreach}
</ul>
[/ins]
Il est possible que hors de l'utilisation dans un menu au sein d'un gabarit, AND et OR passent très bien. Et je précise que le site est installé en français.
Messages : 2,487
Sujets : 18
Inscription : Dec 2009
Réputation :
0
J'ai testé avec succès les opérateurs de comparaison or / and dans Navigator.
C'est bien par Navigator que tu passes ?
Messages : 23
Sujets : 3
Inscription : Apr 2016
Réputation :
0
Voici d'où provient la mise à jour de 2.1.5 à 2.2.1 :
s3.amazonaws.com/cmsms/downloads/13729/cmsms-2.2.1-install.expanded.zip
avant la mise à jour tout fonctionnait admirablement avec AND et OR dans la navigation. Sinon rien n'avait été modifié.
Messages : 23
Sujets : 3
Inscription : Apr 2016
Réputation :
0
J'ai placé ma description sur le forum anglais.
Calguy m'a répondu assez rapidement (voir sous forum.cmsmadesimple.org/viewtopic.php?f=3&t=76885&e=0)
Si j'ai bien compris la réponse de Calguy,
CMSMS 2.2 a introduit une nouvelle version de smarty qui applique probablement des règles plus strictes pour l'analyse syntaxique.
Les mots 'or' et 'and' sont des opérateurs permis à la place de '||' et '&&'. Le problème proviendrait des blancs.
L'interpréteur a de la peine à comprendre à l'analyse que le 'or' doit être considéré comme un opérateur.
Calguy propose d'ajouter des espaces autour de tous les opérateurs de comparaison.
Essai concluant
Si je veille a avoir des blancs partout avant et après les opérateurs 'or' et 'and' mon code fonctionne parfaitement.
Avoir des espaces avant et après tout opérateur 'and' ou 'or' est donc aussi une bonne solution.
Messages : 23
Sujets : 3
Inscription : Apr 2016
Réputation :
0
Oui oui, d’accord l'exemple donné est clair ; mais j'avais entre autres quelque chose de ce genre (je simplifie)
[ins](($node->extra1 == 'retour' )or ($node->extra1== 'annonce'))and (...[/ins]
et avant la version 2.2 ça fonctionnait sans espaces entre ')' et 'or' ou ')' et 'and'
avec bien des interpréteurs, ça fonctionnerait et ça a fonctionné de la version 1.2 à la version 2.1.5 de CMSMS
Maintenant il faut écrire le même ainsi
[ins](($node->extra1 == 'retour' ) or ($node->extra1== 'annonce')) and (...[/ins]
Messages : 2,310
Sujets : 71
Inscription : Jan 2008
Réputation :
1
C'est étonnant que ça ait fonctionné, il faut croire que smarty avait une certaine tolérance…
Ouik - communication . outils numériques . design graphique