0

collective.z3cform.datagridfieldビルドアウトに追加しました。サイト設定でアクティブとして表示されます。datagridfieldただし、器用さのコンテンツ タイプの Web エディターを使用してタイプのフィールドを追加することはできません。私は何が欠けていますか?

4

1 に答える 1

2

vangheem の回答の拡張: フィールド ファクトリを提供することで、collective.z3cform.datagridfield のサポートを提供できますが、それはハックになります。

その理由はcollective.z3cform.datagridfield.row.DictRow、テーブルの行を定義するスキーマが必要だからです。これは、レンダリングされるとサブフォームになります。このインスタンスの schemaeditor は、フィールド タイプに応じて (table-) スキーマについても問い合わせる必要があります。

求めているソリューションによっては、次のような固定テーブル スキーマを使用してフィールド ファクトリを実装することで回避できる場合があります。

from five import grok
from zope import schema
import collective.z3cform.datagridfield.row
import plone.schemaeditor.interfaces
import zope.interface

# example from http://pypi.python.org/pypi/collective.z3cform.datagridfield
class ITableRowSchema(zope.interface.Interface): 
    one = schema.TextLine(title=u"One")
    two = schema.TextLine(title=u"Two")
    three = schema.TextLine(title=u"Three")

# new field factory for the zope.schema.interfaces.IObject
class DataGridFieldFactory(grok.GlobalUtility):
    grok.provides(plone.schemaeditor.interfaces.IFieldFactory)
    # this will show up in the schema editor vocabulary
    title = "DataGridField"

    def __call__(self, *args, **kwargs):
        # that's the horrid part as it will nail your field to this
        # specific schema
        kw = dict(value_type=collective.z3cform.datagridfield.row.DictRow(
            schema=ITableRowSchema))
        kwargs.update(kw)
        return zope.schema.List(*args, **kwargs)

plone.schemaeditor.fields.pyフィールドファクトリーの詳細については、以下をご覧ください。

これにより、コンテンツ タイプの基本的なデータグリッドが得られます。欠けているのはウィジェットです。現在、AFAIK と宣言することはできません。

于 2012-01-19T00:51:35.927 に答える