Traitement des fichiers ZCML

Quand les fichiers ZCML sont-ils traîtés ?

Les fichiers ZCML sont traîtés uniquement lors du démarrage de votre instance Zope, et le plus tard possible avant le traitement de la première requête par le publisher.

Ce traitement commence par lire le fichier $INSTANCE_HOME/etc/site.zcml. Comme les commentaires de ce fichier nous l'indiquent, celui-ci commence par traiter le package Products.Five, puis traite dans cet ordre :

  • Les fichiers meta.zcml. Ces fichiers spéciaux, sur lesquels nous reviendrons par la suite, sont dédiés aux définitions des vocabulaires ZCML (namespaces, éléments et attributs) définis par certains composants de Zope et Plone, voire certains composants de tierce partie tels iw.fss, collective.monkeypatcher.
  • Les fichiers configure.zcml. Ces fichiers, les plus courants, utilisent les services et éléments définis dans les divers fichiers meta.zcml pour configurer et intégrer les éléments logiciels dans les composants dans lesquels ils figurent.
  • Les fichier overrides.zcml. Ces fichiers permettent de remplacer une ou plusieurs directives figurant dans un fichier configure.zcml. Par exemple, si vous voulez dans votre policy product changer la vue par défaut d'un contenu définie dans un composant de tierce partie par une vie personnalisée, ou modifier une viewlet standard, la façon la plus simple de procéder est de fournir ceci dans un fichier overrides.zcml.

Attention

Pour ceux qui connaissent déjà Zope 3 / Bluebream, les fichiers ftesting.zcml ne sont pas pris en compte par Zope 2.

Comment déclarer son ou ses fichiers ZCML ?

Comme nous l'avons vu plus haut, Zope, lors du démarrage, ne s'intéresse qu'au seul fichier $INSTANCE_HOME/etc/site.zcml. Le langage ZCML inclut dans son namespace standard l'élément <include> qui permet d'inclure - comme son nom l'indique - les directives ZCML d'un fichier ou d'un package [1].

[1]Nous reviendrons plus en détail sur cette directive dans la référence ZCML en fin de ce chapitre.

Pour que les directives des fichiers configure.zcml, et éventuellement overrides.zcml ou plus rarement meta.zcml soient traitées au démarrage de votre instance, encore faut-il que ces fichiers soient référencés dans ceux appellés depuis $INSTANCE_HOME/etc/site.zcml.

C'est fastidieux. Heureusement, les développeurs du recipe plone.recipe.zope2instance que vous utilisez forcément pour configurer votre déploiement avec buildout vous permettent de créer automatiquement une jonction entre le fichier $INSTANCE_HOME/etc/site.zcml et vos configure.zcml, overrides.zcml et meta.zcml. Dans la mesure bien sûr et comme recommandé, où vous placez ces fichiers dans le répertoire principal de votre package.

Exemple :

...
[instance]
recipe = plone.recipe.zope2instance
...
zcml =
    mon.composant
    mon.composant-overrides
    nom.composant-meta

Comme vous l'aurez certainement compris, la ligne mon.composant va permettre de traiter le fichier configure.zcml de ce package Python, mon.composant-overrides va permettre de traiter son fichier overrides.zcml et nom.composant-meta va permettre de traiter son fichier meta.zcml lors du prochain démarrage de votre instance.

Attention

Dans l'exemple ci-avant, mon.composant est le nom du package Python qui inclut les fichiers *.zcml. Et non le nom de l'egg qui peut être différent dans certains cas, heureusement rares.

Mieux, depuis Plone 3.2, plus aucune mentions aux éventuels fichiers *.zcml de vos composants depuis l'adoption en standard du composant z3C.autoinclude. Sans entrer dans les détails de fonctionnement de ce composant, il vous suffit de placer les lignes suivantes dans l'appel de la fonction setup, dans le fichier setup.py de votre composant :

# ...
def setup(
    # ...
    entry_points="""
    # -*- Entry points: -*-
    [z3c.autoinclude.plugin]
    target = plone
    """
    # ...
    )

À partir de ce moment, et dans la mesure où votre composant est une extension pour Plone, les intégrateurs de votre composant n'auront plus besoin de déclarer celui-ci dans la liste zcml du recipe plone.recipe.zope2instance.

Table des matières

Sujet précédent

Introduction au ZCML

Sujet suivant

Les directives ZCML

Cette page


blog comments powered by Disqus