我正在创建一个涉及检查用户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循环来运行的。)
我遇到了两个问题 - 似乎没有预料到。
首先,如果名称不存在。 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
$user_id->id
为0.这是尽管文档明确指出应该运行regardless of the status of the current user
有人可以看到这段代码有什么问题吗?或者知道自从为Joomla 2.5编写文档以来JFactory::getUser()
的标准是否发生了变化?
答案 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';
如果查询返回结果,您可以继续链接配置文件,否则您可以回显错误消息。
这将自动解决您的第二个问题。
如果您有任何问题,请告诉我。