Appunti Plone

Tips, Tricks & mini howto

I templates e Plone 4

with one comment

Questo articolo nasce da una rielaborazione del post di Denys Mishunov.

Plone 4 sarà una piccola rivoluzione per la comunità plonistica poichè porta con se diverse migliorie e rielaborazioni significative del codice portante, e quindi dovremo rivedere un po’ la maniera di scrivere templates acquisita in questi anni di esperienza con la versione 2.5 e 3 del nostro CMS preferito.

C’è subito da specificare che il main_template.pt , ovvero il template dei template, ha subito rivisitazioni e quindi se nelle istanze di plone che vogliamo migrare tale file è stato modificato (spero che l’abbiate fatto perchè era l’ultima spiaggia…) allora dovremo stare molto attenti.

Passiamo alla carrellata dei maggiori cambiamenti apportati (sempre in ambito templates):

  • content-title: è lo slot che contiene il nome della view generato automaticamente.
  • content-description: è lo slot contenente la descrizione della view, anch’esso generato automaticamente.
  • content-core: è lo slot posto subito sotto la description e renderizza lo “scopo” principale della view in visualizzazione, quindi – ad esempio – del testo se si tratta di una pagina oppure gli oggetti contenuti se stiamo visualizzando un oggetto folership.
  • main: esattamente come in Plone3. Questa scelta è stata fatta sia per motivi di retrocompatibilità (altrimenti io mi sarei dato a Joomla, se non fosse stato così 😛 n.d.a.) sia per printare il contenuto di quelle view che non hanno previsto la possibilità di printare i viewlet-manager o hanno necessità di stampare titolo e descrizione propri e non automaticamente generati.

Viewlet managers

Tutti i viewlet managers riguardanti la colonna del template dedita al contenuto da visualizzare che in Plone3 si gestivano attraverso propri templates, ora sono attivabili sul main_template. Questo significa che se abbiamo dei nostri oggetti che necessitano l’attivazione di viewlet-manager sarà necessario porre tale gestione degli slot a questo dedicati e previsti nel main_template.

Per capire meglio ciò che ho appena scritto è consigliabile dare uno sguardo a document_view.pt che utilizza la colonna di destra per gestire una piccola porzione di codice appartenente alla logica dell’oggetto.

I templates come vista di un oggetto

Con plone3 si usava il main slot come contenitore per tutto ciò che riguardava la colonna del contenuto. Tutto questo ha portato ad una confusione in tale colonna: era possibile che  elementi comparissero in posti inaspettati con un imprevedibile disposizione grafica.

Plone4 semplifica tutto questo. Innanzitutto, come già detto in precedenza, non c’è bisogno di utilizzare il proprio template di view dell’oggetto per gestire anche i viewlet-managers. Poi, a meno che non si ha realmente bisogno di scrivere un titolo o una descrizione personalizzata per la propria vista si dovrebbe evitare di riempire il main slot. Per questo la nuova versione di Plone mette a disposizione uno slot chiamato content-core che visualizza solo il contenuto dell’oggetto visualizzato, poichè sarà il main_template ad occuparsi del resto: titolo, descrizione e viewlet-managers.

Ecco un esempio di come conciso può essere una vista di un oggetto in Plone4 (tratto da document_view.pt):

<metal:content-core fill-slot="content-core">
    <metal:content-core define-macro="content-core">
        <metal:field use-macro="python:context.widget('text', mode='view')">
            Body text
        </metal:field>
    </metal:content-core>
</metal:content-core>

Queste poche righe rappresentano quello di cui necessitiamo per una view.

Altri templates

Anche se Plone 4  consente di evitare di mettere un sacco di cose in più nei templates, in molti casi sarà comunque necessario compilare il main slot e inserirvi alcuni elementi.

Qualche utile suggerimento al proposito:

  • il titolo del contenuto dovrebbe avere sempre una classe css “documentFirstHeading”;
  • se si vuole utilizzare una visualizzazione del titolo e/o della descrizione standard risulta utile approfittare degli slot “content-title” o “content-description”;
  • le descrizioni degli oggetti dovrebbero sempre avere come classe css “documentDescription”;
  • tutto ciò che si pone dopo il titolo e/o la descrizione è bene incapsularlo in un div <div id=”content-core”>;
  • <a class=”link-parent”> andrebbe posto in <div id=”content-core”>;
  • se c’è la necessità di utilizzare un portal message nel template allora dovrebbe essere posto prima del titolo e preferibilmente nel viewlet-manager chiamato “plone.abovecontenttitle”;
  • in caso si voglia porre qualcosa in uno slot è bene, al posto di utilizzare div, usare dei tag metal del tipo <metal:slottinomio>, ad esempio:
    <metal:content-core fill-slot=”content-core”>
    Content core
    </metal:content-core>
    Questa best practice è importante poichè:

    • minimizza il numero di div vuoti in fase di rendering finale
    • rende più leggibili e individuabili i markup. In plone3 più del 50% dei template utilizzano e richiamano il main slot attraverso tag div creando annidamenti di codice inutile

Contenuti correlati

Plone4 non richiama esplicitamente una macro per i contenuti correlati nel main_template. In questa versione tali contenuti sono gestiti con una viewlet assegnata al plone.belowcontentbody viewlet-manager.

Detto ciò è estremamente consigliato non richiamare tale macro nel proprio template, così come ampiamente utilizzato fino alla versione 3 di Plone.

Disabilitare le colonne del layout di plone

Al fine di unificare i modi di disabilitare pezzi di layout in plone, le colonne sono disattivabili alla stessa maniera dei bordi quando si edita un contenuto ovvero utilizzando le variabili in REQUEST, ecco come:

Alla vecchia maniera

<metal:left fill-slot="column_one_slot" />
<metal:right fill-slot="column_two_slot" />

Alla Plone4:

<metal:block fill-slot="top_slot"
             tal:define="disable_column_one python:request.set('disable_plone.leftcolumn',1);
                         disable_column_two python:request.set('disable_plone.rightcolumn',1);" />

Tutto questo è bene tenerlo a mente sia per la produzione di nuovi portali, ma soprattuto nella migrazione di portali plone3 pesantemente customizzati.

Vito

Written by vito80ba

12 febbraio 2010 a 17:38

Pubblicato su Plone

Una Risposta

Subscribe to comments with RSS.

  1. Vito: translate-express! 🙂

    sauzher

    12 febbraio 2010 at 17:47


Lascia un commento