我正在升级到Plone 4.2(从4.0.1开始)并将我的主题产品从XDV转移到Diazo。
我提出了一个错误,当我将表单从叠加层提交到自定义页面模板时,生成的页面是“普通”。通过'plain'我的意思是唯一可见的内容是主要的内容区域,没有plone nav,logo,没有样式表存在等等。有一个'info'消息传递给这个页面,并且确实在页面顶部(虽然没有任何plone或主题样式的样式)。这就像目标页面完全在Plone空间之外呈现。
我尝试添加到rules.xml并将相应的ajax_load = python:request.form.get('ajax_load')添加到主题控制面板“高级设置”部分的参数中。然而,叠加层仍然是主题,并且表单目标页面仍然是“普通的”(我不会说'未经训练',因为即使是未经训练的Plone页面仍然具有基本徽标,导航等)。
我还尝试在我的叠加模板中添加并添加带有此ID的项目 - 叠加层仍然是主题。
我正在使用主题规则
不确定为什么叠加仍然是主题,如果这是问题的一部分?也不确定为什么表单目标页面模板呈现为“普通”。
如果我正常提交相同的表格(不是从叠加层),目标页面会正确呈现主题......
任何有关调试此功能的提示都将非常感谢。
使用Plone 4.2.0.1和plone.app.theming 1.1a2,我的主题是基于文件系统。
<小时/> 修改:确定我的某些叠加表单正常运行。差异似乎是表单操作的位置:
表格tal:attributes =“操作请求/网址” - 工作正常
表格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>
...
我也试过完全卸载我的主题产品 - 我仍然从香草plone中的这些特定叠加形式看到相同的行为......
答案 0 :(得分:2)
如果您正在使用JavaScript .prepOverlay()调用来设置ajax覆盖,那么它会自动附加ajax_load标志作为通过AJAX使用的查询字符串的一部分,以获取在覆盖中显示的代码。 / p>
有关ajax_load的说明,请参阅http://pypi.python.org/pypi/plone.app.jquerytools/1.5#ajax。简而言之,它会导致服务器除了关闭内容区域之外的所有内容。目的是避免将不必要的页面部分加载到已经显示在页面内的叠加层中。
如果您加载的表单是自己发布的(非常常见的Zope / Plone实践),那么ajax_load参数可能位于表单操作URL中。因此,您只获得返回的内容区域。
因此,您需要在自定义表单模板中执行一些操作,以确保在设置表单操作之前从URL的查询字符串中删除“ajax_load”。另外,从表单中删除任何“ajax_load”隐藏输入。