152 lines
4.8 KiB
Plaintext
152 lines
4.8 KiB
Plaintext
<page xmlns="http://projectmallard.org/1.0/"
|
||
type="topic" id="misc-conditions" xml:lang="fr">
|
||
|
||
<info>
|
||
<revision docversion="0.1" date="2014-09-12" status="draft"/>
|
||
<link type="seealso" xref="misc-substvars" />
|
||
<credit type="author">
|
||
<name>Frédéric Péters</name>
|
||
<email>fpeters@entrouvert.com</email>
|
||
</credit>
|
||
|
||
</info>
|
||
|
||
<title>Exemples de conditions</title>
|
||
|
||
<p>
|
||
Dans la définition de pages conditionnelles et dans le paramétrage de sauts
|
||
dans le workflow, il y a besoin d'exprimer une condition sous forme d'une
|
||
expression Python. Cette page ne se veut évidemment pas un guide complet,
|
||
toutes les possibilités offertes par le langage Python étant possibles, mais
|
||
une série d'exemples concrets, rencontrés dans le paramétrage.
|
||
</p>
|
||
|
||
<note><p>Une explication sur les variables accessibles se trouve dans la page
|
||
<link xref="misc-substvars">variables de substitution</link>.
|
||
</p></note>
|
||
|
||
<section>
|
||
<title>Expressions simples</title>
|
||
|
||
<p>
|
||
Pour tester le code postal associé à l'utilisateur courant, par exemple
|
||
pour proposer une page différente aux habitants d'une commune particulière,
|
||
l'expression suivante pourrait être utilisée :
|
||
</p>
|
||
|
||
<example><code>session_user_var_codepostal == '07530'</code></example>
|
||
|
||
<p>
|
||
Dans le même ordre d'idée, pour les utilisateurs qui ne seraient <em>pas</em>
|
||
de cette commune :
|
||
</p>
|
||
|
||
<example><code>session_user_var_codepostal != '07530'</code></example>
|
||
|
||
<p>
|
||
De manière générale, la négative peut également être obtenue en entourant
|
||
l'expression d'un <code>not()</code> :
|
||
</p>
|
||
|
||
<example><code>not(session_user_var_codepostal == '07530')</code></example>
|
||
|
||
<p>
|
||
Il peut également être imaginé de viser un département entier, en regardant
|
||
les deux premiers chiffres, deux manières sont possibles :
|
||
</p>
|
||
|
||
<example><code>session_user_var_codepostal.startswith('07')</code></example>
|
||
|
||
<p>
|
||
Ou, en utilisant <code>[:2]</code> pour signifier « les deux premiers
|
||
caractères » :
|
||
</p>
|
||
|
||
<example><code>session_user_var_codepostal[:2] == '07'</code></example>
|
||
|
||
<p>
|
||
Pour afficher une page uniquement si un champ texte optionnel a été complété,
|
||
la condition serait la suivante : (en considérant un champ de formulaire
|
||
auquel la variable "texte" a été associée)
|
||
</p>
|
||
|
||
<example><code>bool(form_var_texte)</code></example>
|
||
|
||
<p>
|
||
Tout autre chose, pour une réservation, on pourrait vouloir afficher une
|
||
page supplémentaire demandant les noms des inscrits, quand l'inscription
|
||
est faite pour plusieurs personnes. L'utilisation de <code>int()</code>
|
||
permet les comparaisons numériques :
|
||
</p>
|
||
|
||
<example><code>int(form_var_nombre_de_reservations) > 1</code></example>
|
||
|
||
</section>
|
||
|
||
|
||
<section>
|
||
<title>Expressions combinées</title>
|
||
|
||
<p>
|
||
Pour étendre un exemple donné plus haut, si on voulait afficher une page aux
|
||
usagers de deux communes différentes, on combinerait les expressions avec le
|
||
mot-clé <code>or</code> :
|
||
</p>
|
||
|
||
<example><code>session_user_var_codepostal == '07520' or session_user_var_codepostal == '07530'</code></example>
|
||
|
||
<p>
|
||
Cela peut devenir long avec un grand nombre de codes postaux, la même
|
||
expression peut être réduite en expression simple avec <code>in</code> :
|
||
</p>
|
||
|
||
<example><code>session_user_var_codepostal in ('07510', '07520', '07530')</code></example>
|
||
|
||
<p>
|
||
Sur ces exemples de codes postaux, si l'application visait plusieurs pays, on
|
||
devrait combiner le test, pour par exemple avoir « 07530 » comme code postal
|
||
<em>et</em> « France » comme pays. Cela se fait avec le mot-clé
|
||
<code>and</code> :
|
||
</p>
|
||
|
||
<example><code>session_user_var_codepostal == '07530' and session_user_var_pays == 'France'</code></example>
|
||
|
||
</section>
|
||
|
||
<section>
|
||
<title>Condition sur un âge ou un délai</title>
|
||
|
||
<p>
|
||
Pour limiter une condition aux enfants dont l'âge est inférieur à 6 ans vous
|
||
pouvez utiliser la fonction <code>utils.age_in_years</code> sur une variable de
|
||
type date.
|
||
</p>
|
||
|
||
<example><code>utils.age_in_years(form_var_date_de_naissance) < 6</code></example>
|
||
|
||
<p>
|
||
Pour prendre en compte le nombre de mois vous disposez aussi de
|
||
<code>utils.age_in_years_and_months</code>. Ici l'âge à ne pas dépasser sera 6 ans
|
||
et 3 mois.
|
||
</p>
|
||
|
||
<example><code>utils.age_in_years_and_months(form_var_date_de_naissance) < (6, 3)</code></example>
|
||
|
||
<p>
|
||
Les délais en terme de jour se calculeront avec <code>utils.age_in_days</code>. Ici
|
||
le délai est de 31 jours à dater de la soumission d'un formulaire.
|
||
</p>
|
||
|
||
<example><code>utils.age_in_days(form_receipt_datetime) >= 31</code></example>
|
||
|
||
<p>
|
||
Les délais en terme de secondes se calculeront avec <code>utils.age_in_seconds</code>. Ici on attendra
|
||
au mieux deux heures (7200 secondes) avant de déclencher cette condition.
|
||
</p>
|
||
|
||
<example><code>utils.age_in_seconds(form_receipt_datetime) >= 7200</code></example>
|
||
|
||
</section>
|
||
|
||
</page>
|