[Plone-IT] genericsetup, related items ed estendere tipi già esistenti

Riccardo Lemmi riccardo a reflab.it
Sab 31 Gen 2009 17:16:19 UTC


On Saturday 31 January 2009, Marco Giusti wrote:
> On Sat, Jan 31, 2009 at 11:52:37AM +0100, Riccardo Lemmi wrote:
> > On Saturday 31 January 2009, Marco Giusti wrote:
> > > salve a tutti,
> > > ho alcune questioni da porvi su plone.
> > >
> > > 1. ho creato un nuovo tipo di dato seguendo il libro di aspeli. il
> > > nuovo tipo estende ATEvent e ATFolder, ma quando cerco di modificare il
> > > contenuto e vado su "categorizzazioni" non ho il campo related items.
> > > come mai questo? in giro ho letto che devo aggiungere esplicitamente un
> > > campo relatedItemsField, ma perché non lo eredita da ATEvent? forse
> > > sbaglio qualcosa nell'estendere gli eventi, devo prestare particolare
> > > attenzione a qualcosa che il libro di aspeli non dice?
> >
> > L'eredità aggiunge i metodi presenti sulle classi padre ma per lo schema
> > quindi i field devi copiare quello che ti serve dagli schema di ATEvent e
> > ATFolder.
>
> certo:
>
> myschema = ATFolderSchema.copy() + ATEventSchema.copy() + atapi.Schema(
>     ...
> )
>
> class MyEvent(ATEvent, ATFolder):
>
>     schema = myschema
>     ...
>
> così è come ho definito il mio tipo ma ancora non ho un campo
> related_items in modifica->categorizzazione. ho controllato come ATEvent
> è definito ma non ho trovato nessun campo relatedItemsField. non capisco
> questa magia.

Basta seguire il codice (scherzo):
In event.py:

from Products.ATContentTypes.content.schemata import ATContentTypeSchema
ATEventSchema = ATContentTypeSchema.copy() + ...

In  schemata.py:
relatedItemsField = ReferenceField('relatedItems'
        relationship = 'relatesTo',
        multiValued = True,
        isMetadata = True,
        languageIndependent = False,
        index = 'KeywordIndex',
        write_permission = ModifyPortalContent,
        widget = ReferenceBrowserWidget(
            allow_search = True,
            allow_browse = True,
            show_indexes = False,
            force_close_on_insert = True,
            label = _(u'label_related_items', default=u'Related Items'),
            description = '',
            visible = {'edit' : 'visible', 'view' : 'invisible' }
            )
        )

ATContentTypeSchema.addField(relatedItemsField.copy())

dal codice precedente si vede che il widget è invisibile (almeno in base_view) 
ma sempre in event.py:

from Products.ATContentTypes.content.schemata import finalizeATCTSchema
...
finalizeATCTSchema(ATEventSchema)

In schemata.py, il metodofinalizeATCTSchema  è alquanto complesso, riporto le 
parti interessanti:

def finalizeATCTSchema(schema, folderish=False, moveDiscussion=True):
    """Finalizes an ATCT type schema to alter some fields
    """
    schema.moveField('relatedItems', pos='bottom')
    if folderish:
        schema['relatedItems'].widget.visible['edit'] = 'invisible'
...
    if schema.has_key('relatedItems'):
        schema.changeSchemataForField('relatedItems', 'categorization')

quindi se in fondo alla dichiarazione del tuo contenuto hai messo:

   finalizeATCTSchema(ATMyContentSchema)

dovresti avere il comportamento giusto.

> > > 2. genericasetup, la cosa più oscura di plone, veramente. anche qui ho
> > > provato a leggere in giro qualcosa ma poi non trovo niente che mi
> > > illumini veramente su come funzioni. ho letto che (correggetemi se
> > > sbaglio) serve per l'installazione di un pacchetto, aiuta nel caso un
> > > tipo di dato venga modificato, ma poi leggendo un po' di codice ho
> > > scoperto che fa molto di più. esplorando in .../profiles/default/types/
> > > ho scoperto che per esempio è possibile settare la default_view per un
> > > tipo, senza dover coinvolgere i file .zcml. dove trovo tutte queste
> > > informazioni? non riesco a districarmi dalla ragnatela che è la
> > > documentazione di plone.
> >
> > Sul libro di Aspeli c'è scritto tutto quello che serve riguardo al
> > GenericSetup. Gli esempi d'uso sono sparsi in tutto il libro.
>
> è questo il problema, la documentazione è troppo frammentata e diventa
> difficile da capire. mi rileggerò gli esempi

La quantità di documentazione è notevole e quindi non sempre si trova quello 
che si cerca alla prima, ma la maggior parte delle cose sta su zope.org e 
plone.org, inoltre il codice è a disposizione e la lettura chiarisce molto, 
insomma è python mica java :)
-- 
Riccardo Lemmi                           Email:   riccardo a reflab.it
Reflab S.r.l. - Plone Design, Development and Consulting
Phone: +39 349 4620820                         http://www.reflab.it
-------------- parte successiva --------------
Un allegato non testuale è stato rimosso....
Nome:        signature.asc
Tipo:        application/pgp-signature
Dimensione:  189 bytes
Descrizione: This is a digitally signed message part.
URL:         <http://lists.plone.org/pipermail/plone-plone-it/attachments/20090131/e2f6e2d4/attachment.asc>


Maggiori informazioni sulla lista Plone-IT