1

この.is_folderish属性は多くの場所で使用されています。たとえば、オブジェクトをデフォルトビューとして設定する場合、またはオブジェクトのディスカッションをアクティブ化する場合です。

私の最初の質問は、オブジェクトにその属性が設定されているかどうかを確認する方法です。私は次のbin/instance debugようなものでを使用してみました:

>>> app.site.news.is_folderish
...
AttributeError: is_folderish

app.site.newsはその属性を持つオブジェクトのラッパーであるため、その方法では属性に到達できないと思います。

私の2番目の質問は、その属性を新しいDexterityオブジェクトに追加する方法です。以下のコードを使用して実行できると思います(ただし、最初の質問が解決されるまでテストできません)。

from zope import schema
from plone.dexterity.content import Item

class IHorse(form.Schema):
    ...

class Horse(Item):
    def __init__(self):
        super(Horse, self).__init__(id)
        is_folderish = False

しかし、両方のクラスをどのようにリンクできるかはわかりません。

4

1 に答える 1

2

is_folderishタイプに追加する必要はありません。これはカタログ内のインデックスであり、器用さの種類には既にそのインデックスの適切な属性がありますisPrincipiaFolderish

コンテンツ タイプに属性を追加する必要がある場合は、イベント サブスクライバーを使用するか、次のカスタム サブクラスを作成できますplone.dexterity.content.Item

  • サブスクライバーIObjectCreatedEventはイベントをリッスンできます。

    from zope.app.container.interfaces import IObjectAddedEvent
    
    @grok.subscribe(IYourDexterityType, IObjectCreatedEvent)
    def add_foo_attribute(obj, event):            
        obj.foo = 'baz'
    
  • カスタム コンテンツ クラスは、タイプ XML に登録する必要があります。

    from plone.dexterity.content import Item
    
    class MyItem(Item):
        """A custom content class"""
        ...
    

    次に、Dexterity FTI XML ファイルにklassプロパティを追加します。

    <property name="klass">my.package.myitem.MyItem</property>
    
于 2013-03-02T17:47:57.067 に答える