Skip to content. | Skip to navigation

Personal tools

Navigation

You are here: Home / Tips / Archetypes SchemaExtender

Archetypes SchemaExtender

archetypes.schemaextender 能夠用來動態調整 Archetypes 的 schema 內容,最常見的用法,是擴充 Plone 預設內容型別的功能。

archetypes.schemaextender 能夠用來新增欄位、調整欄位順序、隱藏欄位,它向 Archetypes 的 BaseContent 和 BaseFolder 註冊了 ISchema apapter,從這兩個基本型別衍生的所有內容,就會受到它的控制。

Description Widget

預設的 Description 欄位採用 TextAreaWidget 部件,輸入的文字並不會有換行的效果,想要保留 HTML標籤效果的話,可以利用 archetypes.schemaextender 更換 TextAreaWidget 部件

先建立一個 adapter 檔案,範例如下:

from my.product.browser.interfaces import IMyProductLayer
from my.product.widgets import MyCustomWidget
from Products.ATContentTypes.interface.interfaces import IATContentType
from archetypes.schemaextender.interfaces import IBrowserLayerAwareExtender
from archetypes.schemaextender.interfaces import ISchemaModifier

class MyExtender(object):
    adapts(IATContentType)
    implements(IBrowserLayerAwareExtender, ISchemaModifier)
    layer = IMyProductLayer

    def fiddle(self, schema):
        schema['description'].widget=MyCustomWidget(
            label='...',
            ....
        )

再完成註冊動作,範例如下:

<adapter
    factory=".extender.MyExtender"
    provides="archetypes.schemaextender.interfaces.ISchemaModifier" />

Another Example

http://weblion.psu.edu/services/documentation/developing-for-plone/fsd-extender/hiding-fields

http://weblion.psu.edu/static/schemaextender-presentation/newsitemchannel.zip

Moving Fields to Schemata

疑問: schemaextender 可以用來改預設值嗎?