Bookmark and Share
Document Actions

Collegare componenti e ZCML

Up one level
Cose da sapere riguardo i component e come essi siano collegati tra di loro

I component sono strumenti di Plone 3 potenti e flessibili, ma leggermente più astratti dei page templates e degli script Python. Essi sono generalmente combinazioni di classi di Python e page templates collegati insieme in Zope Configuration Language (ZCML) a cui è stato dato un nome.

E' importante ricordare due cose riguardo i components
I componenti sono combinazioni di classi, templates, interfacce, permessi ecc.
Per riuscire a trovare i componenti è necessario prima di tutto guardare nei file .zcml e poi localizzare i loro nomi; questo procedimento permetterà di accedere a classi e templates che fanno parte dei componenti.
I componenti diventano operativi all'avvio di Zope Instance
Una volta che Zope ha letto il file .zcml sarà possibile avere accesso ad un componente. Dato che non è possibile sovrascrivere componenti già esistenti, si consiglia di crearne uno proprio riutilizzando alcune parti.

Parti di un Componente
Un componente diventa operativo tramite un'istruzione di ZCML (vedi esempio sotto). L'istruzione avrà una serie di “attributi” atti a indicare le varie sezioni facenti parte della sua creazione. Queste parti presentano quattro funzioni principali.

  1. Identificare il componente (nel caso di una viewlet questo avviene di solito con un attributo “nome”).
  2. Elaborare le informazioni che il componente dovrebbe mostrare (solitamente questo avviene con una classe Python e indicato con un attributo “classe”). Ad esempio, nel caso di una struttura di navigazione ad albero, questo processo ha il compito di determinare quale parte della struttura debba essere visualizzata per ogni pagina.
  3. Visualizzare le informazioni elaborate dalla classe del componente (questa operazione viene di solito svolta con un page template).
  4. Limitare la visione del componente; nel caso di una viewlet, la sua visione dovrebbe risultare limitata solo ad alcuni utenti registrati (tramite l'ausilio di un attributo “accesso”), oppure limitare la visione ad alcuni contenuti specifici (usando un attributo “per”).

Per ulteriori informazioni su questo argomento fare riferimento alla sezione parti di componente.

Linguaggio di Configurazione di Zope (ZCML)

Il Five Tutorial on WorldCookery.com fornisce un valido aiuto nella comprensione dello ZCML; esistono inoltre molti esempi e tutorial nella sezione documentazione del sito di Plone.

Ecco un esempio di direttiva ZCML che richiama la presentation viewlet (cioè che fornisce semplicemente un link alla versione presentazione di una pagina):

<configure    xmlns="http://namespaces.zope.org/zope"
xmlns:browser="http://namespaces.zope.org/browser">
<browser:viewlet
name="plone.presentation"
for="Products.ATContentTypes.interface.IATDocument"
manager="plone.app.layout.viewlets.interfaces.IAboveContentBody"
class=".presentation.PresentationViewlet"
permission="zope2.View"
/>
</configure>

Si possono notare tre cose:

  • Come ogni tipo di XML, ZCML usa namespaces - prestare attenzione ad essi se si sta scrivendo un file ZCML. Per i componenti dei theme la maggior parte delle volte si utilizza il browser namespace.
  • Gli attributi ZCML spesso si riferiscono a interfacce piuttosto che veri content types, classi o componenti (vedi gli attributi for e manager nell'esempio sopra). Le interfacce saranno discusse più approfonditamente nella prossima sezione.
  • Se si guarda con attenzione l'attributo class si noterà che inizia con un punto. Ciò significa che esso si trova nella stessa directory del file ZCML. Se invece non si trova nella stessa directory sarà necessario corredarlo di un nome completo.

Informazioni dettagliate sulle direttive ZCML sono disponibili nella sezione ZCML Reference dello Zope 3 API - http://apidoc.zope.org/++apidoc++/. Se si desidera acquisire uno stile pulito e disciplinato si consiglia di consultare la ZCML StyleGuide http://wiki.zope.org/zope3/ZCMLStyleGuide.

by Dario Pollino last modified 2009-05-20 10:52