Title: Zope
1 2 - Quest-ce que cest que ça ?
- A quoi ça sert ?
- Comment ça marche ?
- Démo pratique de quelques aspects particuliers
(portail)
31. Quest-ce que ?
- Z Object Publishing Environment
- Advanced web application server framework
- Open source il est possible de comprendre en
profondeur comment il fonctionne - Orienté objet. Les éléments publiés sur le web ne
sont pas des fichiers, mais des objets - Sécurisé
- Multi-plate-forme Windows, Unix, Mac
4Les objets dans
- Un objet est défini par
- son état (ensemble des valeurs de ses attributs)
- son comportement (ensemble des méthodes qui lui
sont applicables). - Il appartient à une classe (qui peut être dérivée
d'une super-classe, etc) - Les objets Zope les plus courants appartiennent
aux classes Folder, DTML Document et DTML Method. - Ils sont persistants, leur durée de vie dépasse
celle de l'application (généralement on instancie
un objet quand on en a besoin, et on le détruit
quand on en a plus besoin). Un objet persistant
se sauvegarde et se restaure lui-même. - Le composant ZODB se charge de la persistance des
objets.
5FRAMEWORK
COMPOSANTS
ZServerHTTP requests, responsesChannels and
Threads, Buffering
ContentFolder, File, Image, Document
TemplatePage Document Template
ZpublisherURL traversal, access controlArgument
and exception handling
ScriptsPython Script, External Method
ZODB (Zope Objects Data Base) Objects,
transactions, undo, history, versions
Database InterfaceAdapter, SQL Method, Search
Wizzard
- - - - -
Storages
ZClass
Undoable non-undoable remote
Python based Products
File Berkeley ZEO
Zope architecture
Site Building Objects
6ZServer
- ZServerServer web multi-thread (plusieurs
utilisateurs peuvent se brancher en même
temps).Supporte HTTP, FTP et PCGI (persistent
CGI). En réalité, ZServer est un framwork et
ZPublisher en plug-in. ZServer reçoit les
requêtes venant du web, les "prétraite"
(preprocessing) selon les standards CGI et
appelle ZPublisher. Ensuite ZServer envoie la
réponse de ZPublisher sur Internet.
7ZPublisher
- Zope met des objets sur le web. On appelle cela
publier des objets. Une des caractéristiques
uniques de Zope est sa manière d'atteindre les
objets et d'appeler les méthodes simplement en
remontant les URL. En plus de rendre les objets
disponibles pour le protocole HTTP, Zope en
permet l'accès aux protocoles FTP, WebDAV et
XML-RPC Remote Procedure Call XML pour
l'encodage, HTTP pour le transfert). - URL Traversal processus par lequel Zope touve
l'objet demandé par la requête. Le processus
dépend de l'acquisition, il est donc sensible au
contexte (il ne dépend pas uniquement de l'URL).
8ZODB
- Zope ne conserve pas les composants du site dans
les fichiers du système d'exploitation, mais dans
une base de données orientée objet. Ainsi chaque
objet est implémenté par classe, ce qui rend
possible de leur attribuer des propriétés et d'y
définir des méthodes. La maintenance du site en
est grandement facilitée. - Mais la ZODB a un autre avantage essentiel c'est
une base de données transactionnelle,
c'est-Ã -dire qu'une transaction (transfert de
fichiers) qui échoue ne menace pas l'intégrité du
contenu. Zope détecte si une transaction est
incomplète, ou si elle interfère avec une autre
transaction, et peut l'annuler (undo). Il existe
deux types de transactions transactions à court
terme, utiles pour protéger les opération d'une
simple requête, et les transactions à long terme,
appelées versions, autorisent des développements
concurrents d'un même fichier.
9ZEO
- Zope Enterprise Object permet de faire tourner
un site sur plusieurs ordinateurs - Quand le site est très actif, un ordinateur peut
se crasher. Les autres répondent aux requêtes. - On installe un ZEO serveur et plusieurs ZEO
clients (même version de Zope, mêmes Products)
10Templates
- Document Template est le principal outil de
composition de Zope. Il s'agit d'un modèle
statique, qui contient des commandes pour ajouter
du texte qui leur sera substitué. La syntaxe est
semblable au HTML, mais elle permet d'inclure
dans des pages HTML d'autres pages (idem SSI) ou
objets. Ces commandes sont appelées DTML
(Document Template Markup Language). - Document Template contient des commandes pour
- l'inclusion de tous types d'objets
- l'itération
- le rendement conditionnel de texte (empêche
l'affichage d'un texte ou en affiche un autre
suivant les conditions)
11Templates
- call/return appelle un objet pour ses effets de
bord (p.ex mettre à jour une propriété, envoyer
un e-mail) ou pour contrôler ses valeurs
retournées. - gestion des exceptions (erreurs)
- présentation hiérarchique interactive des
structures hiérarchisées
12Products
- Ces produits se trouvent dans le dossier
webserver/lib/python/products. C'est là qu'il
faut les installer. Le site de zope en propose
plus de 400. S'ils sont convenablement installés,
ils peuvent être ajoutés partout, en cliquant sur
add. - Les products sont extrèmement variés, il en
existe dans tous les domaines, et rien n'empêche
d'en programmer soi-même en Python.
13- Possibilité dinterfaçage avec des systèmes
externes, bases de données, systèmes RPC ou
autres sites web. - Possibilités infinies et très simples de faire
croître un site. Les possibilités de Zope peuvent
être largement étendues, grâce à la créativité de
sa communauté.
- Avec un moteur de recherche relativement
efficace
141. Quest-ce que ? (suite)
- Interface basée sur le web linterface de
management de Zope souvre dans le navigateur - Permet décrire des applications dans
plusieurslangages de script Python, Perl et le
langage de Zope DTML - Gratuit
- Une communauté très active et qualifiée
152. A quoi sert ?
- Permet de construire des sites web dynamiques
- Modulaires
- séparation claire entre contenu, logique et
présentation, - composants paramétrables et configurables,
- permettant une unité de style du site,
- et une navigation uniforme, sensible au contexte,
mise à jour automatiquement.
162. A quoi sert ?
- Ce qui facilite la gestion du style d'un site,
puisque chaque module inclu dans les pages se
réfère à la même CSS, - permet une navigation uniforme dans tout le site,
- une indexation automatique des pages, et
- l'utilisation d'un outil de recherche très utile
dans un site d'une certaine importance. - Offre une interaction évoluée et des possibilités
de personnalisation pour chaque visiteur.
173. Comment marche ?
- Installation
- Premiers contacts
- Lenvironnement de développement
- Lacquisition
- Le DTML par le menu
183. Comment marche ?
- Installation
- Premiers contacts
- Lenvironnement de développement
- Lacquisition
- Le DTML par le menu
19Installation
- Télécharger Zope http//www.zope.org/Product
s/Zope - Sous Windows, exécuter setup.exe
- NT ou 2k l'installer en tant que service
(manuel) - Pour entrer dans lenvironnement de
développement, pointer le navigateur vers
http//localhost8080/manageA TECFA
http//tecfa.unige.ch9080/manage
20Installation
- Se connecter en utilisant nom et mot de passe
créés lors de linstallation. - Créer un répertoire qui contiendra les éléments
de votre site. - Y copier index_html, standard_html_header et
standard_html_footer de la racine.
21Installation des composants
- Depuis la page http//www.zope.org/Products,
télécharger le composant. - Le déziper
- Placer les dossiers dans le répertoire où vous
avez installé Zope (par défaut WebServer), sous
/lib/python/Products. - Vérifier depuis le Control_panel de Zope, lien
Product management, qu'il est bien installé. - Si c'est le cas, il sera disponible dans le
drop-down Select type to add .
22(No Transcript)
23Installation
- Précaution faire régulièrement un back-up du
fichier Data.fs, qui se trouve dans le dossier
var.
243. Comment marche ?
- Installation
- Premiers contacts
- Lenvironnement de développement
- Lacquisition
- Le DTML par le menu
25Premiers contacts
- Créer un utilisateur cliquer sur le dossier
add_user, puis sur le bouton Add une fois les
champs renseignés - Créer une page le code HTML est contenu dans des
objets. Il suffit dun créer un de type
DTML_document - LID est essentiel, il permettra à Zope de
référencer lobjet. Le titre apparaîtra dans le
document, appelé par la méthode title_or_id. - Cliquer sur Add pour lajouter au dossier courant
26- Entrer lURL http//localhost8080/Â
id_du_fichier (p.ex. ..8080/toto) pour voir
laspect dun objet sommaire. - Revenir à lenvironnement de management, et
cliquer sur lobjet. On devrait voir
ceciltdtml-var standard_html_headergtlth2gtltdtml-v
ar title_or_idgtlt/h2gtltpgtThis is the ltdtml-var
idgt Document.lt/pgtltdtml-var standard_html_footergt
Cest le code par défaut dun DTML_document.
27DTML Document / DTML Method
- Ces deux objets ont la même interface, et il est
souvent difficile de savoir lequel utiliser. - S'il s'agit de publier un contenu, utiliser DTML
Document. S'il s'agit de manipuler ou d'appeler
d'autres objets, utiliser DTML Method
(presentation templates définir des layouts
séparément du contenu).
28ltdtml-var gt
- Toutes les balises du DTML commencent par ltdtml-.
- ltdtml-var permet dinsérer une variable.
- id est le contenu de lidentifiant de lobjet
- title_or_id est une méthode qui renvoie le titre
de lobjet sil existe, sinon son id - standard_html_header et standard_html_footer
sont des objets qui seront inclus dans lobjet
appelant.
29ltdtml-var gt
- Linstruction ltdtml-vargtpermet dinclure des
variables, le résultat de lappel dune fonction
et des objets. Elle ne se ferme pas. - Elle a des attributs P.ex. missingltdtml-var
truc missing"il n'existe pas , ce truc"gt - Voir les attributs dans DTML Reference, Appendice
A de "Zope Book"
30Ecrire en HTML
- Il est évidemment possible d'écrire des pages
HTML sans profiter du DTML. Zope jouera alors le
rôle d'un serveur web statique. - Il est aussi possible d'importer des pages HTML
pour les convertir au format DTML. Dans le pop-up
de Add, sélectionner Add DTML Document, dont le
dernier élément est Browse. Choisir le fichier
texte, lui donner un id, et cliquer Add.
31Importer des images
- Depuis la racine du site, ajouter un objet Image
- Renseignez id et title
- Avec Parcourir chercher limage
- Cliquer sur Add. Lobjet apparaît désormais à la
racine du site, et peut être utilisé dans toutes
les pages avec la balise HTML ltIMG
SRC"id_de_image" gt (p.ex ltIMG SRC" image " gt).
32DTML sommairepetit cas pratique
- Vous avez installé Zope pour permettre à vos
collègues de publier des textes sur le web. Ils
ignorent tout du HTML. - Créez un dossier utilisateurs et intitulez-le
comme il vous plaît. Ne sélectionnez aucune
option. - Puis dans ce dossier, créez un dossier par
collègue (au moins 3 pour la beauté de
l'exercice), sans cocher d'option.
33DTML sommaire (suite)
- Dans le dossier utilisateurs, créer une DTML
Method (et non un DTML Document) appelé (id)
index_html, et contenant le code
suivantltdtml-var standard_html_headergtltdtml-in
"objectValues('Folder')"gt ltA HREFltdtml-var
idgtgtltdtml-var titlegtlt/AgtltBRgtlt/dtml_ingt
ltdtml-var standard_html_footergt
34DTML sommaire (suite)
- Pour améliorer l'apparence du site, éditer la
méthode index_html du dossier utilisateurs et
introduire le code suivantltdtml-var
standard_html_headergtltTABLEgtltTRgtltTD
WIDTH"30"gt ltdtml-var DocumentListgtlt/TDgtlt/TRgt
lt/TABLEgtltdtml-var standard_html_footergt
35DTML sommaire (suite)
- Toujours dans le dossier utilisateurs créer une
DTML Method appelée FolderList contenant le code
suivantltPgtltA HREF"ltdtml-var
"PARENTS1.absolute_url()"gt"gtRetourlt/AgtltBRgtlt/Pgt
ltdtml-in "objectValues('Folder')"gt ltA
HREF"ltdtml-var idgt"gtltdtml-var titlegtlt/AgtltBRgtlt/dt
ml-ingt
36DTML sommaire (suite)
- et une DTML Method appelée DocumentList contenant
le code suivantltdtml-in "objectValues('DTML
Document')"gt ltH1gtltdtml-var title_or_idgtlt/H1gtltd
tml-var "_'sequence-item'"gtlt/dtml-ingt - Puis créer un DTML Document dans le dossier
utilisateurs appelé presentation contenant un
texte comme celui-ciCréez vos pages en insérant
des "DTML Documents" et des "Folder" dans votre
dossier personnel.
37DTML sommaire (suite)
- Enfin, permettez à chaque utilisateur de gérer
ses propres pages. Pour chaque utilisateur, se
placer dans le dossier /acl_users et ajouter un
utilisateur doté des propriétés suivantesid
identifiant ou nom de
l'utilisateurPassword mot de passe assigné Ã
cet utilisateurDomains laisser videRoles
ne sélectionner aucun rôle
38DTML sommaire (fin)
- Puis dans le dossier de chaque utilisateur,
cliquer sur Security et cliquer sur le lien Local
role sélectionner le nom de l'utilisateur dans
la liste de gauche et les rôles Manager et Owner
dans la liste de droite, puis cliquer sur Add. - Maintenant chaque utilisateur peut utiliser l'URL
http//localhost8080/utilisateurs/sonNom/manage
pour créer et modifier ses propres pages. Il n'a
accès qu'à sa partie personnelle, et ne peut pas
modifier votre travail. Toutes les pages peuvent
être vues par tout le monde.
393. Comment marche ?
- Installation
- Premiers contacts
- Lenvironnement de développement
- Lacquisition
- Le DTML par le menu
40L'environnement de développementManipulations
élémentaires
- Modifier un objet cliquer sur son nom.
- Ajouter un objet dans un dossier cliquer sur
son lien dans le cadre de gauche, puis
sélectionner dans la liste déroulant "Select
object to add" le type d'objet à ajouter. Lui
donner ensuite un id (deux objets ne peuvent pas
avoir le même id dans un même dossier) et un nom
(pas obligatoire). Cliquer sur Add. - Détruire un objet sur l'onglet "Contents" du
dossier parent cocher la case de l'objet, puis
sur "Delete".
41L'environnement de développementManipulations
élémentaires
- Renommer un objet pour changer son identifiant
sans en modifier le titre, ses propriétés en
général, le contenu le sélectionner, puis
cliquer sur le bouton Rename. - Changer le titre d'un objet aller dans l'onglet
"Properties" de cet objet. - Copier/coller
42L'environnement de développementManipulations
élémentaires
- Editer le contenu d'un objet cliquer deux fois
sur le nom de l'objet, ou aller à l'ongler
"Edit". Toujours cliquer sur "Save Changes" pour
que les changements deviennent effectifs - Editer les propriétés d'un objet aller Ã
l'onglet "Properties". Attention les propriétés
sont des attributs au sens de la programmation
objet pour un dossier, elles ne peuvent avoir le
même nom qu'un objet contenu dans ce dossier,
43L'environnement de développementManipulations
élémentaires
- et il n'est pas possible dans ce dossier de
créer un objet du même nom qu'un propriété
existante. - Les propriétés sont gérées automatiquement par
Zope en ajoutant des propriétés à un objet, on
autorise les utilisateurs à accéder à ces
propriétés et/ou à les modifier, s'ils ont les
permissions requises. - Les types de propriétés correspondent dans la
pratique aux types de champs des formulaires
HTML.
44L'environnement de développementManipulations
élémentaires
- Annulation undoZope intègre un mécanisme
d'annulation très efficace. Les objets de Zope
sont stockés dans une base de données, dont
l'architecture est conçue de manière à garder un
historique de toute modification qui y est
apportée. - Cette faculté d'annulation est gérée dossier par
dossier, ce qui permet d'avoir toujours une
vision des actions relatives au dossier courant.
45L'environnement de développementManipulations
élémentaires
- Version permet de modifier une partie du site
sans que ces modifications soient accessibles aux
autres utilisateurs. Permet de tester les
changements avant de les rendre publiques. - Il est possible de travailler à plusieurs sur une
version. - Dès qu'un objet a été modifié à partir d'une
version, il est vérouillé en modification hors de
cette version, et ne peut être modifié que dans
cette version. Aucun chevauchement n'est possible
avec d'autres modifications.
46L'environnement de développementEspace de noms
- Espace de nomsZope transforme une URL en appel
d'une méthode d'un objet ZODB. Il transmet son
namespace à la méthode qui permettra à l'objet de
se rendre. - Il s'agit d'une liste de variables qui permettent
à l'objet d'interagir avec son environnement. Il
peut contenir - les attributs et les méthodes définis par l'objet
lui-même - les attributs et les méthodes de ses conteneurs
récupérés par l'acquisition
47L'environnement de développement Espace de noms
- une variable spéciale, REQUEST, contenant des
informations spécifiques à la requête HTTP - un objet RESPONSE permettant de renvoyer des
en-têtes HTTP ou des codes de réponse au
navigateur. - les attributs et méthodes définis au sein de Zope
et accessibles par tous les objets. - La variable REQUEST contient les données de la
requête HTTP. C'est la variable la plus utilisée
et le meilleur moyen de récupérer des entrées de
l'utilisateur, pour les traiter dynamiquement.
48L'environnement de développement Espace de noms
- Par exampleltFORM ACTION"fomulaire"gtltTABLEgt
ltTRgt ltTHgtTexte lt/THgt ltTDgtltINPUT
TYPE"text" NAME"texte"gtlt/TDgt lt/TRgt ltTRgt
ltTHgtSélection lt/THgtltTDgt ltINPUT
TYPE"checkbox" NAME"select" VALUE"1"gt
ltBRgtltINPUT TYPE"checkbox" NAME"select"
VALUE"2"gt ltBRgtltINPUT TYPE"checkbox"
NAME"select" VALUE"3"gt lt/TDgtlt/TRgt ltTABLEgt
ltINPUT TYPE"submit" VALUE"Test"gtlt/FORMgt
49L'environnement de développement Espace de noms
- La validation du formulaire provoque un appel de
l'URL formulaire. Et donc de l'objet en question.
Dans l'objet formulaire, suivant les données
entrées par l'utilisateur, les expressions python
suivantes peuvent être vraies - REQUEST.text "Mon texte" REQUEST.select
"3"
50L'environnement de développement Espace de noms
- Par exemple , pour récupérer les valeurs obtenues
dans le formulaire précédent, écrire le DTML
Document suivant, auquel vous donnez l'id
formulaireltdtml-var standard_html_headergt - ltdtml-var expr"_.int(REQUEST.select)
5"gtltBRgtltdtml-var expr"REQUEST.texte"gt - ltdtml-var standard_html_footergt
51L'environnement de développement Espace de noms
- Pour voir le contenu de REQUEST, écrire un DTML
Document avec ce simple contenultdtml-var
standard_html_headergt - ltdtml-var REQUESTgt ltdtml-var
standard_html_footergt
52L'environnement de développementUtilisateurs,
rôles et permissions
- Les droits ne sont pas réglés au niveau des
utilisateurs, mais à travers des rôles. A chaque
utilisateur est affecté un ou plusieurs rôles. - Trois rôles particuliers
- Administrateur (Manager) dispose de tous les
droits - Propriétaire d'un objet (Owner). Permet de
déléguer l'administration de certains objets Ã
leur propriétaire. Il n'y a qu'un seul
propriétaire par objet. - Anonyme (anonymus user), correspondant à un
utilisateur pas encore identifié.
53L'environnement de développementUtilisateurs,
rôles et permissions
- D'autres rôles peuvent être créés.
- Lors de la création ou de la modification des
utilisateurs, le responsable peut affecter les
rôles qu'il souhaite à chacun d'eux. - La création de nouveaux rôles se fait dans
l'onglet Security des objets concernés local
roles - Ce rôle apparaît dans tous les sous-objets s'il
s'agit d'un objet conteneur. Il n'est pas
possible de retirer ce rôle dans les sous-objets.
54L'environnement de développementUtilisateurs,
rôles et permissions
- Il est possible et très pratique de créer des
rôles locaux pour des objets qui ne sont pas des
conteneurs (DTML Document en particulier) - Modification des permissionsDans l'onglet
Security de l'objet.
553. Comment marche ?
- Installation
- Premiers contacts
- Lenvironnement de développement
- Lacquisition
- Le DTML par le menu
56Acquisition
- L'acquisition est la technologie qui permet le
passage des comportements et contenus dynamiques
d'un objet Zope à un autre. - Le concept de l'acquisition est simple
- Des objets sont placés à l'intérieur d'autres
objets. - Ces objets acquièrent le contenu et les
comportements de leur conteneur (idem pour ce
conteneur etc.)..
57Acquisition
- La puissance de l'acquisition réside dans ce
partage automatique entre contenu et conteneur. - En créant Documents et Folders on ne construit
pas simplement un site, mais on construit une
structure d'information.
58Acquisition
- En plaçant un Document dans un Folder, on crée un
petit outil de partage d'information entre le
Document et le Folder. - Dans Zope, un Document p.ex. a accès au contenu
et au services de tous ses conteneurs. Si un des
Folder peut envoyer des mails, le Document le
pourra aussi sans que cela apparaisse dans son
code..
59Acquisition
- Ainsi les objets acquièrent et fournissent des
services. - L'acquisition va dans les deux sens. La
réutilisation des services est simple, puisqu'il
n'y a rien à faire de spécial pour qu'ils soient
disponibles pour d'autres objets. - Un Document dans un Folder acquière les
comportements du Folder. - Quid pour un Document qui est au centre d'une
"poupée russe" faite de différents Folder?. De
qui va-t-il acquérir les comportements?
60Acquisition
- L'acquisition agit sur toute la hiérarchie. Si
nous avons un Document au centre de trois Folder
- /Utilisateurs/Nooteboom/Romans/Rituels, le
Document Rituels acquière les comportements du
Folder Romans, qui acquière les comportements du
Folder Nooteboom, et ainsi de suite. - Chaque objet acquière les comportements d'un
objet, ou d'une collection d'objets. Ils peuvent
être nombreux, ce qui signifie qu'il bénéficiera
d'une panoplie très adaptée.
61Acquisition
- Comportements dynamiquesL'acquisition permet que
les comportements soient distribués partout dans
Zope. Quand on ajoute un objet, il n'y a pas
besoin de spécifier dans son code tous ses
comportements, mais seulement ceux qui lui sont
propres. Ce qui signifie qu'il est possible de
changer le comportement d'un objet en le
changeant de place dans la hiérarchie.
62Acquisition
- Exercice construire une hiérarchie d'au-moins 3
niveaux (Folders imbriqués) contenant chacun
quelques documents. Ecrire un index_html unique,
qui dès qu'on pointe vers un Folder en affichera
le contenu.
633. Comment marche ?
- Installation
- Premiers contacts
- Lenvironnement de développement
- Lacquisition
- Le DTML par le menu
64DTML
- Langage à balise pour modèle de document qui
peut - Afficher le contenu d'objets Zope
- Exécuter des méthodes sur des objet Zope
- Afficher des attributs d'objets
- Effectuer des tests sur ces variables
- Parcourir des boucles à partir de ces variables
- Gérer les exceptions
65DTML
- Le code DTML est interprété par
- DTML Document
- DTML Method
- Le DTML est interprété dans le corps du document,
jamais dans ses propriétés (du code écrit dans la
propriété title ne sera pas interprété) - Tous les traitements sont effectués sur le
serveur.
66Balises du DTML
Balises ouvrantes Balises fermantes
ltdtml-vargt
ltdtml-ingt lt/dtml-ingt
ltdtml-treegt lt/dtml-treegt
ltdtml-ifgt ltdtml-elsegtltdtml-elifgtltdtml-endifgtlt/dtml-ifgt
ltdtml-unlessgt lt/dtml unlessgt
67Balises du DTML
Balises ouvrantes Balises fermantes
ltdtml-withgt lt/dtml-withgt
ltdtml-letgt lt/dtml-letgt
ltdtml-callgt lt/dtml-callgt
ltdtml-trygt ltdtml-exceptgtltdtml-elsegtltdtml-finallygtlt/dtml-trygt
ltdtml-raisegt lt/dtml raisegt
68Balises du DTML
Balises ouvrantes Balises fermantes
ltdtml-commentgt lt/dtml-commentgt
ltdtml-returngt
ltdtml-sendmail lt/dtml-sendmailgt
ltdtml-mimegt lt/dtml-mimegt
69Attributs name et expr de ltdtml-var
- ltdtml-var name"title"gt et ltdtml-var titlegt sont
équivalents. - ltdtml-var "title"gt etltdtml-var expr"title"gt
sont équivalents. - Il est fortement conseillé de n'utiliser
implicitement que l'attribut name et toujours
préciser expr lors de l'utilisation de
l'attribut expr. - ltdtml-vargt est doté de nombreux attributs qui
permettent de spécifier la manière dont les
valeurs sont affichées.
70Attributs name et expr de ltdtml-var
- Avec l'attribut name on ne peut spécifier que des
noms de variables (objets, attributs, méthodes). - L'attribut expr permet d'insérer le contenu d'une
expression Python, ou effectuer des calculs
simplesltdtml-var expr"24 60"gt - expr est indispensable pour exécuter des méthodes
de l'espace de noms. Pour afficher le titre ou
l'identifiant du parent ltdtml-var
expr"PARENTS0.title_or_id ()"gt
71ltdtml-if gt
- Si l'attribut name fait référence à une propriété
ou un document inexistant, sa valeur est
considérée comme fausse. C'est la façon la plus
pratique de vérifier l'existence d'un document ou
d'une propriété. Dans le cas de expr, si un
attribut auquel il fait référence n'existe pas,
il y a erreur.
72ltdtml-callgt ltdtml-returngt
- Pour appeler une méthode ou un document sans
qu'il se "rende" (pour effectuer un traitement
sur le serveur p.ex), on utilise ltdtml-callgt, qui
n'accepte que expr et var comme attributs. - Pour obtenir en retour une valeur précise, on
utilise ltdtml-returngt, qui accepte les attributs
expr et var.ltdtml-if conditiongt ltdtml-return
"'Oui'"gtltdtml-elsegt ltdtml-return
"'Non'"gtlt/dtml-ifgt - Attention à la syntaxe des chaînes! Il est
interdit d'utiliser des guillemets dans les
expressions. Utiliser ''.
73ltdtml-callgt ltdtml-returngt
- ltdtml-returngt peut retourner n'importe quel type
de données. Pour renvoyer l'objet magasin
ltdtml-return "magasin"gt
74ltdtml-in gt
- Permet l'itération dans un Folder, dans les
propriétés d'un objet etc.. - Le contenu d'un bloc entre les tags in est une
sorte de template qui s'applique une fois Ã
chaque item d'une séquence.
75ltdtml-in propriétés gt
- Pour parcourir des listes.
- Exemple dans un Folder magasin créer un DTML
Document vide appelé catalogue. Lui affecter une
propriété articles de type lines. - Entrer 5 ou 6 articles.
- Dans le corps du DTML Document entrer ce
codeltdtml-var standard_html_headergtltdtml-in
articlesgt ltdtml-var sequence-itemgtltBRgtlt/dtml-ingt
ltdtml-var standard_html_footergt
76ltdtml-ingt
- Cliquer sur l'onglet View.
- ltdtml-in gt accepte les attributs name et
expr.Elle renvoie une erreur si la propriété
n'existe pas. - Pour vérifier qu'il y a un ou des article(s) il
suffit d'écrire.ltdtml-in articlesgt
ltdtml-var sequence-itemgtltBRgtltdtml-elsegt
ltH2gtAucun articlelt/H2gtlt/dtml-ingt
77ltdtml-in liste d'objets gt
- Il faut stocker les articles dans des objets
Zope. - Créer un dossier articles dans le dossier courant
- Puis 1 DTML Document par article. Leur donner un
ID du type Art_01 etc..Supprimer le contenu par
défaut. - Dans la propriété title indiquer le nom de
l'article.
78ltdtml-in liste d'objets gt
- Les objets Folder possèdent une méthode
objectsIds() qui renvoie la liste des objets
qu'ils contiennent (sous forme d'une liste de
chaînes) - ltdtml-in "articles.objectIds()"gt ltdtml-var
sequence-itemgtltBRgtlt/dtml-ingt - Il est possible de spécifier quels objets sont
recherchésltdtml-in "articles.objectIds('DTML
Document')"gt ltdtml-var sequence-itemgtltBRgtlt/d
tml-ingt
79ltdtml-in liste d'objets gt
- Les objets Folder possèdent une méthode
objectsValues() qui renvoie la liste des objets
qu'ils contiennent (sous forme d'une liste) - ltdtml-in "articles.objectValues('DTML
Document')"gt ltdtml-var titlegtltBRgtlt/dtml-ingt - Pour obtenir aussi la référenceltdtml-in
"articles.objectValues('DTML Document')"gt
ltdtml-var idgtnbsp ltdtml-var titlegtltBRgtlt/dtml-in
gt
80ltdtml-in liste d'objets gt
- Pour obtenir en plus le contenu des objets
(description qu'il faut entrer dans le corps du
DTML Document de chaque article)ltdtml-in
"articles.objectValues('DTML Document')"gt
ltdtml-var idgtnbspltdtml-var titlegtnbspltdtml-va
r sequence-itemgtltBRgtlt/dtml-ingt
81ltdtml-in liste d'objets gt
- Parcourir des objets pour obtenir leur contenu?
Dans le dossier magasin créer une DTML Method
appelée index_html et y inclure ce
codeltdtml-var standard_html_headergtltdtml-in
"articles.objectValues('DTML Document')"gt
ltH1gtltdtml-var titlegtlt/H1gtltdtml-var
sequence-itemgtlt/dtml-ingtltdtml-var
standard_html_footergt
82ltdtml-in liste d'objets gt
- Se placer dans le dossier articles et cliquer sur
l'onglet View. Tous les articles apparaîssent les
uns à la suite des autres, grâce à l'acquisition. - Pour détecter le début ou la fin d'une
séquencesequence-start et sequence-end
83ltdtml-in liste d'objets gt
- ltdtml.in "articles.objectValues('DTML
Document')" ltdtml-if sequence-startgt
ltTABLE BORDER"1"gt ltTRgtltTHgtArticlelt/TH
gtlt/TRgt lt/dtml-ifgtltTRgtltTDgtltdtml-var
titlegtlt/TDgtlt/TRgt ltdtml-if sequence-endgt
lt/TABLEgt lt/dtml-ifgtltdtml-elsegt
Aucun articlelt/dtml-ingt
84ltdtml-in liste d'objets gt
- Pour obtenir l'index de l'élément, utiliser la
variable sequence-index - ltTRgtltTDgtltdtml-var sequence-indexgt ltdtml-var
titlegtlt/TDgtlt/TRgt - Pour parcourir des dictionnaires (liste de
valeurs associées à des clefs, comme
'ART_01''Avion' . 'ART_02' 'Bateau' ) on
utilise sequence-key pour obtenir le premier
indice, et sequence-item pour obtenir le second.
85ltdtml-in liste d'objets gt
- ltdtml-in "articles.objecItems('DTML
Document')"gt ltdtml-if sequence-startgt
ltTABLE BORDER"1"gt ltTRgtltTHgtRéférencelt/THgt
ltTHgtArticlelt/THgt lt/TRgt
lt/dtml-ifgtltTRgt ltTDgtltdtml-var sequence-keygtlt/TDgt(
ou ltdtml-var idgt) ltTDgtltdtml-var
titlegtlt/TDgtlt/TRgtltdtml-if sequence-endgt
lt/TABLEgtlt/dtml-ifgtltdtml-elsegt Aucun
articlelt/dtml-ingt
86ltdtml-in liste d'objets gt
- Exercice ajouter quelques DTML Documents
d'articles, en ajoutant à certains (pas à tous)
une propriété prix de type integer, et ajouter
dans le document catalogue une colonne au tableau
mentionnant le prix ou affichant "N/A" si aucun
prix n'a été défini.
87ltdtml-in liste d'objets gtsort
- Pour trier les objets par ordre de prix
croissant ltdtml-in "articles.objecItems('DTML
Document')" sort"prix"gt - Par ordre de prix décroissant ltdtml-in
"articles.objecItems('DTML Document')"
sort"prix" reversegt
88ltdtml-tree gt
- Permet de facilement construire dynamiquement un
arbre en HTML pour décrire une structure
hiérarchique.ltdtml-var standard_html_headergt
ltdtml-treegt ltdtml-var getIdgtlt/dtml-treegtlt/d
tml-var standard_html_footergt
89Page Template
- Outil de génération de pages web
- Pour que designers et programmeurs puissent
travailler facilement ensemble - Le designer peut faire évoluer le design sans se
préoccuper du contenu des pages - Page Template génère des pages HTML ou XML, pas
des pages dynamiques (apanage de DTML).
90Page Template création
- Depuis le add drop-down choisir Page Template,
lui donner un id. - Pour les détails, voir Zope Book p.67ss et 135ss.
- Un excellent article décrit en détail le
processus
91CMF un portail avec ZOPE
- Exemple Zopera.org,
- Liens
- http//www.zopera.org/Members/zopera/doc/04_zope_c
mf (CMF, CMF francisés, liens cassés) - Création d'un skin http//www.zopera.org/Members
/sdebruyne/sdebruyne/CrationdunSkin?portal_skinPr
intable - Docs http//cmf.zope.org/doc
92CMF un portail avec ZOPE
- Dans un nouveau Folder (il est ainsi possible
d'avoir plusieurs configurations différentes) - Ajouter l'objet CMFSite, qui permet d'administrer
le site. - Remplir les champs
- Il y a 4 pages
- Home Page
- Member Page
- News Page
- Search Page
93CMF un portail avec ZOPE
- Chaque membre peut changer, pour lui, le look de
l'espace qu'il peut atteindre. Le site possède un
skin par défaut, et les différents skin qu'il met
à disposition. - Pour changer de skin
- Dans CMFSite/portal_skin -gt onglet "content"
- Ajouter un nouveau Folder (p.ex MonSkin)
- Pour changer les couleurs p.ex aller dans
portal_skin/Nouvelle/stylesheet_properties - Sous "Customize" sélectionner p.ex MonSkin et
cliquer sur Customize - "Customizer" votre skin.
94CMF un portail avec ZOPE
- Pour mettre ce nouveau skin à disposition des
membres, aller à l'ongler Porperties de
portal_skin et ajouter - Name My Skin
- Layers MySkin, custom, nouvelle, content,
generic, control - Le skin est maintenant ajouté au Préférences.
95CMF un portail avec ZOPE
- Pour des changements plus consistants, il va
falloir changer le Layout, c'est-Ã -dire
intervenir dans le code des DTML Methods, le plus
difficile étant de trouver la bonne. - Les Folders de portal_skin contiennent toutes les
méthodes nécessaires pour les pages CMF. Elles
sont sous portal_skin/ onglet Content/generic. - Pour se faire la main, changer le contenu de
standard_html_header, index_html et
stabdard_html_footer. Le site entier changera.
96CMF un portail avec ZOPE
97CMF un portail avec ZOPE
- Pour des changements plus consistants, il va
falloir changer le Layout, c'est-Ã -dire
intervenir dans le code des DTML Methods, le plus
difficile étant de trouver la bonne. - Les Folders de portal_skin contiennent toutes les
méthodes nécessaires pour les pages CMF. Elles
sont sous portal_skin/ onglet Content/generic. - Pour se faire la main, changer le contenu de
standard_html_header, index_html et
stabdard_html_footer. Le site entier changera.
98CMF un portail avec ZOPE
- Pour des changements plus consistants, il va
falloir changer le Layout, c'est-Ã -dire
intervenir dans le code des DTML Methods, le plus
difficile étant de trouver la bonne. - Les Folders de portal_skin contiennent toutes les
méthodes nécessaires pour les pages CMF. Elles
sont sous portal_skin/ onglet Content/generic. - Pour se faire la main, changer le contenu de
standard_html_header, index_html et
stabdard_html_footer. Le site entier changera.
99Ressources
- Liens
- Le livre Zope http//www.zope.org/Members/michel
/ZB - CMF http//cmf.zope.org/doc/introduction.txt
-
- Sites
- http//www.zope.org/
- http//cmf.zope.org/
- http//www.zopera.org/
100Ressources
- Autres liens intéressants
- E-books http//www.beehive.de/zope
-