0

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

$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 循环运行的)。

我遇到了 2 个问题——这似乎是意料之外的。

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

    JUser: :_load: User xxxx does not exist

还有一个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

有人能看出这段代码有什么问题吗?或者知道JFactory::getUser()自从为 Joomla 2.5 编写该文档以来,标准是否发生了变化?

4

2 回答 2

2

如果您检查 JFactory 类,在 %joomlaFolder%/libraries/joomla/factory.php 方法 getUser($id = null) (第 210 行,对我来说)在里面使用 JUser,似乎问题是在获取当前会话时出现,然后,您可以直接使用JUser方法 getInstance 而不是JFactory::getUser,您的代码将像这样更改

前:

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

后:

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

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

于 2013-08-05T16:20:40.197 回答
1

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

例如:

SELECT * FROM users WHERE name = 'xxx';

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

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

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

于 2013-01-05T05:09:57.870 回答