Annotation
difficile
Nella sezione precedente si è in realtà già visto come le annotazioni vengono aggiunte ad un oggetto e che sono fondamentalmente un dizionario python. Ma prima che ciò sia possibile, si deve aggiungere una linea al configure.zcml di keywordannotator:
<include package="zope.app.annotation" />
Questa direttiva carica un'altra diretiva zcml che si trova nella directory del software zope, nel file lib/python/zope/app/annotation/configure.zcml:
<adapter
for=".interfaces.IAttributeAnnotatable"
provides=".interfaces.IAnnotations"
factory=".attribute.AttributeAnnotations"
/>
Ciò in realtà conclude la strategia che si voleva attuare. Tutto il codice e la configurazione sono ora pronti per aggiungere quelle annotazioni ad una WeblogEntry adattandola se implementa o fornisce l'interfaccia IMaudio, che viene aggiunta ad essa da una utility se essa decide che si verificano le condizioni appropriate dopo che ha avuto luogo un evento gestito da un gestore eventi. (scritto a parole sembra un processo quasi incomprenibile).
Aggiungere annotazioni
A questo punto, se si verifica lo stato delle cose al livello Plone, si può aggiungere una normale WeblogEntry e contrassegnarla con una keyword 'audio'. Così il codice si assicura che venga fornita l'interfaccia IMaudio. E questo è tutto, ma non c'è ancora un modo per mettere qualcosa nelle annotazioni. Ciò può essere risolto. Si installa per prima cosa un nuovo prodotto: CMFonFive.
Forse un giorno questo prodotto verrà assimilato nel nucleo del CMF (Plone è basato su un CMF, Content Management Framework). Ma per ora questo prodotto extra servirà per le seguenti linee che vanno aggiunte nel configure.zcml di quadapter:
<browser:menu
id="object_tabs"
title="Object tabs" />
<browser:menuItem
for="Products.quadapter.interfaces.IMaudio"
menu="object_tabs"
title="Audio urls"
action="maudio_edit"
description="Edit form for audio urls"
permission="zope2.ManageProperties"
/>
Ciò aggiunge nel sito Plone un elemento nel menù ai tab di ogni oggetto che implementa l'interfaccia IMaudio. Quando si aggiunge questo codice, riavviare l'istanza Zope, e osservare una WeblogEntry che abbia una delle parole speciali e quindi che fornisca l'interfaccia IMaudio, si vedrà un tab che collega all'azione maudio_edit.
Il lavoro è quasi finito. Serve creare un pannello che corrisponda a quel tab, che richiami il codice che imposta Annotations per quest'oggetto. Se si conosce come creare un pannello di modifica (edit form) in html, si è probabilmente in grado di superare senza problemi questa fase, possibilmente usando il prodotto Archetypes.
Visualizzare annotazioni
Una volta aggiunti i link nell'annotazione di una WeblogEntry, si vuole anche poterli visualizzare quando si accede a una WeblogEntry nel proprio browser. Si può usare un'altra tecnica Zope 3 per far ciò: la BrowserView. Essenzialmente anche questo è un adapter. Si deve definire una BrowserView in quadapter:
<browser:page
name="audio_entry_view"
for="Products.quadapter.interfaces.IMaudio"
permission="zope2.View"
allowed_interface="Products.quadapter.interfaces.IAudioWeblogView"
class=".browser.AudioWeblogView"
/>
Ciò significa essenzialmente che per un oggetto che fornisce l'interfaccia IMaudio si ha una classe python che fornisce alcune funzioni da richiamare in una page template html. Infatti, si può ora copiare il file entry_macros.pt da Quills e aggiungere queste linee al punto giusto:
<tal:imaudio tal:define="view entry/@@audio_entry_view|nothing;"
tal:condition="view">
<metal:block use-macro="here/maudio_macros/macros/extratext" />
</tal:imaudio>
Ciò usa un file maudio_macros.pt che prende i link dagli oggetti. Ora quando si visualizza una normale WeblogEntry appare ciò che ci si aspetta appaia. Ma quando si visualizza una voce con l'interfaccia IMaudio, per cui sono stati aggiunti link con il pannello di cui si è parlato sopra, si noterà subito anche del testo extra, ovvero i link. I dettagli e le rifiniture del lavoro sono esercizi abbastanza semplici e sono costituiti da tecniche standard riguardanti i page template, che dovrebbero essere familiari e che non sono molto interessanti in questo contesto. Se non si riesce a completare il progetto, si può contattare l'autore.
