JFactory :: getUser()给出了奇怪的结果

时间:2013-01-04 19:39:35

标签: joomla joomla2.5

我正在创建一个涉及检查用户ID的扩展程序。基本上我通过JFactory::getUser();运行潜在用户名,如示例2 here。我的代码是

$user_id=&JFactory::getUser($name);
if($user_id->id==0) {      //Line 79
  $profile_link = $name;
} else {    
  $profile_link = '<a href="'.JRoute::_('index.php?option=com_comprofiler&task=userProfile&user='.$user_id->id).'">' . $name . '</a>';
}
echo $profile_link;

为了澄清,我刚刚选择了代码的相关部分。正如您可以看到用户名是否是有效用户,然后我链接到他们的社区构建器配置文件。另外我只是回显了这个名字(这是通过一个名单列表的foreach循环来运行的。)

我遇到了两个问题 - 似乎没有预料到。

  1. 首先,如果名称不存在。 Joomla将此作为错误发布在系统消息区域中。

    JUser: :_load: User xxxx does not exist

  2. 还有一个php错误(注意我在上面的代码中指出了第79行)

    Notice: Trying to get property of non-object in MODULEROOT/tmpl/default.php on line 79
    
    1. 其次,如果用户已注销,则该名称是否有效Joomla发现$user_id->id为0.这是尽管文档明确指出应该运行regardless of the status of the current user
    2. 有人可以看到这段代码有什么问题吗?或者知道自从为Joomla 2.5编写文档以来JFactory::getUser()的标准是否发生了变化?

2 个答案:

答案 0 :(得分:2)

如果你检查JFactory类,在%joomlaFolder%/ libraries / joomla / factory.php中方法getUser($ id = null)(第210行,对我来说)使用JUser里面,似乎问题来自获取当前sesion,那么,你可以直接使用JUser方法getInstance而不是JFactory::getUser,你的代码会像这样改变

在:

$user_id=&JFactory::getUser($name);

后:

$user_id=&JUser::getInstance($name);

由于两者都返回JUser对象,因此其余代码保持不变。

答案 1 :(得分:1)

在您的场景中,您可以做的不是使用Joomla内置函数,而是可以进行SQL查询(DB Call)来检索用户数据。

EG:

SELECT * FROM users WHERE name = 'xxx';

如果查询返回结果,您可以继续链接配置文件,否则您可以回显错误消息。

这将自动解决您的第二个问题。

如果您有任何问题,请告诉我。