plone - 在 Plone 4 上具有 Dexterity 的自定义 AddForm 模板

标签 plone dexterity

我在让我的 Dexterity 内容类型显示自定义添加表单时遇到问题。我已经在以前的产品中做到了这一点,但令人惊讶的是,我无法使用 Plone 4.1 和 plone.app.dexterity 1.0.3 完成此操作

我的 CrmContact 内容类型位于 package.name.types.contact.py 中,其架构以这种方式定义:

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>

无关,但也许我必须在这里添加一些东西......

如您所见,我认为我遵循了正确的程序,但我仍然无法使其正常工作。

我知道类 Add 正在被实例化,因为如果我提供一个 updateWidgets() 方法并插入一个断点,它就会被调用;当我反省对象时, self.template 为 None;虽然:
(Pdb) getattr(self, 'grokcore.view.directive.template')
'add'

如何为我的自定义类型的添加表单提供自定义模板?

最佳答案

您应该删除行 grok.context(ICrmContact) .

来自 http://plone.org/products/dexterity/documentation/manual/developer-manual/advanced/forms :

Also note that we do not specify a context here. Add forms are always registered for any IFolderish context.

关于plone - 在 Plone 4 上具有 Dexterity 的自定义 AddForm 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8077080/

相关文章:

plone - 我可以在 Dexterity 中创建表格数据字段吗?

plone - 使用 setattr 在 Plone 的内容类型中设置简单属性是一种不好的做法(我的意思是,它将来会困扰我吗)?

python - 在以灵活的形式设置另一个字段后,动态更改一个字段的下拉选项。架构

python - 如何在 Plone 上扩展扩展内容类型

plone - 如何在 Zope 和 Plone 中获取和设置 cookie?

workflow - Plone 工作流程的 chalice

plone - 从 "add link"对话中看不到新的敏捷内容类型

plone - 如何将关键字添加到 SearchableText 以获取 Dexterity 内容类型?

tinymce - 获取 Plone 5 上的 "default"模型 TinyMCE 配置

javascript - 使用 Plone 添加/编辑弹出窗口