Opérateurs logiques "AND" "OR" -
raiyul - 05/07/2017
Ceci pourra être utile à plusieurs
En passant de la version 2.1.5 à la version 2.2.1 (en langue française), j'ai constaté ceci qui pourra venir en aide à plusieurs.
Dans un patron (template) de menu j'avais un code semblable à ceci :
{if condition_1
or (condition_2
and condition 3)}
du code {\if}.
Avec la version 2.2.1 (en langue française) ça ne marche plus
.
Remplacement par
{if condition_1
|| (condition_2
&& condition 3)}
du code {\if} et ça marche
.
Donc remplacement de l'opérateur
AND par && et de l'opérateur
OR par ||.
C'est tout simple, mais très utile.
Opérateurs logiques "AND" "OR" -
airelibre - 05/07/2017
Bonjour,
merci mais je viens de tester avec succès :
Code :
{$cond1=false}
{$cond2=true}
{$cond3=true}
{if $cond1 or ($cond2 and $cond3)}
ok !
{/if}
Ca m'étonnerait que Smarty ait changé cela - peux-tu nous donner ton code ? Merci !
Opérateurs logiques "AND" "OR" -
raiyul - 05/07/2017
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.
Opérateurs logiques "AND" "OR" -
airelibre - 07/07/2017
J'ai testé avec succès les opérateurs de comparaison or / and dans Navigator.
C'est bien par Navigator que tu passes ?
Opérateurs logiques "AND" "OR" -
jce76350 - 07/07/2017
Citation :Et je précise que le site est installé en français.
Tu as récupéré le fichier "en français" sur quel site ??
Opérateurs logiques "AND" "OR" -
raiyul - 07/07/2017
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é.
Opérateurs logiques "AND" "OR" -
jce76350 - 07/07/2017
Citation :cmsms-2.2.1-install.expanded.zip
c'est bon mais pourquoi utiliser cmsms-2.2.1-install.expanded.zip et non le cmsms-2.2.1-install.zip
Citation :avant la mise à jour tout fonctionnait admirablement avec AND et OR dans la navigation. Sinon rien n'avait été modifié.
Ce qui est bizarre c'est que airelibre n'a pas de soucis, mais alors
poste dans
le Forum EN en donnant le maximum de précisons sur ton gabarit et avec quel module tu l’utilises maintenant et avant la mise à jour.
Indique aussi version PHP et serveur utilisé
A la rigueur tu peux mettre un lien sur cette discussion pour suivre
suivre sur le forum EN
https://forum.cmsmadesimple.org/viewtopic.php?f=3&t=76885
Opérateurs logiques "AND" "OR" -
raiyul - 10/07/2017
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.
Opérateurs logiques "AND" "OR" -
airelibre - 10/07/2017
Merci pour ces explications - je n'avais pas testé sans blanc car en effet, l'interpréteur ne peut pas comprendre :
Ca parait logique
Bonne continuation
Opérateurs logiques "AND" "OR" -
raiyul - 10/07/2017
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]
Opérateurs logiques "AND" "OR" -
airelibre - 10/07/2017
ok merci pour tous les futurs lecteurs
Opérateurs logiques "AND" "OR" -
Ouik - 10/07/2017
C'est étonnant que ça ait fonctionné, il faut croire que smarty avait une certaine tolérance…