将有效的Plone联系表单添加到main_template.pt
我正在尝试把Plone自带的联系表单整合到我网站的主模板中。这样做是为了让“联系我们”这个导航按钮在这个网站上能在Plone环境中正常工作。我计划通过稍微修改contact-info.cpt文件,把它变成一个宏,然后在main_template.pt中使用这个宏。可是,当我尝试查看我网站上的任何页面时,都会出现一个LocationError,除非我把contact-info.cpt中的tal:define="errors options/state/getErrors"
这一行去掉。
这是我在代码中有那一行时遇到的错误链接。如果我去掉那一行,页面就能正常显示,而且看起来正是我想要的样子,但在提交表单时又会出错。这个情况的错误可以在这里找到。我在这两种情况下都感到很困惑,希望能得到一些建议。
更新(我使用的解决方案):
我想更新一下,告诉大家我是怎么让这个功能正常工作的。Martijn Pieters提供的信息对我理解为什么不工作非常有帮助,但我当时并不知道该如何继续。最后,我决定使用jQuery来让这个功能在site_actions和我自定义的下拉菜单中正常工作。我把表单的内容用一个简单的id为“contact-info”的div包裹起来,然后在主模板中也添加了一个简单id为“load-area”的div。最后一步是把我的contact.js文件改成contact.js.pt,并添加这三行代码:
<tal:block define="portal_url context/@@plone_portal_state/portal_url">
jq('#load-area').load('<span tal:replace="portal_url"></span>/contact-info #contact-info');
</tal:block>
我觉得应该把这个分享出来,以防以后能帮助到其他人。
2 个回答
尝试一下这个链接:
http://svn.quintagroup.com/products/quintagroup.portlet.pfg/trunk/
不过看起来这个东西不太被支持。
如果你把它和PloneFormGen结合起来,就可以创建一个联系表单,并把它显示为一个小部件。
你不能直接把控制器页面模板(.cpt
)当作宏来使用。
首先,控制器Python脚本在运行时需要一些参数,这些参数在你重新使用它的TAL语句时并不存在(其中一个就是options/state
结构)。所以你需要对模板进行修改,让它不依赖这些部分。
其次,这个是一个HTML表单,而表单需要一个目标来发送数据。在控制器页面模板中,这个目标是通过.metadata
文件来控制的,你需要明确设置它的目标。