[Plone-IT] Estendere AT Folder per singola istanza Plone

Roberto Rascioni r.rascioni a unimc.it
Mar 26 Feb 2013 12:01:59 UTC


Il 26/02/13 12.29, Luca Fabbri ha scritto:
> 2013/2/26 Roberto Rascioni <r.rascioni a unimc.it>:
>> Salve a tutti,
>> vorrei estendere l'AT Folder di Plone ed estenderlo solo nel momento in cui
>> un tema e/o un prodotto è installato nell'istanza Plone e non
>> incondizionatamente per tutti le istanze Plone che ho già in produzione.
>>
>> Per estendere il prodotto ho utilizzato archetypes.schemaextender e ho
>> seguito passo per passo la sezione chiamata Layer-aware example per fare in
>> modo che l'AT esteso sia associato ad uno specifico browser layer. Quando
>> riavvio l'istanza in debug Il tutto va a buon fine senza errori ma l'AT non
>> viene mai esteso con i campi che ho aggiunto.
>>
>> Ho notato che se nel file extender.py modifico il valore di implements da
>> implements(IBrowserLayerAwareExtender) a  implements(ISchemaExtender) l'AT
>> viene esteso correttamente ma ovviamente viene esteso per tutti i siti Plone
>> incondizionatamente
>>
>> Qualcuno di voi ha idea di come risolvere il problema e di quale sia
>> l'errore?
>>
> Prima di tutto: come hai gestito l'estensione? Lo chiedo perché se
> cerchi nell'archivio di questa ML trovi una recente e interessante
> discussione che parla di schemaextender e di problemi che puoi avere
> in certi casi.
>
> Dopo questo, se non hai usato le funzionalità base di schemaextender
> direi che il tuo problema sta nel non avere registrano bene il tuo
> layer...
>
> Magari se ci incolli un po' del tuo codice (le di interesse)  possiamo
> darti una mano.
>

Ciao Luca,
intanto grazie mille della risposta e della disponibilità.

Credo anche io che il problema sia nella registrazione del browser layer 
ma non riesco a capire dove sia l'errore...
in più mettici anche che quello stesso layer lo utilizzo per registrare 
altre browser:viewlet e il tutto funziona correttamente

Comunque di seguito invio il codice che ho utilizzato per estendere l'AT 
Folder
I file sono tutti nella cartella browser del tema che ho creato:
*
extender.py
------------------------------------------------------*

from Products.Archetypes.public import LinesField, BooleanField
from Products.Archetypes.public import MultiSelectionWidget, BooleanWidget
from plone.app.blob.field import BlobField, ImageField

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, 
IOrderableSchemaExtender, IBrowserLayerAwareExtender
from Products.ATContentTypes.interface import IATFolder

from Products.CMFCore.permissions import ManageProperties, ManageUsers
from Products.Archetypes.atapi import DisplayList

from interfaces import IThemeSpecific


class FolderOptionsFields(ExtensionField, BooleanField):
    """ New added fields """


class FolderExtender(object):
     adapts(IATFolder)
     implements(IBrowserLayerAwareExtender)

     # Don't do schema extending unless our add-on product is installed 
on Plone site
     layer = IThemeSpecific


     fields = [
         FolderOptionsFields("showtitleinsection",
         write_permission = ManageUsers,
         schemata='settings',
         widget=BooleanWidget(label=" Lorem ipsum dolor sit amet"
                description=" consectetur adipisicing elit, sed do 
eiusmod tempor incididunt ut labore et dolore magna aliqua"
                 )),
               ]


     def __init__(self, context):
         self.context = context

     def getFields(self):
         return self.fields



*overrides.zcml
----------------------------------------------------------
*
   <include package="archetypes.schemaextender" />

   <adapter factory=".archetype_extender.FolderExtender" 
provides="archetypes.schemaextender.interfaces.ISchemaExtender" />



*interfaces.py*
------------------------------------------------------------

from plone.theme.interfaces import IDefaultPloneLayer
from plone.portlets.interfaces import IPortletManager
from zope.viewlet.interfaces import IViewletManager
from zope.interface import Interface

class IThemeSpecific(IDefaultPloneLayer):
     """Marker interface that defines a Zope 3 browser layer.
        If you need to register a viewlet only for the
        "University of Macerata theme" theme, this interface must be its 
layer
        (in theme/viewlets/configure.zcml).
     """






-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.plone.org/pipermail/plone-plone-it/attachments/20130226/fd49fc86/attachment.html>


Maggiori informazioni sulla lista Plone-IT