You are here

hook_user()入门

g089h515r806 的头像
Submitted by g089h515r806 on 星期六, 2009-08-08 11:23

老葛的Drupal培训班 Think in Drupal

在你的模块中实现钩子hook_user(),它可以使你能够对用户账号进行不同的操作,以及修改$user对象。让我们看一下这个函数的签名:
 
function hook_user($op, &$edit, &$account, $category = NULL)
 
参数$op用来描述对用户账号所进行的当前操作,它可以有多个不同的值:
 
• after_update:在$user被保存到数据库中以后调用。
 
• categories:返回一个关于分类的数组,当用户编辑帐号时,这些分类被当作Drupal菜单本地任务(一般显示为可点击的标签)。这些实际上就是Drupal的菜单项。实现示例可参看profile.module中的profile_categories()。
 
• delete: 刚刚从数据库中删除了一个用户。这给了模块一个机会,用来从数据库中删除与该用户相关的信息。
 
• form:在被显示的用户编辑表单中,插入一个额外的表单字段元素。
 
• insert:新的用户帐号的记录已被保存到数据库中;将要保存$user->data和分配角色。之后,将会加载完整的$user对象。
 
• load:已成功加载用户帐号。模块可以向$user对象添加额外的信息(通过参数$account的引用传递,将信息传递给用户钩子)。
 
• login:用户已经成功登录。
 
• logout:用户刚刚退出登录,他/她的会话已被销毁。
 
• register:用户帐号注册表单将被显示。模块可以向表单中添加额外的表单元素。
 
• submit: 用户编辑表单已被提交。在帐号信息发送给user_save()以前,可对其进行修改。
 
• update: 已存在的用户帐号(修改后)将要被保存到数据库中。
 
• validate: 用户帐号已被修改。模块应该验证它的自定义数据,并生成必要的错误消息。
 
• view: 正在显示用户的帐号信息。模块应该返回它要显示的自定义信息,作为$user->content的结构化元素。查看操作最后调用theme_user_profile()来生成用户个人资料页面(更多详细可参看下面一节)。
 
     参数$edit是一个数组,当用户帐号正被创建或者更新时,所提交的表单数值构成了这一数组。注意它是通过引用传递的,所以你对它所做的任何修改都将修改实际的表单数值。
 
    $account对象(实际上就是一个$user对象)也是通过引用传递的,所以你对它所做的任何修改都将修改实际的$user信息。
 
    参数$category是正被编辑的当前用户帐号的分类。可以把分类看作用户相关的单独的信息组合。例如,如果你登录drupal.org,访问你的“我的账号”页面,并点击编辑标签,你将看到单独的分类,比如账号设置,个人信息,邮件订阅等等。
 
警告 不要混淆了hook_user()中的参数$account和全局变量$user对象。参数$account是当前正被操作的帐号的用户对象。而全局变量$user对象是当前登录的用户。通常,但不是绝对,两者是一样的。
 

Drupal版本: