Tinymce 在没有主模板的情况下呈现Plone SchemaAddForm?

Tinymce 在没有主模板的情况下呈现Plone SchemaAddForm?,tinymce,plone,Tinymce,Plone,我正在尝试编写一个Plone插件,它需要一个“AddNew”表单。到目前为止,我已经使用plone.directions.form.SchemaAddForm成功地实现了这一点。我在configure.zcml中注册了“@@create snippet”视图,当我正常查看页面时,它可以正常工作 然而,这个项目的最终目标是将这个添加表单放到一个TinyMCE弹出窗口中。我已经为附加组件的另一个不相关部分创建了一个工作正常的TinyMCE插件,并且工作正常。但是,当我尝试在tinyMCE窗口中导航到

我正在尝试编写一个Plone插件,它需要一个“AddNew”表单。到目前为止,我已经使用plone.directions.form.SchemaAddForm成功地实现了这一点。我在configure.zcml中注册了“@@create snippet”视图,当我正常查看页面时,它可以正常工作

然而,这个项目的最终目标是将这个添加表单放到一个TinyMCE弹出窗口中。我已经为附加组件的另一个不相关部分创建了一个工作正常的TinyMCE插件,并且工作正常。但是,当我尝试在tinyMCE窗口中导航到我的“@@create snippets”视图时,我得到:

LocationError:(0x107162fd0处的Products.Five.metaclass.DirectorySource2对象,“主模板”)

我对这个问题的理解是,从本质上讲,SchemaAddForm类(确切地说是它的一个超类)在呈现表单时使用主Plone main_模板包装表单。由于TinyMCE窗口是它们自己的、孤立的小世界,模板不可用,因此无法呈现……或者类似的东西?如果我走远了,请纠正我

我真正想知道的是,是否有可能在不使用主模板的情况下设置只渲染表单本身?我真的希望能够利用基于模式的表单(以及它们的内置验证),但仍然能够将所有内容都保存在TinyMCE窗口中

我曾经尝试过创建自己的ViewPageTemplateFile()模板,并在其中渲染表单(不知何故?),但坦率地说,我不知道如何…或者这是否可能

如果我遗漏了什么,请随时询问更多信息。我对这种Plone开发有点陌生

生成表单的代码:

from Products.Five.browser import BrowserView
from uwosh.snippets.snippet import SnippetManager
from plone.directives.form import SchemaAddForm
import zope.interface
from plone.autoform.form import AutoExtensibleForm
import zope.schema
from plone.directives import form
import z3c
from Products.statusmessages.interfaces import IStatusMessage

_ = zope.i18nmessageid.MessageFactory(u'uwosh.snippets')


class ISnippet(form.Schema):
    title = zope.schema.TextLine(
                                 title=u'Title',
                                 description=u'The title to associate with the snippet.',
                                 required=True)

    description = zope.schema.TextLine(
                                 title=u'Description',
                                 description=u'A short explanation of the snippet.',
                                 required=True)

    body = zope.schema.Text(
                                 title=u'Body',
                                 description=u'The actual content to be rendered on the page.',
                                 required=True)

class SnippetForm(SchemaAddForm):

    schema = ISnippet

    @z3c.form.button.buttonAndHandler(_('Save'), name='save')
    def handleAdd(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return
        obj = self.createAndAdd(data)
        if obj is not None:
            # mark only as finished if we get the new object
            self._finishedAdd = True            
            IStatusMessage(self.request).addStatusMessage(_(u"Snippet saved"), "info")

    @z3c.form.button.buttonAndHandler(_(u'Cancel'), name='cancel')
    def handleCancel(self, action):
        IStatusMessage(self.request).addStatusMessage(_(u"Add New Snippet operation cancelled"), "info")
        self.request.response.redirect(self.nextURL())


    def create(self, data):
        sm = SnippetManager()

        #TODO:
        #Include support for different folders from this form.
        snippet = sm.createSnippet(data['title'], None ,data)


        return snippet

    def add(self, object):
        #Since, for now, snippets are based upon ATDocuments, their creation is fairly staight-forward.
        #So, we don't really need separate Add/Create steps.
        return

    def nextURL(self):

        return self.context.absolute_url() + '/@@create-snippet'

您的要求是不变的吗/您是否被迫注入TinymCE?如果没有,请解释您的用例,可能有更简单的方法。并且确保已经检查了创建TinyMCE插件的文档(如果你想表现得更好,请注意你在这里找到的关于它的链接)。使用TinyMCE并不是绝对必要的,但这正是我们想要达到的目标。“理想”的结果是,从用户的角度来看,整个附加组件将存在于TinyMCE插件中。我已经仔细阅读了TinyMCE插件文档。我的理解是,我的特殊案例是非常规的,因此没有太多/任何文档来说明它。话虽如此,我会在前进中发布我发现的任何东西。好的,谢谢。我只是想知道,如果我没弄错的话:一个用户在编辑模式下编写文档,然后应该能够触发一个弹出窗口来填写表单?是的,这就是我们的目标。