2012-01-18 3 views
2

私は初心者です(約2日後)。私は以前のコンテンツタイプをマイグレーションの過程でコンテンツに変換しようとしています。古典的な原型で手触りのアクセッサとミューテータメソッド

スキーマdefinationは、私が器用で再定義することができますどのように

TextField('script', 
      searchable=0, 
      mutator="write", 
      accessor="__call__", 
      edit_accessor="document_src", 
      widget=TextAreaWidget(label="Page Template script",rows=40,cols=40), 

のようなものですか?私はPlone 252からPloneの412

よろしく、あなたは最初から新しい敏捷コンテンツタイプを作成し、完全にplone.directivesから継承する新しいスキーマにあなたの原型のスキーマを書き換える必要があります

+1

はあなたがアクセサが必要か?敏捷性のポイントの1つは、解読またはアクセサ/ミューテータコードの生成の必要性を取り除くことです。フィールド値を提供するメソッドが必要な場合は、(カスタムコンテンツクラスの)Pythonのプロパティまたは記述子を使用して、set/getのフィールド/属性/プロパティインターフェイスの背後にあるメソッドを抽象化することができます。 – sdupton

+0

うーん。私はこれらのメソッドの使用についてはわかりません。私はこの機敏さを熟知しています - 開発者 - manual.readthedocs.org/en/latest/advanced/...しかし、それは私には分かりません – WEBBYFOX

+0

私はページテンプレートのコードとレンダリングするフィールドを持つコンテンツタイプを作成しようとしていますカスタムビュー。そのため私はzptメソッドを使用するために私の古いアーキタイプでアクセサとミューテータを使用していました。 – WEBBYFOX

答えて

3

にアップグレードしています。フィールド型はzope.schemaとなります。

詳細については、こちらをご覧ください:たとえば http://plone.org/products/dexterity/documentation/manual/developer-manual/schema-driven-types/referencemanual-all-pages

、あなたの原型のスキーマのフィールド宣言は、敏捷で、このようなもののようになります。

script = schema.TextLine(
     title=_(u"Page Template Script"), 
    ) 

敏捷コンテンツタイプは、自動取得しませんArchetypesコンテンツタイプのようなアクセサーとミューテータ。代わりに、スキーマフィールドに属性としてアクセスするだけです。例えば

script = myfolder.script 

あなたは(あなたがアーキタイプ]フィールドで指定したように)同じアクセサとミューテーターを作成したい場合、あなたはあなたの敏捷クラスに手動で作成する必要があります。

例えば、のようなもの:

class MyFolder(dexterity.Container): 
    """ """ 
    grok.implements(IMyFolderSchema) 

    def __call__(self): 
     return self.script 

    def edit_accessor(self): 
     return self.script 

    def write(self, value): 
     self.script = value 
関連する問題