当Drupal创建了用来存储数据的annotations表以后,我们需要修改一下我们的代码。其一,我们将需要添加一些逻辑代码,这样在用户输入注释并且点击更新按钮以后,它可以用来负责对输入数据的处理工作。我们的表单提交函数如下所示:
/**
* Handle submission of the annotation form and saving
* of the data to the database.
*/
function annotate_entry_form_submit($form, $form_state) {
global $user;
$note = $form_state['values']['note'];
$nid = $form_state['values']['nid'];
db_query('DELETE FROM {annotations} WHERE nid = %d AND uid = %d',
$nid, $user->uid);
db_query("INSERT INTO {annotations} (nid, uid, note, created) VALUES
(%d, %d, '%s', %d)", $nid, $user->uid, $note, time());
drupal_set_message(t('Your annotation has been saved.'));
}
由于我们在一个节点上只允许一个用户有一个注释,所以我们可以安全的删除以前的注释(如果有的话),然后把我们自己的插入到数据库中。对于我们与数据库的交互,需要注意以下几点。首先,我们不需要考虑数据库连接,这是因为Drupal在它的引导指令中已经为我们完成了这一工作。第二,在我们使用一个数据库表时,我们需要把它放到花括号里{}.这样就可以无缝的实现数据库表的前缀化(关于表前缀化的更多详细,可参看文件sites/default/settings.php中的注释)。第三,我们在查询语句中使用了占位符,并为其提供了相应的变量,这样Drupal内置的查询安全清理机制就可以帮助我们阻止SQL注入攻击。占位符%d用于数字,而占位符%s用于字符串。最后,我们使用drupal_set_message()来将一条消息隐藏在用户的会话中,在用户查看的下一个页面时,它就会被Drupal作为一个通知显示给用户。这样,用户就获得一些反馈信息。
老葛的Drupal培训班 Think in Drupal
评论
这里的代码应该放在哪里?
是annotate.module ,是 annotate.install,还是 annotate.admin.inc?
我放在了annotate.module中,可以运行,不知道
我放在了annotate.module中,可以运行,不知道对不对!
那就直接放到module文件中吧,区别不大,原来是为了提升
那就直接放到module文件中吧,区别不大,原来是为了提升性能,所以把模块文件分成了多个文件,后来解决了性能问题,分成多个文件,只是为了方便一点。