为什么getSite()返回FormlibValidation对象

时间:2011-09-19 02:58:34

标签: plone kss

我在空白的Plone 4.1网站上安装了collective.quickupload, 并注意到当你添加一个quickupload portlet,kss调用字段验证(plone.app.form.kss)时,getSite函数将返回一个FormlibValidation对象,导致quickupload词汇表崩溃。

追溯在这里:http://pastebin.com/nvwChpZd

我的问题是:

  • 是(getSite函数返回FormlibValidation对象)的错误或预期行为吗?

  • 修复/解决/使collective.quickupload工作的解决方案?

1 个答案:

答案 0 :(得分:4)

getSite()返回最近的组件站点(可以存储本地实用程序),这实际上只意味着最后使用setSite()设置的内容,这通常在遍历时发生。

大多数情况下,调用setSite()的唯一遍历钩子是遍历Plone站点时触发的遍历钩子。但我认为旧的KSS内联表单验证机制使用(使用?)一个hack,它在运行中(在视图中)创建一个本地组件站点,并在请求的其余部分中将其设置为本地站点,以便它可以覆盖某些的东西。

您可以禁用验证(例如,禁用portal_kss中的相关KSS文件)或修复c.quickupload以检查getSite()的结果是否为ISiteRoot。如果不是,则应该采集包装,因此您可以执行aq_parent(站点)(或者可能是站点。 parent )以使父进程循环,直到找到ISiteRoot。