Diazo:Plone中的非样式覆盖窗口

Diazo:Plone中的非样式覆盖窗口,plone,diazo,xdv,Plone,Diazo,Xdv,我正在升级到Plone 4.2(从4.0.1)并将我的主题产品从XDV移动到Diazo 出现了一个bug,当我将表单从覆盖提交到自定义页面模板时,生成的页面是“普通”的。“普通”是指唯一可见的内容是主内容区,没有plone导航、徽标、没有样式表等。有一条“信息”消息传递到此页面,并在页面顶部呈现(但没有任何plone或主题样式的样式)。这就像目标页面完全在Plone空间之外呈现一样 我已经尝试添加到rules.xml中,并将相应的ajax\u load=python:request.form.g

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

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

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

我还尝试添加一个标签,并在我的覆盖模板中粘贴一个带有此id的项目-覆盖仍然会被主题化

我正在使用主题规则

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

如果我提交相同的表单通常(不是从覆盖)的目标页面呈现正确的主题

任何关于调试的提示都将非常感谢

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


编辑:确定我的一些覆盖表单工作正常。区别似乎在于形式动作的位置:

表单tal:attributes=“操作请求/URL”-正常工作

form-tal:attributes=“action string:${context/absolute\u url}/@@view”-当从覆盖表单调用时,在第一次呈现时为我提供“普通”页面(如上所述,当从同一表单而不是覆盖表单中调用时,可以使用此页面)

请注意,“普通”页面html如下所示(请注意,没有包含基本Plone或主题标题):


为什么这一页很简单?
...

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

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

有关ajax\u load的功能的说明,请参阅。简而言之,它会导致服务器除去内容区域之外的所有内容。其目的是避免将不必要的页面部分加载到已显示在页面内的覆盖中

如果加载的表单是发布到自身的(一种非常常见的Zope/Plone实践),那么ajax\u load参数可能位于表单操作URL中。因此,只返回内容区域


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

您能否向我们展示(至少部分)模板中的代码?是无法加载资源,还是根本不引用它们?从覆盖提交页面时,页面的URL是否不同?感谢Steve,表单操作或隐藏字段中绝对没有ajax_加载。发布到自身时效果很好。。。只是在发布到其他目标时爆炸,例如
表单tal:attributes=“action request/URL”
-正常
表单tal:attributes=“action string:${context/absolute\u URL}/@@view”
在提交后生成普通页面。我在self.request.URL中没有看到ajax_load参数,是否还有其他地方需要我检查才能找到它?我使用pdb。。。注意:这些覆盖表单在Plone 4.0.1上工作得很好,当我们升级到Plone 4.2时,这个错误就开始了。我在self.request.keys()中找到了“ajax\u load”,然后在从覆盖提交表单时仍然设置它。似乎是一种解决方法,但我应该在解析表单时尝试删除它吗?有什么建议吗?我无法轻松删除self.request['ajax_load'],使用pdb作为self.request标识为类型'instance',我看不到通过dir(self.request)删除它的方法?我强烈怀疑问题在于答案末尾提到的隐藏输入。您能检查一下覆盖显示的表单,看看它是否有一个名为“ajax加载”的隐藏输入吗?如果是这样的话,这可能是我们应该在覆盖支持中解决的问题。它可能不应该在任何没有为ajax发布设置的表单上添加输入。你说得对。我之前确实说过,覆盖中没有“ajax\u load”隐藏表单字段,但现在我看到了。我现在已经关闭了我的主题,这样可能会使我之前看到的主题变得模糊。。。所以,是的,它肯定在叠加形式中。关于如何删除它的任何提示-jquery?
<!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>
...