2013-01-04 58 views
0

我正在創建一個涉及檢查用戶ID的擴展。基本上我通過JFactory::getUser();運行一個潛在的用戶名,如例2 here。我的代碼是JFactory :: getUser()給出奇數結果

$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

還有的一個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

有人可以看到這個代碼有什麼問題嗎?或者知道自從該文檔爲Joomla 2.5編寫以來JFactory::getUser()的標準是否已經改變?

回答

1

在你的場景中,你可以做的不是使用Joomla內置函數,而是使用SQL查詢(DB Call)來獲取用戶數據。

EG:

SELECT * FROM users WHERE name = 'xxx'; 

如果查詢返回的結果,你可以,你可以去連接配置文件,否則你可以重複的錯誤消息。

這會自動解決你的第二個問題。

如果您有任何問題,請告訴我。

+0

如果可能的話,寧願使用原生Joomla命令 - 儘管你提出了一個非常有效的觀點,並且如果我找不到爲什麼'JFactory :: getUser();'失敗,可能會恢復到原來的狀態。謝謝! –

+0

我知道使用本機功能是好的,但在這種情況下,上述方法將幫助你出 – Techie

+0

因爲沒有其他任何事情在這個問題上接受它。你的答案肯定是有效的:)在http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemEdit&tracker_item_id=29986這裏提交一個Bug報告,以獲得關於預期結果應該是什麼的一些澄清! –

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對象,其餘代碼保持不變。