2

我在 Plone 4.3.3 中使用 PloneFormGen 1.7.12。我有一个包含大约 20 个名称的大型选择字段。这是必需的。如果用户选择其中一个名称,它应该将它们发送到一个 Plone Page 模板,该模板包含它们的说明。如果它选择任何其他页面,它应该向用户发送一封包含表单结果的电子邮件,并将他们带到感谢页面。

我曾尝试使用 python 脚本执行此操作,但我正在做的事情不起作用。脚本中的代码是:

REDIRECT = context.REQUEST.RESPONSE.redirect
URL=context.REQUEST.URL1 + '/'
FORM=context.REQUEST.form
school_name = context.REQUEST.form['school_name']

member = context.portal_membership.getAuthenticatedMember()
roles=member.getRolesInContext(context)

if school_name <> "Other-School not Listed":
    return False
else:
    return REDIRECT(URL + 'not_listed')

我将 python:here.school_redirect() 放在自定义表单操作覆盖中,但 URL 显示:

python:here.school_redirect()

页面显示“地址不被理解”

school_redirect是python脚本的id not_listed是Plone页面模板的id school_name是select字段的id

非常感谢任何建议。

乔比格勒

4

1 回答 1

1

Custom Form Action是一个简单的 StringField,没有 TALES 表达式字段。

这意味着您可以添加./school_redirectCustom Form Action,但是您遇到了其他问题,例如返回False不起作用,无论如何您都需要重定向。您还绕过所有验证器和成功处理程序。

所以恕我直言,另一种方法可能会更好:

1.覆盖成功处理程序

Custom Success ActionFormFolder 上的字段。您可以添加单个表达式或 python 脚本,它会返回正确的值。

字段说明:

在调用您的操作适配器(如果有的话)后,使用此字段代替感谢页面指定来确定最终操作。您通常会将其用于自定义成功模板或脚本。如果不需要,请留空。否则,像您一样指定 CMFFormController 操作类型和参数,以及要执行的操作类型(例如,“redirect_to”或“traverse_to”)和一个 TALES 表达式。例如,“redirect_to:string:thanks-page”将重定向到“thanks-page”。

./school_redirect只需稍作改动即可适应此解决方案。不要重定向自己,只需返回正确的 id(页面模板/视图/等)

2.不要触发邮件适配器

为此,Mail-Adapter 提供了一个名为Execution Condition.

将评估以确定是否执行此操作的 TALES 表达式。如果不需要,请留空,将执行该操作。您的表达式应计算为布尔值;如果您希望执行该操作,则返回 True。请注意:此表达式的评估错误将导致表单显示错误。

添加脚本或表达式,用于评估是否需要触发电子邮件。

您可以重用./school_redirect脚本来组成表达式:python: here.school_redirect() != 'not_listed'

于 2015-12-21T11:35:00.697 回答