Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

Opérateurs logiques "AND" "OR"
#1

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.
Répondre
#2

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 !
Répondre
#3

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.
Répondre
#4

J'ai testé avec succès les opérateurs de comparaison or / and dans Navigator.

C'est bien par Navigator que tu passes ?
Répondre
#5

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 ??

J-C Etiemble v 2.2.xx
Répondre
#6

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é.
Répondre
#7

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/viewtopi...=3&t=76885

J-C Etiemble v 2.2.xx
Répondre
#8

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.
Répondre
#9

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
Répondre
#10

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]
Répondre
#11

ok merci pour tous les futurs lecteurs Smile
Répondre
#12

C'est étonnant que ça ait fonctionné, il faut croire que smarty avait une certaine tolérance…

Ouik - communication . outils numériques . design graphique
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 2 visiteur(s)