2013-08-23 62 views
1

在的Joomla 2.5.14,我有一個腳本,獲取當前用戶組ID,如:獲取的Joomla當前用戶訪問級別2.5

$groups = $user->get('groups'); 
foreach($groups as $group) { 
    echo "<p>Your group ID is:" . $group . "</p>"; 
}; 

現在,我需要計數的文章該用戶數根據他的訪問級別,能夠閱讀。

對於這一點,我需要選擇從viewlevels表的訪問級別,看起來像這樣:

id  title   rules JSON encoded access control. 
1 Public  [1] 
2 AccessA  [13,8,16,17] 
3 AccesssF [8] 
4 AccessD  [14,8] 
6 AccessB  [8,16,17] 
7  AccessC  [8,17] 

因此,例如,第17組可讀取輔助系列,AccessB和訪問C.文章

我嘗試下面的查詢,但它不選擇任何行:

$query="SELECT * FROM xmb9d_viewlevels WHERE rules LIKE '%.$group.%'"; 

我如何可以選擇所有當前用戶組接取等級再算上數他能閱讀的文章?

感謝您的幫助!

回答

0

我想你只需要從LIKE子句中刪除句點。如:

$query="SELECT * FROM xmb9d_viewlevels WHERE rules LIKE '%$group%'"; 

此外,使其不針對你應該取代#__數據庫(注:這是兩個下劃線)爲表前綴:

$query="SELECT * FROM #__viewlevels WHERE rules LIKE '%$group%'"; 
+0

它工作正常,謝謝!現在,如何使用此選擇的結果來計算表__content中的文章數量?我應該將選擇的結果傳遞給變量,然後在另一個查詢中使用它,還是可以編寫單個查詢? –

+0

這是怎麼回事,$ query =「SELECT count(*)FROM #__content WHERE access in(select id from from #__viewlevels where LIKE'%$ group%'」; –

+0

其實count(*)不好用。我會建議︰$ query =「SELECT count(id)FROM #__content WHERE access in(select id from from #__viewlevels where rules LIKE'%$ group%''; –

3

首先 https://github.com/joomla/joomla-cms/blob/master/libraries/joomla/access/access.php#L285

JAccess::getGroupsByUser($userId, $recursive = true) 

會得到你的用戶匹配的組包括通過繼承(除非你使$遞歸false)

https://github.com/joomla/joomla-cms/blob/master/libraries/joomla/access/access.php#L402

JAccess::getAuthorisedViewLevels($userId)會給你所有的視圖級別允許用戶看到作爲一個數組。

如果你

$allowedViewLevels = JAccess::getAuthorisedViewLevels($userId); 

如果不出意外,你可以做

$implodedViewLevels = implode(',', $allowedViewLevels); 

.... 

$query->select($db->quoteName('id')) 
->from('#__content') 
->where($db->quoteName('access') . 'IN (' . $implodedViewLevels . ')'; 
.... 

(未經測試,但你得到的總體思路)。 在Joomla總是試圖讓API爲你做的工作,而不是與它鬥爭。

+0

嗨,爆炸將無法在陣列上工作。但我明白了。也許我可以遍歷數組並構建一個訪問級別的字符串,並用查詢中可用的逗號分隔。 –

+0

對不起,內爆... – Elin