[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