4

Dexterity コンテンツ タイプでカスタムの追加フォームを表示するのに問題があります。私は以前の製品ですでにこれを行っていますが、驚くべきことに、Plone 4.1 と plone.app.dexterity 1.0.3 を使用してこれを達成することはできません。

package.name.types.contact.py にある私の CrmContact コンテンツ タイプのスキーマは、次のように定義されています。

from five import grok
from zope import schema
from zope.interface import implements

from plone.directives import form, dexterity


class ICrmContact(form.Schema):
    """A contact item for the CRM"""

    title = schema.TextLine(
            title=_(u"Company name"),
    )

    ...

class CrmContact(dexterity.Container):
    implements(ICrmContact)


class Add(dexterity.AddForm):

    grok.context(ICrmContact)
    grok.name('package.name.contacts.types.contact')
    grok.template('add')

私のテンプレートは package/name/types/contact_templates にあります。典型的なテンプレートです。例外を発生させるために、tal:content を使用して存在しないメソッドを呼び出すダミー ノードがあるため、レンダリングされていないことはわかっています。したがって、テンプレート自体は問題ではないと確信しています。

コンテンツ タイプ FTI はインストール中に正しく登録され、コンテンツ タイプは利用可能で追加可能です。

最後に、profiles/default/types.package.name.types.contact.xml で:

<?xml version="1.0"?>
<object name="package.name.types.contact" meta_type="Dexterity FTI"
    i18n:domain="package.name" xmlns:i18n="http://xml.zope.org/namespaces/i18n">

    ...

    <!-- Method aliases -->
    <alias from="(Default)" to="(dynamic view)" />
    <alias from="edit" to="@@edit" />
    <alias from="sharing" to="@@sharing" />
    <alias from="view" to="(selected layout)" />

    <!-- Actions -->
    <action title="View" action_id="view" category="object"
        condition_expr="" url_expr="string:${object_url}" visible="True">
        <permission value="View" />
    </action>
    <action title="Edit" action_id="edit" category="object"
        condition_expr="" url_expr="string:${object_url}/edit" visible="True">
        <permission value="Modify portal content" />
    </action>
</object>

関係ありませんが、ここに何か追加する必要があるかもしれません...

ご覧のとおり、正しい手順に従ったと思いますが、まだ機能させることができません。

updateWidgets() メソッドを提供してブレークポイントを挿入すると、それが呼び出されるため、クラス Add がインスタンス化されることはわかっています。オブジェクトをイントロスペクトすると、self.template は None です。それでも:

(Pdb) getattr(self, 'grokcore.view.directive.template')
'add'

カスタム タイプの追加フォームにカスタム テンプレートを提供するにはどうすればよいですか?

4

1 に答える 1

1

行を削除する必要がありますgrok.context(ICrmContact)

http://plone.org/products/dexterity/documentation/manual/developer-manual/advanced/formsから:

また、ここではコンテキストを指定しないことに注意してください。追加フォームは常に IFolderish コンテキストに登録されます。

于 2012-11-25T23:26:55.107 に答える