Les page templates, ZPT
Les ZPT, Zope Page Templates, basé sur le TALES, voir ci-après, ont été développés
après le langage DTML. Leur grandes forces sont :
une syntaxe facile à lire, donc à maintenir
de permettre une collaboration sans interférence entre graphistes et
développeurs
un langage de macro permettant de réutiliser le code commun à plusieurs
gabarits
TALES
TALES signifie "Template Attribute Language Expression Syntax", c'est le langage
qui définit la forme des expressions utilisées dans les gabarits (templates) Zope.
Une expression peut être composée d'un ou plusieurs chemins séparés par un pipe |
(le caractère obtenu avec la combinaison altgr+6)
exemple : here/mon_champ | here/Title cette expression sera évaluée à la valeur de
mon_champ dans le contexte de l'objet appelé si ce champ existe, à la valeur du
champ Title dans le cas contraire
Les expressions TALES sont la base des ZPT, mais on peut les retrouver dans
d'autres situations, comme paramètrage de produits d'extension par exemple.
not
Une expression prefixée par not donne un résultat logique inversé. Cela est très utile
notamment dans l'évaluation consitionnelle, voir le paragraphe sur tal:condition.
exists
Permet de tester l'existence d'une variable dans le contexte courant, et donc d'éviter
de lever une erreur de type : Attribute error. Pour le traitement particulier des erreurs,
référez vous au paragraphe sur tal:on-error.
nocall
Le comportement par défaut est d'appeler l'objet obtenu par l'évaluation de
l'expression. Il est parfois utile d'obtenir un objet sans qu'il soit évalué. C'est le rôle
de l'expression nocall.
On utilise nocall le plus souvent pour obtenir une référence sur une fonction ou un
script afin de l'utiliser plus tard en lui passant des paramètres.
string
Une expression string permet de définir une chaîne de caractères. Vous pouvez
évaluer une variable dans la chaîne en la prefixant avec un signe dollar : $ .
string: ma variable vaut $ma_variable
Dans l'exemple précédent il est évident que ma_variable doit avoir été définie
auparavant.
Plus fréquemment on utilise une expression de type chemin. Dans ce cas il convient
de l'entourer d'accolades.
string:l'identifiant dans ce contexte est ${here/id}
python
une expression de ce type permet d'évaluer une expression python dans les gabarits.
La règle de séparation entre logique et présentation voudrait que l'on restreigne
au maximum les calculs au sein des gabarits. Il ne s'agit pourtant pas d'un
dogme absolu et cette commodité reste appréciable
Par exemple la fonction test permet des évaluations différentes en fonction d'une
condition.
python:test(condition, résultat si vrai, résultat sinon)
Voici les différentes valeurs qui sont évaluées à faux (false)
une chaîne vide
la valeur 0 (entier) ou 0.0 (flottant)
une liste ou un dictionnaire vide
La valeur python None
La valeur TAL nothing
Tout le reste est évalué à vrai (true)
TAL
Créer un gabarit
ici insertion d'une capture d'écran.
Comme pour tous les objets Zope, vous devez lui attribuer un identifiant (Id) unique
dans de dossier où vous le créez.
Vous avez alors le code par défaut d'un ZPT dans la zone d'édition :
<html>
<head>
<title tal:content="template/title">The title</title>
</head>
<body>
<h2><span tal:replace="here/title_or_id">content title or
id</span>
<span tal:condition="template/title"
tal:replace="template/title">optional template
title</span></h2>
This is Page Template <em tal:content="template/id">template
id</em>.
</body>
</html>
Vous remarquez immédiatement que ce code est très proche du HTML 'normal'.
Certaine expressions, préfixées par tal: et ignorées par les éditeurs graphiques
(Wysiwyg) permettent de donner les caractère dynamique à la page. Nous allons
revenir en détail sur chacun de ces attributs.
Vous pouvez changer le code par défaut à la création d'un ZPT en modifiant le
fichier :
votre_zope/lib/python/Products/PageTemplates/www/default.html
L'espace de nom.
L'espace de nom TAL est défini par :
xmlns:tal="http://xml.zope.org/namespaces/tal"
Ceci n'est pas une URL mais une URI, un identifiant unique. Zope exige une
déclaration d'un espace de nom XML si le type de contenu est différent de
text/htm. Ne pointez pas votre navigateur sur cette adresse, il n'y a rien à voir!
Attributs
TAL permet d'utiliser six attributs spéciaux dans le code HTML ou XML. Ils sont
évalués suivant l'ordre suivant quelque soit leur ordre d'apparition dans le code
source :
define : pour définir des variables locales au tag dans lequel elle sont définies.
condition : pour afficher un bloc en fonction de l'évaluation d'une expression.
repeat : pour définir une boucle autour d'un bloc d'affichage.
content : pour remplacer le contenu d'un tag.
replace : dans le même ordre d'idée que content, mais remplace également le tag
dans lequel il se trouve. A la même priorité que content.
attributes : pour affecter les attributs d'un tag.
omit-tag : pour supprimer des tags et alléger le rendu.
on-error : traitement des erreurs à l'exécution.
Définir des variables
Pour définir une variable locale dans un gabarit il faut utiliser tal:define. La portée de
la variable est limitée au tag html dans lequel elle est définie.
Exemple:
<div>
<div tal:define="ma_variable context/une_propriete">
<!-- dans ce div ma_variable peut être utilisée dans des
expressions tal:attributes, tal:content ... -->
</div>
<!-- ici ma_variable n'a plus de sens -->
</div>
Pour définir plusieurs variables dans un seul tag, il convient de les séparer par un
point virgule.
<tal:exemple tal:define="variable1 string:une chaine par exemple;
variable2 python:fonction
(context.propriete);" />
Les tests
Une condition peut être testée grâce au tag tal:condition.
<div tal:define="results python:get_results">
<div tal:condition="results">
... ici un code pour afficher les resultats...
</div>
<div tal:condition="not:results">
Pas de résultat
</div>
</div>
Il n'y a pas en TALES d'expression pour définir une alternative (else), c'est
1 / 9 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !