打印本页
%09 %404 %2013 %16:%九 %PM

Joomla常用对象 User对象

作者
给本项目评分
(0 得票数)

目标:

     掌握joomla的User对象。

 

正文:

   许多的扩展都依据当前的用户来决定具体显示什么。一个用户对象有很多中属性,其中我们比较感兴趣的属性有:

属性 描述
activation  用来激活新用户状态的字符串
Aid 权限组id
block BOOL值 如果为空,那么就表示用户被禁止
email 用户的email地址
Gid 用户组id
guest BOOL值,如果为空,那么就表示用户没有登录
Id 用户ID,INT值,这个和用户名不同
lastvistDate 日期和时间 用户最后登录的日期和时间
name 用户名
params INI字符串参数
password 哈希加密的密码
registerDate 用户注册日期
sendEmail BOOL值,如果为真,表示用户接受系统邮件
usename 用户名
usertype 用户所属组的名称
   
   

当前正在浏览的对象用JUser来表示。我们可以通过JFactory::getUser()方法来访问这个对象。代码如下:

$user = & JFactory::getuser();

if($user->guest)

 {

  // user is a guest

}

 

用户参数

在$user对象中的参数属性是非常特殊的。我们设计一个INI字符串去存储附加的用户参数。默认的属性在User组件的根目录下的users.xml中声明。

下面是user.xml文件声明的属性:

参数 描述
admin_language 后台语言
language 前台语言
editor 使用的编辑器
helpsite 使用的帮会站点
timezone 使用的时区(UTC+0)

去操控这些设置我们用getParam()和setParam()方法来完成。我们可以直接访问params属性,这样做的话,我们需要自己解析参数。下面的代码演示了我们怎样决定一个用户的时区设置:

// get the default time zone from the registry

 $registry = & JFactory::getConfig();

$tzdefault = $registry->getValue('config.offset');

// get the user's time zone

$user = & JFactory::getuser();

$tz = $user->getParam('timezone',$tzdefault);

代码解释:

我们给getParam()用了一个默认值,这个值从网站的设置中提取。这个值是可选的。

下面的代码演示了怎样去修改用户的时区设置。

$user = & JFactory::getUser();

$user->setParam('timezone',0);

我们做的任何修改都只在用户会话的状态才有效,除非我们保存这些改变。用户参数不能作为一个零时数据。我们需要用session和用户state来完成零时数据的存储。

 

扩展用户属性通常有是那种方案;

  1. 在#__users 表中添加附加的字段
  2. 创建一个新的表,这个表和#__users表有一个一一对应关系
  3. 利用uses参数属性来存储附加的属性。

第一种方式会带来一些麻烦,最明显的一个就是如果有几个扩展都想扩展#__users表,那么很可能会出现命名冲突

第二种方法是一个不错的想法,特别适应于哪些需要被检索,可以进行查询的情况。但是为了成功的维护这个表,我们必须创建一个插件去处理onAgterStoreUser和onAfterDelteUser事件。

最后一种方案比较适合哪些不需要被检索到的字段。我们可以用三种方法来实现这种方案:

  • 用setParam()方法手动编辑参数。如果参数很少或者用户不打算用表单来修改这个参数,那么这种方法就非常合适。
  • 使用JParameter.如果用户打算通过使用表单来修改这个参数的话,那么这种方式还不错。
  • 允许用户通过用户组件来修改参数。为了实现这个,我们需要修改users.xml文件。

在开始之前,我们需要理解一些事情。一个JUser对象最少需要两个参数,一个事RAW参数或者数组。另一个是JParameter 对象。

当用户对话开始的时候,这两个参数都自动从数据库加载。如果我们修改了这个参数,这种修改只会在本次会话有效。需要保存修改到数据库,可以用save()方法。这个方法将会依据RAW参数来更新参数。

当我们用setParam()方法,仅仅JParameter对象被修改了。这是因为在保存前我们必须更新RAW参数属性。在处理保存用户改变到user参数过程中,我们必须小心处理,这有可能造成数据丢失。

下面的例子演示了我们怎样设置user的foor参数并且将这个改变保存到数据库中:

// get the user and add the foo parameter

$user = & JFactory::getUser();

$user ->setParam('foo','bar');

// update the raw user parameters

$param= & $user->getParameters();

$user->set('params',$params->tostring());

// save the change to the database

if(!$user->save())

{

        JError::raiseError('SOME_ERROR',JTEXT::_('Failed to save user'));

}

 

 

 

 

 

阅读 11080 次数 最后修改于 %22 %700 %2014 %23:%二 %PM