[Plone-IT] Products.DataGridField & FileColumn

Yuri yurj a alfa.it
Gio 6 Set 2012 12:08:27 UTC


Il 06/09/2012 13:51, Roberto Rascioni ha scritto:
> Il 06/09/12 10:24, Riccardo Lemmi ha scritto:
>> On Thursday 06 September 2012, Roberto Rascioni wrote:
>>> Il 05/09/12 11:57, Riccardo Lemmi ha scritto:
>>>> On Wednesday 05 September 2012, Roberto Rascioni wrote:
>>>>> Salve a tutti,
>>>>> avrei la necessità di caricare n file in un singolo Archetype e di
>>>>> associare ad ognuno di essi un titolo.
>>>>> Vorrei evitare di far aggiungere all'utente n (oggetti) File
>>>>> all'interno di un AT folderish ma di far caricare i file
>>>>> direttamente attraverso l'interfaccia di editing dell'AT
>>>>>
>>>>> Cercando un po' la scelta è ricaduta su Products.DataGridField che
>>>>> non ha purtroppo il campo file disponibile! :(
>>>>>
>>>>> Sapreste suggerirmi un prodotto o un metodo attraverso il quale
>>>>> integrare Products.DataGridField con il campo file?
>>>>>
>>>>> Grazie anticipatamente
>>>>> Roberto
>>>> Puoi partire da cotnent, field e widget di SimpleAttachment che
>>>> sono usati da RichDocument.
>>> Grazie mille! era proprio quello che stavo cercando!
>>>
>>> Ho iniziato a fare delle prove con SimpleAttachment ma purtroppo ho
>>> riscontrato delle problematiche che non riesco a risolvere...
>>> Quello che dovrei fare è estendere l'ATEvent e ho aggiunto così un
>>> campo booleano con il widget "AttachmentsManagerWidget" di
>>> SimpleAttachement (come in RichDocument)
>>>
>>> Il risultato è che il campo viene correttamente aggiunto
>>> all'interfaccia di editing dell'ATEvent ma l'upload dei file non va
>>> mai a buon fine nel senso che i file non vengono mai caricati nella
>>> piattaforma
>>>
>>> Ho pensato che forse il problema fosse dovuto dal fatto che ATEvent
>>> non è un oggetto folderish così ho provato a fare la stessa cosa con
>>> l'ATFolder, giusto per verificare, ma il problema non si risolve
>>>
>>> Ho provato a fare delle prove anche con un nuovo Archetype creato
>>> appositamente allo scopo ma lo stesso non sono riuscito a risolvere
>>> il problema
>>>
>>>
>>> Qualche suggerimento su cosa sto sbagliando o su cosa dovrei fare?
>>> ...
>> - installa SimpleAttachment nel portale (il widget usa dei template
>> definiti in questo prodotto)
>> - controlla l'implementazione di processForm in RichDocument
>>
>>
> @Luca Fabbri: purtroppo l'output della shell non sembra restituire 
> alcun errore..
>
> @Riccardo Lemmi:
> Si, avevo già installato SimpleAttachment e vedendo come fosse 
> strutturato RichDocument ho cercato di fare una prova con un nuovo 
> archetype includendo l'implementazione processForm ma senza successo...
>
> Di fatto non avevo provato ad includere la stessa implementazione 
> nell'estensione dell'ATEvent ho provando proprio ora ma il problema 
> purtroppo sembra non essere risolto
>
> Ora la configurazione che ho è questa
> Non so...forse sto facendo qualche stupido errore nella configurazione 
> ma non riesco a capire dov'è l'errore
>
> from Products.Archetypes.public import BooleanField
> from Products.Archetypes import atapi
>
> from archetypes.schemaextender.field import ExtensionField
>
> from zope.component import adapts
> from zope.interface import implements
> from archetypes.schemaextender.interfaces import ISchemaExtender
> from Products.ATContentTypes.interface import IATEvent
>
> from Products.SimpleAttachment.widget import AttachmentsManagerWidget
>
> from Products.ATContentTypes.content.event import ATEvent
>
>
> class EventExtensionBlobField(ExtensionField, BooleanField):
>     """ New Event field """
>
> class EventExtender(object):
>     adapts(IATEvent)
>     implements(ISchemaExtender)
>
>     def __init__(self, context):
>         self.context = context#
>
>     def getFields(self):
>         return self.fields
>
>     fields = [
>         EventExtensionBlobField('attachments',
>             default=True,
>             widget=AttachmentsManagerWidget(
>                 label=("Attachments"),
>                 description=(""),
>                 expanded=True,
>             )),
>     ]
>
>     # enable FTP/WebDAV and friends
>     PUT = ATEvent.PUT
>
>     def processForm(self, data=1, metadata=0, REQUEST=None, values=None):
>         ATEvent.processForm(self, data=data, metadata=metadata,
>                REQUEST=REQUEST, values=values)
>
>         request = REQUEST or self.REQUEST
>         if values:
>             form = values
>         else:
>             form = request.form
>
>         if "attachmentFile" in form and form["attachmentFile"]:
>             self.widget_attachmentsmanager_upload(state=None)
>         if "imageFile" in form and form["imageFile"]:
>             self.widget_imagesmanager_upload(state=None)
>


Io lo uso come è usato in richdocument, con il boolean field. Per il 
resto, le macro fanno tutto da sole e non c'è bisogno di toccare 
processForm.

         BooleanField('displayAttachments',
             default=True,
             languageIndependent=0,
             widget=AttachmentsManagerWidget(
                 i18n_domain='plone',
                 label="""Display attachments download box""",
                 label_msgid='EEPArticleNG_label_displayAttachments',
                 description="If selected, a list of uploaded 
attachments will be presented at the bottom of the document to allow 
them to be easily downloaded",
                 description_msgid='EEPArticleNG_help_displayAttachments',
             ),
         ),

     ),)

e funziona.


Maggiori informazioni sulla lista Plone-IT