Пользовательский шаблон AddForm с Ловкостью, на Plone 4 - PullRequest
4 голосов
/ 10 ноября 2011

У меня проблемы с тем, чтобы мой тип контента 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 правильно зарегистрирован во время установки, а тип контента доступен и доступен для добавления.

Наконец, в профилях / по умолчанию/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'

Как я могу предоставить собственный шаблон для формы добавления моего пользовательского типа?

1 Ответ

1 голос
/ 26 ноября 2012

Вы должны удалить строку grok.context(ICrmContact).

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

Также обратите внимание, что здесь мы не указываем контекст. Формы добавления всегда регистрируются для любого контекста IFolderish.

...