用户登录是Drupal网站开发中一个很重要的事件,我们经常要在用户登录之后做一些事情以丰富网站的功能,比如针对不同的用户角色调用不同的函数,重定向用户的登录目的地,或者只是简单的向登录用户打印一条欢迎信息。
Drupal提供了一个很好用的钩子函数hook_user_login()来帮助我们快速的实现这些需求。
在本文中,假定我们的Drupal模块名为mymodule,代码置于mymodule.module文件中。
hook_user_login()函数原型
1 | hook_user_login(& $edit , $account ) |
hook_user_login()函数参数说明
$edit:是一个数组,包含了用户提交的表单值和其他一些信息。
$account:是一个用户对象,包含了登录用户的相关信息。
我们可以在hook_user_login()函数中调用dpm函数方便的察看这两个参数的构造和详细信息。
1 2 3 4 | function mymodule_user_login(& $edit , $account ) { dpm( $edit ); dpm( $account ); } |
hook_user_login()函数的源代码
hook_user_login函数由Drupal内核中的user模块提供,源代码位于user.api.php文件(URL:modules/user/user.api.php)的第292行。
1 2 3 4 5 6 | function hook_user_login(& $edit , $account ) { // If the user has a NULL time zone, notify them to set a time zone. if (! $account ->timezone && variable_get( 'configurable_timezones' , 1) && variable_get( 'empty_timezone_message' , 0)) { drupal_set_message(t( 'Configure your <a href="@user-edit">account time zone setting</a>.' , array ( '@user-edit' => url( "user/$account->uid/edit" , array ( 'query' => drupal_get_destination(), 'fragment' => 'edit-timezone' ))))); } } |
hook_user_login()函数的简单范例
让我们来实现一个简单的范例,需求是:当用户登录我们的Drupal网站之后,在消息框中显示一条欢迎信息“非常感谢您的登录!”
1 2 3 | function mymodule_user_login(& $edit , $account ) { drupal_set_message(t( '非常感谢您的登录!' )); } |
来自 http://mydrupal.org/%E4%BD%BF%E7%94%A8%E9%92%A9%E5%AD%90hookuserlogin%E5%93%8D%E5%BA%94drupal%E7%94%...