Forum CMS Made Simple FR
Opérateurs logiques "AND" "OR" - Version imprimable

+- Forum CMS Made Simple FR (https://forum.cmsmadesimple.fr)
+-- Forum : Ressources (https://forum.cmsmadesimple.fr/forum-4.html)
+--- Forum : Développement et Astuces (https://forum.cmsmadesimple.fr/forum-15.html)
+--- Sujet : Opérateurs logiques "AND" "OR" (/thread-4042.html)



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 Sad .
Remplacement par
{if condition_1 || (condition_2 && condition 3)} du code {\if} et ça marche Smile .

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 :

Code :
{if $varor$var}
Ca parait logique Wink

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 Smile


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…