Schema extender for a specific browser layer
by
hedley
—
posted on
Jun 22, 2009 11:25 PM
—
last modified
Jul 03, 2009 09:06 PM
archetypes.schemaextender is currently a bit light on documentation so I created this example of a schema extender that extends a schema for only a single browser layer.
Our class extender.py. Note the required layer attribute.
from zope.component import adapts
from zope.interface import implements
from archetypes.schemaextender.interfaces import \
IBrowserLayerAwareExtender, IOrderableSchemaExtender
from archetypes.schemaextender.field import ExtensionField
from Products.Archetypes.atapi import *
from Products.ATContentTypes.content.document import \
ATDocument
from myproduct.themebrowser.interfaces import IThemeSpecific
class efStringField(ExtensionField, StringField):
pass
class DocumentExtender(object):
adapts(ATDocument)
implements(IOrderableSchemaExtender,
IBrowserLayerAwareExtender)
layer = IThemeSpecific
fields = (
efStringField(name='skinString',
widget=StringField._properties['widget'](
label="Skin String",
),
),
)
def __init__(self, context):
self.context = context
def getFields(self):
return self.fields
def getOrder(self, original):
return original
ZCML snippet
<include package="archetypes.schemaextender" /> <adapter factory="myproduct.theme.extender.DocumentExtender" for="Products.ATContentTypes.content.document.ATDocument" provides="archetypes.schemaextender.interfaces.IOrderableSchemaExtender" name="document-extender"/>
browserlayer.xml for GenericSetup profile
<?xml version="1.0"?>
<layers>
<layer name="myproduct.theme"
interface="myproduct.theme.browser.interfaces.IThemeSpecific" />
</layers>






