1

私はDexterityでこのようなコンテンツタイプを書いています:

class IArticle(form.Schema):

    title = schema.TextLine(
        title=_(u"Name"),
    )

    code = schema.TextLine(
        title=_(u"Code"),
    )

一部のユーザーがタイトルとして「foo」、コードとして「bar」を設定する新しい記事を作成すると、タイトルは「foo」になり、記事のURLは「.../foo」になります。コンテンツURLが「.../bar」であることを確認するにはどうすればよいですか?

4

2 に答える 2

5

あなたがしたいことは名前選択者に影響を与えることです、そしてあなたはあなたのインターフェースのためのカスタムの振る舞いでそれをすることができます。

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

于 2012-12-23T22:06:54.523 に答える
0

カスタムビヘイビアーを作成して、オブジェクトIDcode 属性値に設定します。

于 2012-12-23T19:37:41.363 に答える