You are here

理解hook_user('view')

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

老葛的Drupal培训班 Think in Drupal

模块可以使用hook_user('view')来向用户个人资料页面添加信息(例如,你在http://example.com/?q=user/1看到的;参看图6-1)
6-1 用户个人资料页面,这里日志模块和用户模块通过实现hook_user('view')来向该页面添加额外信息
 
    让我们看一下日志模块是如何向这一页面添加它的信息的:
 
/**
* Implementation of hook_user().
*/
function blog_user($op, &$edit, &$user) {
    if ($op == 'view' && user_access('create blog entries', $user)) {
        $user->content['summary']['blog'] = array(
            '#type' => 'user_profile_item',
            '#title' => t('Blog'),
            '#value' => l(t('View recent blog entries'), "blog/$user->uid",
                array('title' => t("Read @username's latest blog entries.",
                array('@username' => $user->name)))),
            '#attributes' => array('class' => 'blog'),
        );
    }
}
    查看操作向$user->content中加入了一些信息.用户资料信息组织成类别,而每个类别表示一个页面,里面包含了关于用户的信息.在图6-1中,只有一个名为History的类别.外部的数组的键应该对应于类别名,在前面的例子中,键的名字为summary,它对应于History类别(诚然,如果键的名字与类别名相同的话,那么会更好一些).内部数组应该有一个唯一的文本键(在这里为blog),它有4个元素#type, #title, #value, 和 #attributes。类型user_profile_item的主题层对应于modules/user/user-profile-item.tpl.php。通过对比代码片断与图6-1,你可以看到这些元素是如何显示的。图6-2给出了$user->content数组的内容,它生成了如图6-1的页面。
6-2. $user->content的结构
 
    你的模块还可以通过实现hook_profile_alter(),在个人资料项被主题化以前,来操作个人资料项。下面这个的例子,简单的从你的用户个人资料页面删除了日志项目。我们这里假定这个函数是模块hide.module中的:
 
/**
* Implementation of hook_profile_alter().
*/
function hide_profile_alter(&$account) {
    unset($account->content['summary']['blog']);
}
 

Drupal版本: