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

Marco Giusti marco.giusti a gmail.com
Lun 2 Feb 2009 10:42:13 UTC


On Sat, Jan 31, 2009 at 06:16:19PM +0100, Riccardo Lemmi wrote:
> 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.

grazie mille, hai colpito nel centro

ciao
m.
-------------- parte successiva --------------
Un allegato non testuale è stato rimosso....
Nome:        signature.asc
Tipo:        application/pgp-signature
Dimensione:  197 bytes
Descrizione: Digital signature
URL:         <http://lists.plone.org/pipermail/plone-plone-it/attachments/20090202/e549b689/attachment.asc>


Maggiori informazioni sulla lista Plone-IT