将有效的Plone联系表单添加到main_template.pt

3 投票
2 回答
524 浏览
提问于 2025-04-17 02:09

我正在尝试把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 个回答

0

尝试一下这个链接:

http://svn.quintagroup.com/products/quintagroup.portlet.pfg/trunk/

不过看起来这个东西不太被支持。

如果你把它和PloneFormGen结合起来,就可以创建一个联系表单,并把它显示为一个小部件。

4

你不能直接把控制器页面模板(.cpt)当作宏来使用。

首先,控制器Python脚本在运行时需要一些参数,这些参数在你重新使用它的TAL语句时并不存在(其中一个就是options/state结构)。所以你需要对模板进行修改,让它不依赖这些部分。

其次,这个是一个HTML表单,而表单需要一个目标来发送数据。在控制器页面模板中,这个目标是通过.metadata文件来控制的,你需要明确设置它的目标。

撰写回答