Bookmark and Share
You are here: Home Blog Andrea D'Este Viste configurabili con collective.configviews

Viste configurabili con collective.configviews

Creiamo delle viste configurabili in Plone usando il pacchetto collective.configviews

by Andrea D'Este - 2011-10-12
Contributors: Davide Moro

Caso d'uso: applicare una vista su un qualsiasi documento e poterla parametrizzare attraverso un pannello di configurazione. Per esempio una vista mappa: ogni oggetto mappa potrebbe essere configurato specificando delle coordinate di default.

Tutto ciò è possibile grazie al pacchetto collective.configviews, attraverso il quale uno sviluppatore potrebbe creare delle viste dinamiche configurabil: questo ci permette di poter modificare il comportamento o il contenuto di una vista (browserview) senza operare sul codice del plugin o modificare le vecchie properties di plone. Da notare: questo prodotto non è pensato per gli end user ma per gli sviluppatori, ai quali offre un pattern standard di operare in contesti simili.

In definitiva questa tecnica può essere usata sia per mettere a disposizione degli editor delle viste configurabili ma anche delle home page parametrizzate. Vediamo qui di seguito un semplice esempio.

Esempio

Supponiamo di voler costruire una vista di home page personalizzata e parametrizzare il numero di elementi visualizzati in un box (per esempio delle news). Allo stesso modo potremmo includere dei controlli di tipo checkbox per far apparire o meno dei banner, dei campi su cui possono essere specificati degli url, ecc.

Come funziona?

In pratica la nostra browser view leggerà queste impostazioni e genererà l'html di conseguenza caso per caso.

Naturalmente prima di partire è necessario installare il prodotto nel nostro buoldout, una volta reso disponibile possiamo partire con la creazione della nostra nuova homepage.

Costruiamo la nuova Homepage

Dopo aver installato il prodotto creiamo una semplice browserview con una classe e un template come segue, ereditando da una classe specificata su collective.configviews:

from collective.configviews import browser
from zope import schema
from zope import interface

class Schema(interface.Interface):
    """A test schema"""
   
    text = schema.TextLine(title=u"Text",
                           default=u"default text value")
    boolean = schema.Bool(title=u"Boolean",
                               default=False)
    int = schema.Int(title=u"Int",
                     default=10)

class HomePageView(browser.ConfigurableBaseView):
    """A test Browser view"""

    settings_schema = Schema
    implements(IHomePageView)
    template = ViewPageTemplateFile('home_view.pt')

    def __call__(self):
        return self.template()

Da notare in particolare che la nostra browser view:

  • eredita direttamente da ConfigurableBaseView
  • è stato specificato un configuration schema settings_schema

Fatto ciò basta registrare la nostra vista sul solito configure.zcml:

    <!-- homepage -->
    <browser:page
      name="homepage"
      for="*"
      class=".home_view.HomePageView"
      permission="zope2.View"
      allowed_interface="collective.configviews.interfaces.IConfigurableView"
      />

e scriviamo un semplice template che si limita in questo esempio a visualizzare i dati configurati:

<metal:content-core fill-slot="content-core">
    <metal:content-core define-macro="content-core">

    <p>text:<tal:config replace="view/settings/text"/></p>
    <p>boolean:<tal:config replace="view/settings/boolean"/></p>
    <p>int:<tal:config replace="view/settings/int"/></p>

    </metal:content-core>
</metal:content-core>

A questo punto sempre a titolo di esempio possiamo configurare il portal_type della Folder (potete usare il Plone Site se preferite o qualsiasi altra tipologia di oggetto) e aggiungere la nostra "homepage" tra le " in modo da poterla scegliere tra le viste disponibili. Ora abilitate la vista homepage sul vostro tipo di oggetto come mostrato nella figura seguente:

step1

Una volta fatto ciò avrete a disposizione un nuovo tab che consente ad un utente dotato di adeguati privilegi di configurare la vista, inserendo in questo caso un testo, un booleano e un intero (in pratica tutto ciò che definite sullo schema_settings della vostra browser view). Come risultato dovreste ottenere un risultato simile al seguente:

step2

Se torniamo sulla "configure view" possiamo tornare e cambiare i parametri di configurazione definiti nello schema.

Dettagli tecnici

I dati delle configurazioni vengono salvati sul contesto su cui viene applicata la vista sotto forma di annotazioni. Quindi potete usare la stessa view per diverse sezioni del portale e applicare configurazioni differenti. Se poi cambiate vista i dati rimangono comunque disponibili nel caso in cui venisse riattivata la vista in un secondo momento.