0

我正在升级到 Plone 4.2(从 4.0.1)并将我的主题产品从 XDV 移动到 Diazo。

出现了一个错误,当我将表单从叠加层提交到自定义页面模板时,生成的页面是“普通”的。“普通”是指唯一可见的内容是主要内容区域,没有 plone 导航、徽标、没有样式表等。有一条“信息”消息传递到此页面,并且确实呈现在页面顶部(尽管没有任何 plone 或主题样式的样式)。就像目标页面完全呈现在 Plone 空间之外。

我尝试添加到我的 rules.xml 并将相应的 ajax_load = python: request.form.get('ajax_load') 添加到主题控制面板“高级设置”部分的参数中。然而,覆盖仍然是主题,表单目标页面仍然是“普通”(我不会说“非主题”,因为即使是非主题的 Plone 页面仍然具有基本徽标、导航等)。

我还尝试在我的叠加模板中添加并粘贴一个带有此 ID 的项目 - 叠加仍然是主题。

我正在使用主题规则

不知道为什么覆盖仍然是主题,如果这是问题的一部分?也不确定为什么表单目标页面模板呈现“普通”。

如果我正常提交相同的表单(不是来自覆盖),则目标页面呈现正确的主题......

任何调试这个的提示都会非常感谢。

我正在使用 Plone 4.2.0.1 和 plone.app.theming 1.1a2,我的主题是基于文件系统的。


编辑:好的,我的一些覆盖表单工作正常。不同之处似乎在于表单操作的位置:

form tal:attributes="action request/URL" - 工作正常

form tal:attributes="action string:${context/absolute_url}/@@view" - 当从覆盖表单调用时,在第一次渲染时给我“普通”页面(如上所述,当从同一个表单调用时很好,不是在叠加层中)

请注意,“普通”页面 html 是这样的(注意没有基本的 Plone 或主题头包含):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><base href="http://localhost:8080/Plone/sectionfoo/sectionbar/mypage" /><!--[if lt IE7]></base><![endif]--></head>
<body class="template-view portaltype-myCustomType site-Plone section-sectionfoo icons-on havePortlets haveLeftPortlets haveRightPortlets" dir="ltr">
<h1 class="documentFirstHeading">Why is this page plain?</h1>
...

我还尝试完全卸载我的主题产品 - 我仍然在 vanilla plone 中看到这些特定覆盖形式的相同行为......

4

1 回答 1

2

如果您使用 JavaScript .prepOverlay() 调用来设置 ajax 覆盖,那么它将自动附加 ajax_load 标志作为通过 AJAX 使用的查询字符串的一部分,以获取显示在覆盖中的代码。

请参阅http://pypi.python.org/pypi/plone.app.jquerytools/1.5#ajax了解 ajax_load 的作用。简而言之,它会导致服务器剥离除内容区域之外的所有内容。目的是避免将不必要的页面部分加载到已显示在页面内的叠加层中。

如果您加载的表单正在向自身发布(Zope/Plone 非常常见的做法),那么 ajax_load 参数可能位于表单操作 URL 中。因此,您只得到返回的内容区域。

因此,您需要在自定义表单模板中做一些工作,以确保在设置表单操作之前从 URL 的查询字符串中去除“ajax_load”。此外,从表单中删除任何“ajax_load”隐藏输入。

于 2012-09-27T17:47:53.767 回答