あなたがしたいことは名前選択者に影響を与えることです、そしてあなたはあなたのインターフェースのためのカスタムの振る舞いでそれをすることができます。
INameForTitle
インターフェイスのサブクラス化が最も簡単です。
from plone.app.content.interfaces import INameFromTitle
from zope import interface, component
from ..types.interfaces import IArticle
class INameFromCode(INameFromTitle):
pass
class ArticleCodeAsTitle(object):
component.adapts(IArticle)
interface.implements(INameFromCode)
def __init__(self, context):
self.context = context
@property
def title(self):
return self.context.code
デフォルトの名前チューザーは、新しく追加されるオブジェクトをINameForTitle
インターフェースに適合させようとします。それが成功すると、.title
属性を使用してオブジェクトの新しい名前を作成します。IArticle
そのインターフェースのサブクラスをオブジェクトのアダプターとして実装することにより、.code
代わりにフィールドのタイトルを置き換えることができるため、代わりにそれが新しい名前に使用されるようになります。
これを次のように登録します:
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:plone="http://namespaces.plone.org/plone"
i18n_domain="your.i18n.domain"
>
<plone:behavior
title="ArticleCode"
description="Use .code as the title when choosing a new object name"
provides=".articlecode.INameFromCode"
factory=".articlecode.ArticleCodeAsTitle"
for="..types.interfaces.IArticle"
/>
</configure>
動作の代わりに、この動作をArticle
型定義に追加します。INameFromTitle