Zope - PowerPoint PPT Presentation

About This Presentation
Title:

Zope

Description:

Open source: il est possible de comprendre en profondeur comment il fonctionne ... Quand le site est tr s actif, un ordinateur peut se crasher. ... – PowerPoint PPT presentation

Number of Views:77
Avg rating:3.0/5.0
Slides: 92
Provided by: franoisfi
Category:
Tags: actif | zope

less

Transcript and Presenter's Notes

Title: Zope


1

2
  1. Quest-ce que cest que ça ?
  2. A quoi ça sert ?
  3. Comment ça marche ?
  4. Démo pratique de quelques aspects particuliers
    (portail)

3
1. 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

4
Les 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.

5
FRAMEWORK
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
6
ZServer
  • 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.

7
ZPublisher
  • 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).

8
ZODB
  • 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.

9
ZEO
  • 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)

10
Templates
  • 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)

11
Templates
  • 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

12
Products
  • 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

14
1. 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

15
2. 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.

16
2. 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.

17
3. Comment marche ?
  • Installation
  • Premiers contacts
  • Lenvironnement de développement
  • Lacquisition
  • Le DTML par le menu

18
3. Comment marche ?
  • Installation
  • Premiers contacts
  • Lenvironnement de développement
  • Lacquisition
  • Le DTML par le menu

19
Installation
  • 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

20
Installation
  • 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.

21
Installation 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)
23
Installation
  • Précaution faire régulièrement un back-up du
    fichier Data.fs, qui se trouve dans le dossier
    var.

24
3. Comment marche ?
  • Installation
  • Premiers contacts
  • Lenvironnement de développement
  • Lacquisition
  • Le DTML par le menu

25
Premiers 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.

27
DTML 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).

28
ltdtml-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.

29
ltdtml-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"

30
Ecrire 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.

31
Importer 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).

32
DTML 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.

33
DTML 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

34
DTML 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

35
DTML 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

36
DTML 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.

37
DTML 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

38
DTML 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.

39
3. Comment marche ?
  • Installation
  • Premiers contacts
  • Lenvironnement de développement
  • Lacquisition
  • Le DTML par le menu

40
L'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".

41
L'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

42
L'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,

43
L'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.

44
L'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.

45
L'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.

46
L'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

47
L'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.

48
L'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

49
L'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"

50
L'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

51
L'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

52
L'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é.

53
L'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.

54
L'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.

55
3. Comment marche ?
  • Installation
  • Premiers contacts
  • Lenvironnement de développement
  • Lacquisition
  • Le DTML par le menu

56
Acquisition
  • 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.)..

57
Acquisition
  • 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.

58
Acquisition
  • 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..

59
Acquisition
  • 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?

60
Acquisition
  • 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.

61
Acquisition
  • 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.

62
Acquisition
  • 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.

63
3. Comment marche ?
  • Installation
  • Premiers contacts
  • Lenvironnement de développement
  • Lacquisition
  • Le DTML par le menu

64
DTML
  • 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

65
DTML
  • 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.

66
Balises 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
67
Balises 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
68
Balises du DTML
Balises ouvrantes Balises fermantes
ltdtml-commentgt lt/dtml-commentgt
ltdtml-returngt
ltdtml-sendmail lt/dtml-sendmailgt
ltdtml-mimegt lt/dtml-mimegt
69
Attributs 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.

70
Attributs 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

71
ltdtml-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.

72
ltdtml-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 ''.

73
ltdtml-callgt ltdtml-returngt
  • ltdtml-returngt peut retourner n'importe quel type
    de données. Pour renvoyer l'objet magasin
    ltdtml-return "magasin"gt

74
ltdtml-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.

75
ltdtml-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

76
ltdtml-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

77
ltdtml-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.

78
ltdtml-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

79
ltdtml-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

80
ltdtml-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

81
ltdtml-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

82
ltdtml-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

83
ltdtml-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

84
ltdtml-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.

85
ltdtml-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

86
ltdtml-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.

87
ltdtml-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

88
ltdtml-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

89
Page 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).

90
Page 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

91
CMF 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

92
CMF 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

93
CMF 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.

94
CMF 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.

95
CMF 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.

96
CMF un portail avec ZOPE
  • c

97
CMF 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.

98
CMF 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.

99
Ressources
  • 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/

100
Ressources
  • Autres liens intéressants
  • E-books http//www.beehive.de/zope
Write a Comment
User Comments (0)
About PowerShow.com