Introduzione a ZOPE e PLONE a cura di Mauro Di Cecca www.tecnoteca.it www.tecnoteca.com
1. La storia di ZOPE Nel 1996 l’azienda americana Digital Creation realizza uno strumento di sviluppo per il web chiamato Bobo che distribuisce come prodotto open source. Nel 1997 realizza Principia, una potente e stabile piattaforma di sviluppo per applicazioni web, basata su Bobo, e la distribuisce come prodotto proprietario. Nonostante l’alta qualità, Principia non riesce a trovare una giusta collocazione nel mercato già saturo degli Application Server. Nel 1998 la Digital Creation decide di cercare capitale di rischio e l’esperto convocato consiglia la svolta strategica: riunire Bobo, Principia e i moduli del database in un unico prodotto da distribuire con codice aperto. Nasce ZOPE che è l’acronimo di Z Object Publishing Environment. A 6 anni di distanza si può giudicare vincente la scelta della Digital Creation. © Tecnoteca srl 2004
2. ZOPE: cos’è Zope (Z Objects Publishing Enviroment) è prodotto che aiuta nella creazione, nella gestione e nel servizio di complessi siti dinamici. Si utilizza ed amministra da un qualsiasi browser web attraverso una interfaccia omogenea. Più tecnicamente, è un framework per costruire applicazioni web. Applicazioni che utilizzano l'interfaccia web per presentare la loro interfaccia utente. Faremo quindi spesso riferimento a Zope come ad un web application server. © Tecnoteca srl 2004
3. Cosa fornisce ZOPE: i moduli I principali moduli componenti di ZOPE che interagiscono fra di loro per fornire i servizi descritti sono i seguenti: server web database di oggetti interfaccia di amministrazione Integrazione con database relazionali linguaggi di scripting © Tecnoteca srl 2004
4. L’architettura di ZOPE L'architettura di Zope è contenuta in un unico blocco modulare nel quale è possibile sostituire ognuno degli elementi con un altro equivalente. In questo modo non si è legati ad un particolare prodotto o produttore. Attraverso il sistema ZEO, Zope è in grado inoltre di distribuire il carico di lavoro su più server. © Tecnoteca srl 2004
potente gestione della collaborazione 5. I servizi principali Zope fornisce 3 servizi principali per lo sviluppo di applicazioni web: potente gestione della collaborazione gestione ed organizzazione dei contenuti gestione ed organizzazione delle componenti web © Tecnoteca srl 2004
6. Caratteristiche Object Oriented Zope è implementato principalmente in linguaggio Python, da cui ne eredita il completo orientamento agli oggetti. Un oggetto di Zope ha in genere uno dei seguenti ruoli: . contenuto . presentazione . logica La 'URL' è quindi un percorso in un insieme di contenitori, la cui struttura gerarchica viene mappata automaticamente sulla base dell'id dell'oggetto. Il tutto viene gestiti internamente dallo ZODB (Zope Object DataBase), un database transazionale ad alto livello. © Tecnoteca srl 2004
7. Vantaggi nell’utilizzo di ZOPE I vantaggi nell’utilizzo di Zope sono: gestione dinamica dei contenuti funzioni di ricerca avanzate integrazione con db esterni workflow editing remoto via browser ambiente integrato riutilizzo del codice versioning exporting e backup localizzazione vasta comunità di sviluppatori gestione integrata della sicurezza © Tecnoteca srl 2004
8. Caratteristiche principali Le caratteristiche principali di Zope sono: utilizzo su piattaforme diverse organizzazione in gerarchie di oggetti database object oriented interno web/ftp server interno prodotti sviluppati già pronti © Tecnoteca srl 2004
La versione stabile attuale, rilasciata il 2004-02-11, è la 2.7.0. 9. Installazione Zope, è un progetto OpenSource, ed è scaricabile dal sito http://www.zope.org. Una volta scaricato, nel caso di versione per windows, lo si installa con il classico 'doppio-click'. Per quanto riguarda la versione Linux, la procedura è leggermente più elaborata. La versione stabile attuale, rilasciata il 2004-02-11, è la 2.7.0. © Tecnoteca srl 2004
10. attivazione Di default Zope si mette in ascolto sulla porta 8080 (servizio http) e sulla porta 8021 (servizio ftp). E' comunque possibile far servire Zope da altri webservers (Microsoft IIS, Apache e altri). Per farlo partire basta cliccare sull'icona messa sulla barra di start di Windows. © Tecnoteca srl 2004
I 2 utenti iniziali sono admin e access. 11. utenti e folders I 2 utenti iniziali sono admin e access. I folders più importanti sono: products (riservato ai prodotti aggiuntivi) extensions (riservato agli script python) import (riservato ai file .zexp per l’importazione) var © Tecnoteca srl 2004
12. L’interfaccia utente Per accedere alla ZMI (Zope Management Interface) è sufficiente aprire il sito con suffisso '/manage', oppure tramite il link Zope Management Interface presente nella pagina di default una volta installato Zope. Vediamo brevemente le componenti di default costituenti la ZMI iniziale. © Tecnoteca srl 2004
13. ZMI - Il pannello di controllo Come dice il nome stesso, nel pannello di controllo è possibile gestire il sistema di base. Le sezioni maggiormente utilizzate sono le seguenti: Database Management: da dove è possibile monitorare l'attività del sito, gestire/ripulire la cache e sopratutto minimizzare l'occupazione del database. Product Management: dove vengono visualizzati tutti i prodotti e/o le componenti presenti ed installate nel sistema. © Tecnoteca srl 2004
14. ZMI – Lo User Folder (act_users) Nello User Folder vengono descritti gli utenti che sono stati definiti, ed è possibile aggiungerne di altri, o modificare quelli esistenti. Aggiunta di nuovi utenti Modifica utenti Assegnazione dei ruoli © Tecnoteca srl 2004
15. ZMI – methods e page templates index_html standard_error_message standard_html_header standard_html_footer Page templates: standard_template.pt © Tecnoteca srl 2004
16. ZMI – altri oggetti Altri interessanti oggetti presenti sono: error_log session Data Manager temp_folder © Tecnoteca srl 2004
17. ESEMPIO: Aggiunta di nuovi contenuti In alto a destra è presente un drop-down menu contenente tutti i prodotti installati e di default che possono essere aggiunti nel sistema. Basta semplicemente scegliere l'oggetto che si desidera aggiungere ed inserirlo. Una volta inserito si può personalizzarlo e aggiungergli proprietà. Ogni oggetto inserito diventa una URL del sito. La navigazione avviene in maniera del tutto analoga alla navigazione a folder di Windows®. © Tecnoteca srl 2004
18. ZMI - funzioni di copia/incolla - import/export – ecc. Le funzioni di base che si possono applicare agli oggetti visualizzati nella ZMI sono: Rinomina Taglia Copia Incolla Cancella seleziona tutto import/export © Tecnoteca srl 2004
Possiamo suddividere l'aspetto sicurezza sui seguenti punti: La sicurezza di solito comprende due concetti fondamentali: l'autenticazione e l'autorizzazione dell'utente. Esse consistono rispettivamente nel riconoscimento dell'utente e nella determinazione di che cosa l'utente possa fare all'interno del sistema Si noti che Zope fa una netta distinzione fra utilizzare e gestire una risorsa (o applicazione). Possiamo suddividere l'aspetto sicurezza sui seguenti punti: - autenticazione e autorizzazione - gestione della sicurezza © Tecnoteca srl 2004
20. Autenticazione e autorizzazione L'account degli utenti viene gestito tramite particolari folders, chiamati User Folders Quando viene richiesto l'accesso ad una risorsa protetta il sistema chiede all'utente di autenticarsi. Una volta autenticato, il processo di assegnazione dei permessi è suddiviso in 2 livelli intermedi: - ruoli (roles) - permessi (permissions) I 2 livelli sono collegati dalle politiche di sicurezza (security policies), che definiscono chi può fare cosa. © Tecnoteca srl 2004
21. Gestione della sicurezza La gestione della sicurezza di Zope si basa su tre concetti fondamentali: ruoli permessi politiche di sicurezza © Tecnoteca srl 2004
Oltre ad essere un web ed ftp server, Zope è anche un database server. 22. I database di ZOPE Oltre ad essere un web ed ftp server, Zope è anche un database server. Il database integrato di Zope è lo Z Gadfly, seppur piuttosto limitato. Per gestioni complesse è preferibile utilizzare database esterni come ad esempio MySQL. A prescindere dal database scelto, la metodologia di utilizzo è sempre la stessa. © Tecnoteca srl 2004
23. Gli oggetti base di ZOPE Abbiamo già visto alcuni degli oggetti di Zope: il Folder, il DTMLDocument, lo Z Gadfly Database connection, lo Z SQL method e il Page Template. Altri principali oggetti che possono essere aggiunti sono: DTML Method External Method Script (Python) File Image Mail Host Virtual Host Monster © Tecnoteca srl 2004
24. Installazione di nuovi prodotti Nuovi prodotti utilizzabili possono essere scaricati direttamente dal sito di Zope, forniti dalla vasta comunità di sviluppatori. In particolare all’indirizzo http://www.zope.org/Products è possibile effettuare ricerche di prodotti per tipologia (es. e-commerce, esempi, patches etc.). Una volta scaricato il prodotto che ci interessa è sufficiente: scompattarlo copiare il folder nella directory Products di ZOPE riavviare aggiungerlo tramite la ZMI nel punto desiderato del sito © Tecnoteca srl 2004
25. I linguaggi di scripting I principali linguaggi di scripting utilizzati da Zope sono: DTML (Document Template Markup Language) ZPT (Zope Page Templates) Sono linguaggi server-side, eseguiti quindi dal server Zope e i risultati della loro esecuzione sono inviati al browser web. Tramite questi 2 linguaggi è possibile generare pagine in maniera dinamica. Vengono infatti inseriti particolari 'tags' nel codice HTML, convertiti poi in HTML puro da inviare al browser web. Entrambi i linguaggi, benché diversi nella sintassi, svolgono lo stesso ruolo. A parte minime differenze, la scelta di adottarne uno piuttosto che un altro è dovuta spessa a scelte personali. © Tecnoteca srl 2004
Zope mette a disposizione due oggetti DTML: 26. Il DTML Il DTML è il linguaggio originale per la presentazione dinamica in Zope. Può diventare fortemente dipendente dalla logica, limitando di fatto la ricerca della separazione della logica dalla presentazione. Può risultare semplice per i programmatori, ma piuttosto ostico per i web-designers. Zope mette a disposizione due oggetti DTML: Documenti DTML (oggetti contenuto) Metodi DTML (oggetti presentazione) © Tecnoteca srl 2004
Esistono due tipi di “tag” DTML: 27. Cenni ai “tag” DTML Esistono due tipi di “tag” DTML: “Tag” singolo (racchiuso fra due parentesi angolari) <dtml-var qualche_oggetto> A blocchi (con due tag di apertura e chiusura blocco) <dtml-in oggetto_sequenza> <!-- comandi sui valori della sequenza --> </dtml-in> © Tecnoteca srl 2004
28. Lo ZPT (Zope Page Templates) Lo ZPT è un altro tool di generazione dinamica delle pagine web, pensato per consentire la collaborazione fra programmatori e designers. E' successivo al DTML e ne duplica alcune funzioni, ma con scopi leggermente differenti. I Page Templates usano il linguaggio TAL (Template Attribute Language) . © Tecnoteca srl 2004
29. TAL, il linguaggio per le ZPT Tal definisce particolati attributi per i tag. Un esempio può essere: <title tal:content=”here/title”> titolo della pagina</title> Le istruzioni TAL più comuni sono: tal:define tal:attributes tal:replace tal:content tal:repeat tal:condition © Tecnoteca srl 2004
30. CMS (Content management System) I CMS sono soluzioni fortemente orientate alla gestione dinamica dei contenuti. Grazie all'uso di interfacce amichevoli, i sistemi di Content Management permettono agli utenti autorizzati, indipendentemente dalla locazione geografica e dalle competenze informatiche, di contribuire alla definizione, impaginazione e amministrazione dei contenuti del sito. Un sistema di Content Management consente di tenere separate le tre componenti di un sito web: la grafica, i contenuti, il codice di programmazione. L’obiettivo è rendere semplice la creazione, la pubblicazione ed il recupero di contenuti per qualsiasi richiesta. © Tecnoteca srl 2004
31. Perché usare un CMS su web? La maniera forse più semplice per rispondere a questa domanda è di confrontarlo con un sistema classico di sviluppo web: Macromedia Dreamweaver®. Facilità nell’apprendimento e delega dei compiti Maggior consistenza ed uniformità nello stile Granularità nel controllo del flusso informativo Versioning © Tecnoteca srl 2004
32. L’ambiente di sviluppo CMF (Content Management Framework) Il CMF è una applicazione che contiene una serie di strumenti (tools) di ZOPE. Questi strumenti formano un ambiente che fornisce molti dei servizi chiave che servono ad un sistema di amministrazione di contenuti (CMS) Il CMF fornisce strumenti base come: Controllo di flusso Personalizzazione Catalogazione © Tecnoteca srl 2004
PLONE è un sistema di amministrazione di contenuti (CMS) É dotato all’origine di un controllo di: Flusso dei lavori Sicurezza e ruoli preconfigurati Una serie di tipi di contenuto Supporto multilingue Si basa su un ambiente di sviluppo CMF. © Tecnoteca srl 2004
34. Combinazione ZOPE/PLONE Orientamento agli oggetti Database Ricerca integrata Multipiattaforma Copie personalizzate degli script Workflow Scalabilità Efficace ed elegante ambiente per la navigazione Facilità nella creazione di documenti strutturati anche complessi © Tecnoteca srl 2004
35. Installazione di PLONE PLONE è liberamente scaricabile da http://plone.org/downloads/ Nel caso di installazione su Windows possiamo evidenziare 2 metodi: codice eseguibile codice sorgente Lanciando l’installazione da eseguibile, verranno installate, fra le altre, le seguenti componenti base: Zope CMF Python © Tecnoteca srl 2004
L'aggiunta di un sito Plone avviene tramite la ZMI di Zope. 36. Attivazione L'aggiunta di un sito Plone avviene tramite la ZMI di Zope. © Tecnoteca srl 2004
37. La pagina iniziale Main content Left_slots Right_slots Footer Ridimensionamento testo Logo Barra di ricerca Portal tabs breadcrumbs Stato e preferenze Main content Left_slots Right_slots Footer © Tecnoteca srl 2004
Le classi di utenti che possono accedere al sito sono le seguenti: 38. Accesso al sito Le classi di utenti che possono accedere al sito sono le seguenti: Anonymous Utente Registrato (Member) Per poter modificare i contenuti, un utente deve registrarsi. © Tecnoteca srl 2004
39. Aggiunta/Modifica contenuti Dopo la registrazione è possibile inserire documenti e oggetti nella home dell’utente. © Tecnoteca srl 2004
40. Il controllo del Workflow Ogni oggetto può assumere diversi stati durante il suo ciclo di vita. Lo stato di un oggetto determina se sia accessibile o meno dai vari tipi di utente definiti da Plone. Il Workflow di Plone include 4 stati di default Visibile In Revisione Pubblicato Privato © Tecnoteca srl 2004
La sicurezza viene tenuta quindi sotto controllo in ogni momento 41. Ruoli degli utenti Plone usa i ruoli per definire cosa possono fare e vedere i diversi utenti. La sicurezza viene tenuta quindi sotto controllo in ogni momento I ruoli definiti in una installazione di default di Plone includono: Anonimo (Anonymous) Collaboratore (Member) Possessore (Owner) Revisore (Reviewer) Manager © Tecnoteca srl 2004
Le principali tabs (azioni) sono: 42. Le “content tabs” Le content tabs sono metodi/azioni definite nel contesto in cui ci troviamo. Ogni oggetto ha le proprie tabs di default, altre se ne possono aggiungere. Alcune sono “hidden”, ma comunque accessibili in funzione dei privilegi dell’utente. Le principali tabs (azioni) sono: contenuti (contents) visualizza (view) modifica (edit) visualizza contenuti (folder listing) proprietà (properties) stato (state) © Tecnoteca srl 2004
43. Cenni alla barra di stato La barra di stato è composta da: utente (user) cartella personale (my folder) preferenze personali (my preferences) ripristina (undo) esci (exit) configurazione di Plone (Plone setup) (accessibile solo al Manager) © Tecnoteca srl 2004
44. Gli “stili” Quello che vediamo appena creiamo un nuovo sito Plone è lo stile di default, ma Plone permette una elevata configurazione per quanto riguarda l'aspetto che vogliamo dare al nostro portale. Per andare ad agire sull’aspetto, il nostro punto di partenza si trova in: portal_skins/plone_styles I 3 file fondamentali sono: base_properties plone.css ploneCustom.css Nessuno è tuttavia modificabile... © Tecnoteca srl 2004
45. Il folder “custom” Ogni metodo, definizione, file generico di sistema può essere adattato alle nostre esigenze mettendolo in un particolare folder: portal_skins/custom Ogni file (oggetto) presente in custom ha una priorità maggiore del file originale da cui deriva In questo modo possiamo personalizzare i nostri file/metodi senza andare a modificare l'originale. © Tecnoteca srl 2004
46. Il logo del portale Sostituire il logo in alto a destra di plone risulta a questo punto estremamente facile. Se non abbiamo modificato il nome del logo come definito nel file base_properties, ci basta andare in custom ed inserire, una nuova immagine, con il nostro nuovo logo, che chiameremo... logo.jpg Qualora invece avessimo già “customizzato” il file base_properties, modificandogli il logoName, dobbiamo assegnare all'immagine che carichiamo l'id uguale al valore di logoName. © Tecnoteca srl 2004
47. Aggiunta di contenuti nel portale Proviamo ad aggiungere un “Folder” nella root del nostro portale. Aggiungiamo quindi qualche documento, immagine etc… Cliccando sul folder che abbiamo creato in precedenza otteniamo la lista di quanto vi è contenuto. Ma perchè viene attivata proprio questo tipo di visualizzazione? E se lo volessi cambiare? Per fare qesto dobbiamo introdurre un altro importante “oggetto contenitore” di Plone: portal_types © Tecnoteca srl 2004
48. Il folder “portal_types” Nel portal_types sono contenute le definizioni per tutti gli oggetti attualmente definiti in Plone. E' inoltre possibile creare un nuovo tipo semplicemente copiandone uno già presente (cambiandogli il nome, ovviamente...) modificando poi sue proprietà in funzione di ciò che vogliamo fargli fare. Altri possono aggiungersi qualora si installi nuovi prodotti. © Tecnoteca srl 2004
49. Modifica delle proprietà di un “tipo” Scegliendo, per esempio, il tipo “Large Plone Folder”, ci appare la pagina delle sue proprietà. Fra i vari campi, quelli che più ci possono interessare sono i seguenti Icon: icona di default dell’oggetto. Initial view name: azione di default per la visualizzazione iniziale) dell’oggetto. Implicitly addable: se può essere o no aggiunto nel portale. Filter content types Allowed content types: eventuali oggetti che possono essere aggiunti al suo interno, qualora selezionato il campo precedente. © Tecnoteca srl 2004
50. Modifica delle “azioni” cliccando sul tab “actions” entriamo della gestione delle azioni, intese come tipo di visualizzazione, definite per il particolare tipo (oggetto). Ogni azione può venire modificata agendo sui rispettivi campi, ma si possono anche aggiungere nuove azioni personalizzate. © Tecnoteca srl 2004
51. Le “portal tabs” La definizione delle azioni generali definite sul nostro portale si trovano nel folder portal_actions Qui possiamo modificare le azioni definite per le portal tabs, ad esempio, ed aggiungerne di nuove. Tutte le entry nel cui campo Category è presente il valore portal_tabs, corrispondono alle tabs generali del nostro portale. Volendo far sì che il tab “notizie” sia visibile solo ad utenti autenticati, basta inserire nel campo Condition il valore python:member © Tecnoteca srl 2004
52. Gli “slots” Per ogni oggetto può essere definita una qualsiasi combinazione e disposizione degli slots. Sono presenti due proprietà 'speciali' assegnabili agli oggetti: left_slots right_slots Sono proprietà speciali in quanto “ereditate” in visualizzazione. Gli slots, essendo proprietà (attributi) assegnabili ad un oggetto, possiamo vederli e/o modificarli cliccando sulla tag “Properties” presente nella ZMI della root del nostro portale Plone. © Tecnoteca srl 2004
53. PRODOTTI: Struttura I Prodotti installabili in Plone hanno la seguente struttura di directory e files: Nella directory principale ci sono i codici delle classi (tipi) che verranno installate. Nella directory “extension” è presente il codice di installazione utilizzato da Plone. Nella directory presente sotto “skins” sono contenuti tutti gli scripts, le pagine di presentazione e le icone del prodotto. Il nome del folder principale è in genere lo stesso del prodotto che si intende installare. Spesso tuttavia vengono installati più tipi, e il nome della directory è un nome di insieme. Solo i files presenti nella direcory skins non poi customizzabili tramite la ZMI. © Tecnoteca srl 2004
54. PRODOTTI: Installazione Dopo aver messo la cartella del prodotto nella ben nota directory “Products” del filesystem, i passi da compiere sono i seguenti: Riavviare Zope Andare nel tool portal_quickinstaller Selezionare il prodotto e premere install Il contenuto della directory skins è visualizzabile tramite il tool portal_skins, nella entry corrispondente al nome del prodotto installato. E’ ovviamente possibile effettuare la customizzazione dei files qui presenti. (non è necessario riavviare Zope o reinstallare il prodotto) © Tecnoteca srl 2004
55. IL TOOL portal_properties L'azione definita per questo tool è la reconfig_form, che non è altro che l’azione richiamata in Plone setup per le configurazioni generali del portale. In portal_properties sono presenti 4 oggetti (property sheets) utilizzati per le configurazioni globali del portale. site_properties navtree_properties navigation_properties form_properties Diamo una breve descrizione di ciascuno di questi oggetti. © Tecnoteca srl 2004
56. PORTAL_PROPERTIES: site_properties In questa property sheet è possibile agire su alcune proprietà quali: formato della data linguaggio di default editor esterni per i contenuti nomi ammissibili per le pagine iniziali tipi che devono essere considerati folderish. Altri… © Tecnoteca srl 2004
57. PORTAL_PROPERTIES: navtree_properties In questa property sheet è possibile agire su alcune proprietà quali: gestione della visualizzazione per lo slot di navigazione. criteri di sort di default per la visualizzazione dei contenuti Oggetti da non visualizzare bachSize di default Altri… © Tecnoteca srl 2004
58. PORTAL_PROPERTIES: navigation_properties e form_properties In questa property sheet vengono definite le proprietà di navigazione e di validazione delle form relative agli oggetti di default di Plone. Sono definiti i passaggi che portano dall'inserimento dei valori nella form di modifica fino all’eventuale visualizzazione per i vari tipi di default di Plone. I passaggi si attuano attraverso una catena di validazioni sui valori inseriti, permettendo di compiere azioni automatiche sulla base della correttezza dei parametri inseriti nella form. © Tecnoteca srl 2004
59. Le validazioni per le form E’ importante che nella form sia presente una variabile “hidden” del tipo: <input type="hidden" name="form.submitted" value="1" /> Le form “agiscono” su loro stesse. Il check della variabile “form.submitted” fa scattare, se presente, la catena della validazione. Se non presente significa che la pagina è stata richiamata non come conseguenza di un “submit”. Gli stati e le variabili vengono passata attraverso la catena tramite il REQUEST. Lo stato della catena è contenuto nell'oggetto “state”, ed in genere vale “failure” o “success”. La gestione ed il controllo della catena di validazioni è gestita dal tool portal_form_controller. © Tecnoteca srl 2004
60. IL TOOL portal_skins Lo possiamo considerare come il tool principale del nostro portale. Quello che troviamo al suo interno, inizialmente, è quanto si trova nella directory skins di CMFPlone sul filesystem. Qui troveremo anche tutti i successivi prodotti che andremo ad installare con il tool portal_installer. Andando sulla tab Properties della ZMI all’interno di questo tool, è possibile definire l’ordine di preferenza di dove Plone cerca gli stili da applicare al nostro portale. Analizziamo ora i folders principali contenuti in questo tool. © Tecnoteca srl 2004
61. PORTAL_SKINS: plone_content In plone_content sono contenute le icone relative ai mime-types definiti in Plone. Può essere utilizzato in combinazione con i 2 tools: definizione di tutti i mime-types. Altri possono essere aggiunti. Ad ogni entry può corrispondere una icona definita in mimetypes-icons. mimetypes_registry è un motore di trasformazione dei contenuti basato sui mime-types. Permette di trasformare 'run-time' un contenuto da un mime-type ad un altro. portal_transforms NOTA: In realtà questo non è un oggetto di default di Plone, ma viene aggiunto all’installazione di portal_transforms. © Tecnoteca srl 2004
62. PORTAL_SKINS: nel dettaglio pag.1 Entriamo nel dettaglio dei contenuti del portal_skins cmf_legacy Script python derivati dal prodotto CMFDefault. Considerato deprecated, anche se qui vanno ad aggiungersi Prodotti sviluppati dal progetto Collective. plone_3rdParty Qui sono presenti le pagine di visualizzazione/modifica per gli oggetti di default di Plone, quali Document, Folder, Image, News, etc. plone_content In questo folder sono presenti i files javascript utilizzati da Plone. plone_ecmascript © Tecnoteca srl 2004
63. PORTAL_SKINS: …nel dettaglio pag.2 Script python (metodi) richiamati dalle form utilizzate per l'aggiunta di contenuti (edit form), e script di validazione dei contenuti di tali form per i tipi di default di Plone (Documents, Events, etc.). plone_form_script Contiene tutte le form di default di Plone che non fanno riferimento ad alcuna azione di modifica degli oggetti di contesto. plone_forms Contiene semplicemente tutte le immagini di default utilizzate da Plone plone_images Qui sono contenuti tutti i file necessari per la gestione del pannello di Controllo di Plone. plone_prefs © Tecnoteca srl 2004
64. PORTAL_SKINS: …nel dettaglio pag.3 plone_scripts Collezione di scripts (metodi) generali utilizzati da plone. Gli stili di presentazione di Plone (già visti la settimana scorsa) plone_styles Proprietà per utilizzare il layout di Plone senza l’ausilio di tabelle. plone_tableless Insieme di modelli di pagina per il controllo della struttura di Plone. Possiamo vederli come un insieme di macro. plone_templates © Tecnoteca srl 2004
65. PORTAL_SKINS: plone_portlets Nelle versioni precedenti erano conosciuti come “plone_slots”. Ogni file è la definizione di uno slot visualizzabile ai due lati della pagina. Il codice di uno slot è contenuto all’interno di una definizione di macro del tipo: <div metal:define-macro="portlet“> … </div> Il codice da inserire negli attributi left_slots o right_slots per richiamarlo è: here/portlet_name/macros/portlet © Tecnoteca srl 2004
66. PLONE_PORTLETS: esempio pag.1 In questo esempio vedremo come 'customizzare' uno slot ed usarlo, in seguito, per gestire tipi diversi di news. Come prima cosa creiamo un nuovo oggetto basato sul tipo News Item, e diamogli un nome a nostra scelta (es. MyNews). Creato il nuovo tipo, andiamo in plone_portlets, scegliamo portlet_news e premiamo il pulsante 'custom'. A questo punto ci troviamo nel file customizzato in modalità edit. Quello che vogliamo è fargli gestire solo le news relative al nuovo tipo che abbiamo creato all'inizio. Per fare questo, ci mancano alcuni di passi: © Tecnoteca srl 2004
67. PLONE_PORTLETS: ..esempio pag.2 Modificare il tipo di oggetto che lo slot deve gestire. Sostituire la direttiva portal_type='News Item' con portal_type='MyNews' Qualora volessimo far apparire un titolo diverso per questo slot: Sostituire la direttiva <h5 i18n:translate="box_news">News</h5> con <h5 i18n:translate="box_news">My News</h5> © Tecnoteca srl 2004
68. PLONE_PORTLETS: ..esempio pag.3 Cambiare il nome del portlet che abbiamo appena creato e modificato. Cambiare il nome da portlet_news a portlet_mynews (per esempio) Infine, dobbiamo fare in modo che questo nuovo slot venga gestito da Plone. Andiamo nella home del nostro portale (sempre nella ZMI) e premiamo sul tab “Properties”. Nell'attributo left_slots aggiungiamo la linea: here/portlet_mynews/macros/portlet Lasciando il suo nome originale comporterebbe che nello slot delle news verrebbero visualizzate solo le news definite con il nuovo tipo. © Tecnoteca srl 2004
69. GESTIONE DEGLI UTENTI La gestione degli utenti di Plone viene attuata tramite i seguenti Folders e Tools: Folder Member Folder acl_users Tool portal_memberdata Tool portal_membership Ogni utente iscritto presenta in Members un folder con id uguale al suo username. Tale folder è la sua home. acl_users è gestito dal prodotto “Group User Folder” (GRUF). Qui possono venire assegnati ruoli e configurati gruppi degli utenti iscritti. © Tecnoteca srl 2004
70. GESTIONE DEGLI UTENTI: Note sul folder “Members” Di default qualunque utente può accedere al sito e diventare un Member. Si può voler eliminare questa modalità. Questo può essere fatto andando in “Security” sulla ZMI della home del nostro portale e modificare “add portal members” deselezionando l'acquire e selezionandolo solo per il Manager. Come risultato si ottiene che ad un Anonymous non apparirà più l'opzione di join. © Tecnoteca srl 2004
71. GESTIONE DEGLI UTENTI: Note sul folder “acl_users” Il folder acl_users di Plone è gestito diversamente da quanto visto per Zope. Abbiamo delle estensioni fornite dal prodotto “Group User Folder” (GRUF). L'aggiunta di nuovi utenti risulta facilitata, compresa la loro assegnazione a particolari gruppi essi stessi definiti in questo folder. Un gruppo è diverso da un ruolo. I ruoli devono sempre e comunque venire definiti tramite la tab “Security” nella ZMI. © Tecnoteca srl 2004
72. GESTIONE DEGLI UTENTI: i tools “portal_memberdata” e “portal_membership” Qui è possibile definire nuovi attributi da assegnare agli utenti. Portal_membership Questo tool fornisce i meccanismi di autenticazione per gli utenti. E' inoltre possibile gestire ed “aggiungere” nuove actions alla barra dei tools per gli utenti e ad altro. © Tecnoteca srl 2004
73. GESTIONE DEGLI UTENTI: esempio Prima di continuare con i prossimi argomenti, facciamo un esempio pratico per quanto riguarda la gestione degli utenti. Dovremo: Creare almeno un nuovo gruppo. (Meglio se di nome ‘group1’. Indifferente i ruoli che vengono assegnati) Creare almeno un utente per ognuno dei gruppi definiti al punto 1 Per fare tutto ciò dobbiamo ovviamente andare in acl_users. Nota: una volta terminato, assicuriamoci che gli utenti definiti al punto 2 possano accedere al nostro sito. © Tecnoteca srl 2004
74. GESTIONE DEL WORKFLOW Il tool portal_workflow ci permette di agire sui possibili stati e transizioni dei contenuti del nostro portale. Di default sono definiti 2 distinti workflows: plone_workflow folder_workflow Ad ogni oggetto (tipo) presente nel nostro portale è associato un workflow. Tramite questo tool possiamo modificare i workflows esistenti, oppure di crearne di nostri ed associarli ai tipi che ci interessa. © Tecnoteca srl 2004
75. WORKFLOW: continua… Selezionando la tag “Contents” del tool, ci appariranno i workflows già definiti. Una volta selezionato il workflow che vogliamo modificare, possiamo agire sui suoi contenuti. Questi contenuti sono: Scripts (metodi) states (stati) transitions (transizioni) variables (variabili) worklists (“liste di lavoro”) Quelli che a noi interessano maggiormente sono: states e transitions. © Tecnoteca srl 2004
76. WORKFLOW: “states” Selezionando la tag “States” ci appariranno gli stati già definiti per questo workflow. states Come prima cosa possiamo subito vedere come sia possibile definire lo stato iniziale in cui verrà a trovarsi un oggetto appena creato. transitions Selezionando uno stato (es. Published) possiamo andare a modificarlo. © Tecnoteca srl 2004
77. WORKFLOW: “transitions” pag.1 Selezionando la tag “Transitions” ci appariranno le transizioni già definite per questo workflow. Questa è forse la parte più interessante. Da qui possiamo capire e modificare il flusso delle transizioni fra i vari stati. transition Stato di destinazione della transizione Trigger che fa scattare la transizione © Tecnoteca srl 2004
78. WORKFLOW: “transitions” pag.2 Selezionando una transizione (es. Publish), entriamo nella pagina di configurazione della transizione stessa. Scelta dello stato di destinazione per la transizione. Ruolo necessario per attivare la transizione Possibili triggers che possono attivare l’attivazione Permessi che l’utente deve avere per attivare la transizione Metodo applicato per la transizione © Tecnoteca srl 2004
79. WORKFLOW: esempio pag.1 Quello che ci proponiamo in questo esempio è di creare un workflow personalizzato per gestire i tipi MyNews nello slot portlet_mynews sulla base dei gruppi che abbiamo definito in precedenza. Dovremo definire 2 nuovi stati: group1 e group2 (chiameremo questi stati con lo stesso nome dei 2 gruppi che abbiamo definito in un esempio precedente.) Dovremo definire 2 nuove transizioni: togroup1 e togroup2 Faremo inoltre in modo che solo il proprietario dell'oggetto (Owner) possa agire sulle transizioni. © Tecnoteca srl 2004
80. WORKFLOW: …esempio pag.2 La prima cosa da fare è di creare un nuovo workflow. Per fare questo bisogna selezionare la tag “Contents” del tool e premere il pulsante “Add Workflow”. Verrà data facoltà di scegliere fra un insieme di workflows predefiniti. Scegliamone uno (es. default_workflow [classic]) ed assegnamogli un id. Una volta premuto il pulsante “Add” vediamo che il nuovo workflow è stato aggiunto alla lista. Selezioniamolo ed andiamo nella tab “Transitions”. © Tecnoteca srl 2004
81. WORKFLOW: …esempio pag.3 Le transizioni definite sono quelle visualizzate A noi ne servono 3. Quindi una la eliminiamo (reject), e le altre le andiamo a modificare. Come prima cosa rinominiamo publish e submit in togroup1 e togroup2 Quindi selezioniamo retract per modificarlo. © Tecnoteca srl 2004
82. WORKFLOW: …esempio pag.4 Le modifiche sulla transizione “retract” sono riportate in figura. © Tecnoteca srl 2004
83. WORKFLOW: …esempio pag.5 Selezionare quindi le altre due transizioni (togroup1 e togroup2) ed apportare le modifiche come in figura. Ovviamente, ovunque sia scritto group1 deve essere cambiato con group2 nel caso si stia modificando la transizione togroup2. © Tecnoteca srl 2004
84. WORKFLOW: …esempio pag.6 A questo punto possiamo andare sulla tab “States” del tool. Rinominiamo gli stati “pending” e “published” in “group1” e “group2”. Selezioniamo lo stato “private” e definiamogli come possibili le transizioni “togroup1” e “togroup2”. Gli stati “group1” e “group2” dovrebbero essere già a posto. Al limite si può editarli per modificargli il titolo e renderlo uguale all'id. © Tecnoteca srl 2004
85. WORKFLOW: …esempio pag.7 A questo punto mancherebbe un'ultima cosa: Le due transizioni “togroup1” e “togroup2” non hanno definito lo “stato di destinazione”. Dobbiamo quindi editare le due transizioni e selezionare come stato di destinazione lo stato “group1” per “to_group1” e “group2” per “to_group2”. Il nostro nuovo workflow è completato. Ora dobbiamo definire quale oggetto (tipo) deve seguirlo. Per fare ciò basta semplicemente andare nella tab “Workflow” del nostro tool ed associare al tipo “MyNews” il workflow che abbiamo appena definito. © Tecnoteca srl 2004
86. RIASSUNTO Nel corso di questa presentazione sono stati portati avanti i seguenti esempi: E’ stato definito un nuovo tipo di News Item, e lo abbiamo chiamato MyNews. E’ stato definito un nuovo slot chiamato portlet_mynews per gestire le MyNews, ed è stato aggiunto al portale. Sono stati definiti due nuovi gruppi, group1 e group2. E’ stato definito un nuovo workflow, my_workflow, (private, group1 e group2) e 3 transizioni (retract, togroup1 e togroup2). Ora, per concludere, dobbiamo mettere tutto assieme e fare in modo che il nostro nuovo slot visualizzi solo le news che sono nello stato uguale al gruppo a cui appartiene l’utente autenticato. © Tecnoteca srl 2004
87. CONCLUSIONE ESEMPI Andare in custom ed aprire il file “portlet_mynews” Aggiungere le linee evidenziate in grassetto: tal:define="groupid member/getGroupsWithoutPrefix | python:['']; results python:request.get('news', here.portal_catalog.searchResults( portal_type='MyNews‘ , sort_on='Date‘ , sort_order='reverse‘ , review_state=groupid)[:5]); Ora solo gli utenti che apparterranno al gruppo corrispondente allo stato della news sarà in grado di visualizzarla. © Tecnoteca srl 2004
88. Cache Management Proseguiamo il nostro viaggio alla scoperta di Plone. Sono presenti 2 oggetti per gestire la cache del portale, ed entrambi sono oggetti presenti di default in Zope: HTTPCache (immagini e/o documenti) RAMCache (risultati di chiamate a metodi) Ci sono alcuni parametri per configurare opportunamente la cache, come il tempo di persistenza degli oggetti nella cache, il tempo di refresh, etc. Importante è la checkbox: Cache anonymous connections only? Permette di limitare la possibilità che vengano inseriti nella cache dati privati che possono essere poi resi accessibili ad utenti Anonymous. Gli oggetti che possono essere inseriti nella cache hanno poi un tab che ne permette la configurazione. © Tecnoteca srl 2004
89. Il Calendario Nel tool portal_calendar vengono definiti gli oggetti che devono essere visualizzati. Di default solo gli oggetti di tipo “Event” vengono evidenziati nelle relative giornate sullo slot del calendario. Qui possiamo definire anche altri oggetti perchè vengano visualizzati. L'importante è che questi oggetti abbiano definiti i 2 attributi start e end. © Tecnoteca srl 2004
90. Gestione degli indici dei contesti del portale Un importante tool di plone è il portal_catalog. Gestisce tutte le indicizzazioni degli oggetti nel nostro portale. Agendo sulle tab della ZMI possiamo evidenziare le seguenti: - catalog: lista degli oggetti indicizzati. Qui è possibile effettuare un refresh, o cliccando sull'oggetto, vedere tutte le informazioni a lui relative. - indexes: (indici utilizzati per la catalogazione) Qui è possibile effettuare il refresh, e anche aggiungere nuovi indici da essere utilizzati per la catalogazione. - metadata: (quali dati vengono catalogati) Qui possiamo aggiungere nuovi metadata da catalogare. - advanced: Spesso può risultare utile effettuare un Update catalog per rimuovere oggetti invalidi. © Tecnoteca srl 2004
91. Il Portal_factory tool Viene utilizzato per gestire le aggiunte di contenuti che non hanno portato a termine l'inserimento. In pratica, quando viene richiesto di inserire un nuovo contenuto, Plone definisce un id di default, ma se non lo completiamo non viene inserito nello ZODB. Possiamo specificare quale oggetto viene gestito da questo tool andando sulla tab. L'oggetto non viene inserito nello ZODB, ma possiamo comunque eventualmente completare il suo inserimento andando sulla url: http://myportal/myfolder/portal_factory/TYPE_NAME/OBJECT_ID © Tecnoteca srl 2004
92. Il Portal_syndication tool Questo tool abilita la possibilità di rendere disponibili informazioni contenute nel nostro sito ad altri siti. Una volta abilitata la syndication, nel nostro portale appare una nuova tag per gli oggetti di tipo folder. Qui possiamo abilitare il particolare folder per fornire le informazioni contenute. (in genere lo si fa per folders contenenti news.). Da qualsiasi altro sito possono quindi venire richiamate le informazioni aggiungendo il suffisso “/RSS”. http://nostro_portale/nostro_folder/RSS © Tecnoteca srl 2004
93. Cenni a Python Python è un linguaggio interpretato orientato agli oggetti. E' possibile estenderlo facilmente con moduli scritti in C, C++. E' particolarmente potente e chiaro, e presenta un numero di moduli in continua crescita. Benchè estremamente ricco di componenti, il 95% del suo utilizzo, per i nostri scopi, può essere riassunto in pochi punti e concetti. © Tecnoteca srl 2004
94. Python: struttura A parte i moduli standard, moduli aggiuntivi possono essere caricati tramite la direttiva: import modulename (analogo alla direttiva #include <...> del C) es. import string,_mysql Il raggruppamento delle dichiarazioni avviene tramite l'indentazione for i in range(10): print i © Tecnoteca srl 2004
95. Python: i tipi A parte i più comuni tipi, es. int, double, etc, i due tipi più utilizzati sono le lists e i dictionaries. - Lists (liste): E' forse il tipo di dato più versatile utilizzabile in Python. Può essere definito come una lista di oggetti separati da virgola, racchiusi fra parentesi quadre. Può contenere oggetti relativi a tipi diversi. >>> MyList = [] >>> MyList.append('a string') >>> MyList.append(13.7) >>> MyList ['a string', 13.7] - Dictionaries (dizionari): I dizionari possiamo vederli come tabelle hash. É definito come coppie di chiave:valore separate da virgola. Ogni stringa o numero può essere una chiave, che deve comunque essere unica all'interno dello stesso dictionary. >>> MyDict = {} >>> MyDict['first'] = 'Mauro' >>> MyDict['last'] = 'Di Cecca' >>> MyDict {'last': 'Di Cecca', 'first': 'Mauro'} >>> MyDict.keys() ['last', 'first'] >>> MyDict['first'] 'Mauro' © Tecnoteca srl 2004
96. Creazione nuovi prodotti Creare nuovi prodotti è una delle caratteristiche di estensibilità di Plone/Zope. Può essere fatto in diversi modi. Scrivere da zero l'intero codice del prodotto (operazione che richiede una buona conoscenza del sistema) Scrivere il codice partendo da “scheletri” predefiniti di prodotti vuoti (operazione che richiede una conoscenza leggermente inferiore rispetto al metodo precedente). Utilizzare tools di sviluppo che facilitano l'intera operazione e che facciano una parte del lavoro per noi. Il mondo Plone ci fornisce strumenti per sviluppare secondo il punto 3. Tale strumento si chiama Archetypes. © Tecnoteca srl 2004
97. Archetypes Archetypes è l'evoluzione di un prodotto nato con il nome di CMFTypes. Semplifica la creazione di nuovi tipi di contesto (content types). Rende facile sia la creazione che la gestione di nuovi tipi. Nella sua forma più semplice è sufficiente: definire la classe dell'oggetto (tipo) che vogliamo creare, definire gli attributi (proprietà), definire le funzioni di classe. Una volta fatto ciò, basta aggiungere tale nuovo tipo come si fa per un qualsiasi altro tipo di Plone. Archetypes utilizzerà tali informazioni per generare automaticamente le pagine di visualizzazione (view) e le form (edit) per la modifica dei contenuti. © Tecnoteca srl 2004
98. Sviluppo con Archetypes: UML L'approccio che forse rende meglio le potenzialità fornite da questo tool e quello basato sullo sviluppo in ambiente UML (Unified Modelling Language). In un ambiente di sviluppo UML noi possiamo definire le nostre classi (che diverranno poi i tipi di Plone), e all'interno di tali classi definire gli attributi e le operazioni. Il codice delle operazioni può essere direttamente inserito nel corpo dell'attributo. Alcuni possibili tools di sviluppo UML sono: ObjectDomain http://www.objectdomain.org ArgoUML http://argouml.tigris.org Poseidon http://www.gentleware.com ... © Tecnoteca srl 2004
99. Sviluppo con Archetypes: ArchGenXML.py E' una utility richiamabile da linea di comando che effettua il parsing di progetti in formato XMI o XSD (XMLSchema) ottenuti dall'esportazione di modelli UML e che genera prodotti utilizzabili nel framework di Archetypes. Genera quindi tutto il codice Python del prodotto. Quello che ci resta da scrivere è essenzialmente il codice TAL per le pagine di visualizzazione/modifica personalizzate. © Tecnoteca srl 2004
100. Sviluppo con Archetypes: gli step Progetto UML File XMI Prodotto Plone Esportazione in formato XMI parsing del file XMI per generare il prodotto Plone Aggiunta e modifica delle pagine di presentazione Copia del prodotto nella directory Product di Zope © Tecnoteca srl 2004
101. Creazione nuovo prodotto: esempio pag.1 Facciamo ora l'esempio di creare un nuovo tipo, Movie, a partire dalla sua definizione con un modello UML. 1 . creazione di una nuova classe di nome Movie Qui possono essere definite direttive quali moduli da importare, icona di default del tipo, ed altre. Se selezionata, non viene generato alcun tipo di contesto per Plone. © Tecnoteca srl 2004
102. Creazione nuovo prodotto: ...esempio pag.2 2 . definizione degli attributi della classe (tipo) © Tecnoteca srl 2004
103. Creazione nuovo prodotto: ...esempio pag.3 3. definizione delle operazioni Per ogni azione possono venire definiti il testo del relativo content_tag e i permessi. Operations con Tagged Values “view” generano una azione (content_action) definita dal file il cui nome è inserito nel campo Value NOTA: Con le ultime release del parser, è necessario associare uno stereotype “action” o “view” ad ogni Operation per cui si vuole generate una azione con relativo “tab” relativo al contesto. © Tecnoteca srl 2004
104. Creazione nuovo prodotto: ...esempio pag.4 L'oggetto si presenterà in questo modo: Effettuata l'esportazione su un file che chiameremo, per esempio, movie.xml, dobbiamo solo applicargli il comando ArchGenXML.py python ArchGenXML.py -a yes -o movie movie.xml A questo punto copiamo la directory movie nella directory Products di Zope e riavviamo. © Tecnoteca srl 2004
105. Creazione nuovo prodotto: ...esempio pag.5 Il nuovo prodotto a questo punto è disponibile per essere installato in plone (portal_quickinstaller). Una volta installato, lo possiamo immediatamente utilizzare ed aggiungere nel nostro contesto. La pagina di inserimento è generata automaticamente sulla base degli attributi inseriti nella definizione di classe nel progetto UML. © Tecnoteca srl 2004
106. Personalizzazione del sito Una volta definiti i tipi che vogliamo essere disponibili nel nostro portale, ed i suoi contenuti, ci chiediamo: “Ok, e ora come faccio a riconfigurare l'aspetto del mio sito?” La definizione dei colori l'abbiamo già vista nel file base_properties presente in portal_skins/plone_styles. La definizione degli stili l'avevamo già vista nel file plone.css (e ploneCustom.css) presente nella stessa directory. Quello che ci manca è di capire dove e come andare ad agire per reimpostare l'aspetto del portale. © Tecnoteca srl 2004
107. Personalizzazione: il file “main_template” Questo file si trova in /portal_skins/plone_templates. La sua struttura è la seguente: <”definizioni proprie di plone”> <head> <macro dell'header> </head> <body> <macro per la parte superiore della pagina (portal-top)> <macro per le gli slots e il main> <macro del footer> </body> Ma prima di analizzare questo file, diamo qualche nozione sul concetto di macro per il linguaggio ZPT (TAL). © Tecnoteca srl 2004
108. Personalizzazione: “le macro” definizione ed uso La definizione di una macro può essere fatta in un qualsiasi file TAL. Per richiamarla basta definire il nome della macro ed il file in cui è stata definita. Es. definisco la macro 'mostrapippo' nel file 'pluto.pt' <p metal:define-macro=”mostrapippo”> Pippo </p> Per richiamarla da un qualsiasi altro template mi basta includere la seguente direttiva: <p metal:use-macro=”here/pluto/macros/mostrapippo” /> E' evidente come sia anche possibile utilizzare macro che facciano uso di variabili definite nel contesto. © Tecnoteca srl 2004
109. Personalizzazione: gli “slot”delle macro Alcune parti delle macro possono essere personalizzate sovrascrivendo valori. Per fare ciò si utilizzano gli “slots”. Es. aggiungo una definizione di slot nella macro: <p metal:define-macro=“mostrapippo”> Pippo <span metal:define-slot=”topolinia”></span> </p> Per utilizzarla basta includere la seguente direttiva: <p metal:use-macro=”here/pluto/macros/mostrapippo”> <span metal:fill-slot=”topolinia”>basettoni</span> Detto ciò, torniamo ad analizzare il file “main_template” © Tecnoteca srl 2004
110. Personalizzazione: l'”header” Quello che il main_template definisce come header non è da considerarsi come la parte superiore del nostro portale, ma piuttosto come un insieme di definizioni e di richiami a contenuti generali utilizzati nella pagina. L'header, racchiuso nelle direttive <head> e </head>, viene richiamato facendo uso degli slots definiti nel file header.pt. <head metal:use-macro=”here/header/macros/html_header”> ...fill_slot... ... </head> © Tecnoteca srl 2004
111. Personalizzazione: il “portal_top” File: global_search_box macro: quick_search File: global_logo macro: portal_logo File: global_sections macro: portal_tabs File: global_personalbar macro: personal_bar File: global_pathbar macro: path_bar © Tecnoteca srl 2004
112. Personalizzazione: il “portal_columns” Si noti che qualora venga utilizzato il file ploneColumns.css al posto del file plone.css, non si è più in presenza di una tabella ma la struttura viene completamente definita per mezzo di specifiche css. File: portlets_fetcher macro: left_column File: portlet_fetcher macro: right_column Alcuni richiami di macro per il particolare contesto © Tecnoteca srl 2004
113. Personalizzazione: il “footer” File: footer macro: portal_footer File: colophon macro: colophon Abbiamo raggruppato queste due macro nella stessa sezione semplicemente per una questione di coerenza. È evidente come possano essere raggruppate facendo in modo che nella macro portal_footer venga richiamata la macro colophon, in modo da avere tutto nello stesso punto. © Tecnoteca srl 2004
114. Personalizzazione: stili diversi in contesti diversi Possiamo voler utilizzare stili ed impostazioni di visualizzazione per il nostro portale che variano a seconda del contesto in cui ci si trova in un dato momento. Questo è facilmente ottenibile semplicemente copiando nel contesto (folder) che ci interessa il file main_template (ma anche header e footer se necessario) che abbiamo modificato. In questo modo ogni contesto posizionato al di sotto del percedente farà uso degli stili definiti nel primo file main_template che trova risalendo l'albero. Un altro possibile metodo è quello di creare i nostri file di template nella directory nomeprodotto_public del prodotto che abbiamo creato ed installato con archetypes. Un altro metodo ancora è quello di definire uno stile “ad-hoc” (es. myplone.css) ed includerlo con la direttiva <style> tramite il modello main_template. © Tecnoteca srl 2004
115. Personalizzazione: utilizzo di editor HTML Possiamo ora chiederci se sia possibile utilizzare strumenti di creazione di pagine web esterni per modellare il portale quali DreamWeaver®, o altri. La risposta è SI, pur con le dovute limitazioni. Vediamo in dettaglio una delle limitazioni principali. è possibile agire sul file main_template per modificare il layout. Generalmente definendo tabelle ed inserendo nelle varie celle ciò che desideriamo. Non è possibile visualizzare un'anteprima completa della pagina. Questo perchè molti degli oggetti vengono visualizzati in base al contesto in cui ci si trova. Un'anteprima da DreamWeaver non può accedere alle macro di Plone. Bisogna però tenere presente che la potenzialità di Plone è nella sua gestione dei contenuti. Un modello di pagina viene definito una volta per tutte (magari anche più di un modello), ma poi raramente si va ad intervenire con continue modifiche. © Tecnoteca srl 2004
116. Plone e l’accessibilità Plone aderisce agli standard web del Consorzio W3C Rispetta la sintassi XHTML Si basa su un CSS valido E’ conforme alle Linee Guida WCAG 1.0 sviluppate dal Consorzio W3C/WAI Presenta un layout senza tabelle Utilizza fogli di stile per Stampa, Presentazione e Portatili (cellulari e palm) E’ supportato da tutti i browser © Tecnoteca srl 2004
117. Documentazione e risorse disponibili pag.1 www.zope.org il sito della comunità internazionale di ZOPE www.zope.it il sito della comunità italiana di ZOPE zdp.zope.org/ Zope Documentation Project www.zopemag.com una autorevole newsletter su ZOPE www.zope.org/Resources/ZopePowered elenco di siti realizzati in Zope www.python.org Python © Tecnoteca srl 2004
118. Documentazione e risorse disponibili pag.2 www.plone.org il sito della comunità internazionale di Plone http://zope.it/Members/lallo/plone/pbithtml/index_html Plone Book in versione italiana http://plone.org/about/sites elenco di siti realizzati in Plone http://sourceforge.net/projects/plone il progetto Plone presso SourceForge(tm) © Tecnoteca srl 2004
119. Bibliografia Zope Developer's Handbook John D. Rowell - Sams 2002 ZOPE Pelletier Michel; Latteier Amos - McGraw-Hill Libri Italia, 2002 Zope Developer's Handbook John D. Rowell - Sams 2002 Zope Bible Scott Robertson, Michael Bernstein - John Wiley e Sons 2002 Zope: Web Application Development and Content Management Steve Spicklemire, Kevin Friedly, Jerry Spicklemire, Kim Brand - New Riders Publishing 2001 The Book of Zope Beehive - No Starch Press 2001 Zope Web Application Construction Kit Martina Brockmann, Sebastian Luhnsdorf, mar Pratt, Mark Pratt, Katrin Kirchner - Sams 2001 The Zope Book Amos Latteier, Michel Pelletier - New Riders Publishing 2001 © Tecnoteca srl 2004