【问题标题】:JFactory::getUser() giving odd resultsJFactory::getUser() 给出奇怪的结果
【发布时间】:2013-01-04 19:39:35
【问题描述】:

我正在创建一个涉及检查用户 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 循环运行的)。

我遇到了 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-&gt;id 为 0。尽管文档明确说明这应该运行 regardless of the status of the current user

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

【问题讨论】:

    标签: joomla joomla2.5


    【解决方案1】:

    如果你检查 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 对象,其余代码保持不变。

    【讨论】:

      【解决方案2】:

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

      EG:

      SELECT * FROM users WHERE name = 'xxx';
      

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

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

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

      【讨论】:

      • 如果可能的话,宁愿使用本机 Joomla 命令——尽管你提出了一个非常有效的观点,如果我无法找出 JFactory::getUser(); 失败的原因,可能会回到这一点。谢谢!
      • 我知道使用原生函数很好,但在这种情况下,上面的方法会帮助你
      • 因为这个问题没有其他内容,所以接受了它。您的回答绝对有效 :) 在joomlacode.org/gf/project/joomla/tracker/… 此处提交了错误报告,以澄清预期结果应该是什么!
      猜你喜欢
      • 2013-08-20
      • 2019-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多