我有一个Drupal网站,它使用Quiz模块管理访问者的测试。匿名用户需要使用这些测试。我的问题是我需要能够让考生输入姓名和电子邮件,以便将结果发送给他们。我只是不知道该怎么做。我认为自己是Drupal和PHP的初学者。 任何帮助将不胜感激。
答案 0 :(得分:5)
- 首先,创建一个custom module。
- 其次,您需要添加电子邮件地址和名称字段。您可以通过在自定义模块中通过hook_form_alter添加两个字段,或者通过启用和使用测验模块中包含的简短答案模块/字段,然后根据您的需要自定义字段样式来实现此目的(因为它看起来像一个问题)。就个人而言,我建议使用hook_form_alter添加它们。另外,我建议您了解Drupal中的Hooks,它会让您的生活更轻松。
- 您必须验证并检索两个字段的值。您也可以使用相同的form_alter挂钩。 Add a validation and a submission function到您的测验表单的验证和提交堆栈($form['#validate'][] = 'your_validate_function';
和$form['#submit'][] = 'your_submit_function';
)。您可以使用Drupal的函数valid_email_address验证您的电子邮件,当然,您可以验证其他字段并调用Drupal的form_set_error来通知用户任何输入错误。
- 在提交测验后发送您的电子邮件,在您的提交功能中调用Drupal的drupal_mail,它基本上会获取发送电子邮件所需的所有参数。您必须在自定义模块中创建一个hook_mail。查看如何执行此操作的示例here。您可以从本地数组$ form_state ['values']检索表单值(名称和电子邮件地址),将它们作为$ params传递给drupal_mail函数,并将它们添加到hook_mail函数中的电子邮件正文中。就是这样:D
- 或者,您可以通过创建操作并指定用户完成此测验后要执行的操作来发送电子邮件。测验模块支持这一点。以下是how to write an action的示例。
答案 1 :(得分:1)
您也可以使用hook_quiz_finished
代替表单提交回调。
测验模块使用它来执行测验结束时通过电子邮件发送结果等操作。
function mymodule_quiz_finished($quiz, $score, $session_data) {
//Sending e-mail.
}
答案 2 :(得分:0)
如果你在这里结束并且你正在使用Drupal 7,请转到规则http://www.yourwebsite.com/admin/config/workflow/rules,并在设置下设置Quiz模块已经可用的规则,该规则称为“发送测验结果at测验结束“。我无法在Quiz配置本身的任何地方找到这样做的能力。测试和它的工作。确保启用规则模块UI以允许您进行编辑。