欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

使用钩子hook_user_login响应Drupal用户登录事件

shiping1 的头像

使用钩子hook_user_login响应Drupal用户登录事件

用户登录是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%...
普通分类: