Tinymce 在没有主模板的情况下呈现Plone SchemaAddForm?
我正在尝试编写一个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开发有点陌生 生成表单的代码:Tinymce 在没有主模板的情况下呈现Plone SchemaAddForm?,tinymce,plone,Tinymce,Plone,我正在尝试编写一个Plone插件,它需要一个“AddNew”表单。到目前为止,我已经使用plone.directions.form.SchemaAddForm成功地实现了这一点。我在configure.zcml中注册了“@@create snippet”视图,当我正常查看页面时,它可以正常工作 然而,这个项目的最终目标是将这个添加表单放到一个TinyMCE弹出窗口中。我已经为附加组件的另一个不相关部分创建了一个工作正常的TinyMCE插件,并且工作正常。但是,当我尝试在tinyMCE窗口中导航到
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插件文档。我的理解是,我的特殊案例是非常规的,因此没有太多/任何文档来说明它。话虽如此,我会在前进中发布我发现的任何东西。好的,谢谢。我只是想知道,如果我没弄错的话:一个用户在编辑模式下编写文档,然后应该能够触发一个弹出窗口来填写表单?是的,这就是我们的目标。