2013-03-16 77 views
0

我有一個Joomla售票模塊,顯示在頁面上,當前用戶的當前票的某一部分。我想創建用戶組,其中組成員可以查看屬於該組的所有門票。我認爲最簡單的方法是創建Joomla組,將用戶分配給這些用戶,並且在用戶入住時可以看到其組中的所有門票。我將代碼添加到函數的開頭,但有些錯誤...對於每個用戶(當前「已註冊」的用戶)都顯示相同的結果,即最後一個用戶票證的結果,而我不知道爲什麼:這裏是代碼:的Joomla用戶管理

function gTickets() 
{ 
$user =& JFactory::getUser(); 
$user_id = (int) $user->get('id'); 

//get user_group_id from db based on current users id 
    {...} 

//get all users with that user_group_id 
$db1->setQuery($db1->getQuery(true) 
     ->select('*') 
    ->from("#__user_usergroup_map") 
    ->where("group_id = '$groupss'") 
    ); 

$groupss1=$db1->loadRowList();  
$return1=array(); 

// for every user_id  
foreach ($groupss1 as $keya) 
{  
    $user_id = $keya[0]; // the id of users 

    $where = ""; 
    if ($this->is_staff) 
     $where .= " AND t.`staff_id`='".$user_id."'"; 
    else 
     $where .= " AND t.`customer_id`='".$user_id."'"; 

    $tickets = $this->_getList(
"SELECT t.id, t.subject, t.last_reply_customer, s.name AS status_name FROM 
#__rsticketspro_tickets t LEFT JOIN #__rsticketspro_statuses s ON 
(t.status_id=s.id) WHERE 1 $where ORDER BY `last_reply` DESC", 0, 
$this->params->get('tickets_limit', 3)); 

    print_r($tickets);  
    return $tickets; 
} 

我有一些問題,我不知道該怎麼SEACH爲...

  1. 什麼是SQL查詢信點字段名?例如: SELECT m.ticket_id,m.message FROM #__ticket_messages M其中m.user_id ='! 「$ user_ID的。」
  2. 「m」在WHERE之前意味着什麼?
  3. 什麼是 「1」,在這裏做的:WHERE 1 $其中

而且,我看着在ACL的經理,但不能使它與此代碼工作。

編輯:謝謝你的快速解答!我得到了更多的1,我認爲這是一個容易,但我不能得到它的工作...

如果我打印$票陣列到另一個陣列的內容,我得到一個陣列,多個陣列。這就是爲什麼我的代碼是不工作...我得到的數組是:

Array ( 
    [0] => stdClass Object ( 
    [id] => 1 
    [subject] => use1 
    [last_reply_customer] => 1 
    [status_name] => open 
) 
) 
Array ( 
    [0] => stdClass Object ( 
    [id] => 3 
    [subject] => use2 
    [last_reply_customer] => 1 
    [status_name] => open 
    ) 
    [1] => stdClass Object ( 
    [id] => 2 
    [subject] => use2 
    [last_reply_customer] => 1 
    [status_name] => open 
    ) 
) 

我想數組看起來像這樣:

Array ( 
    [0] => stdClass Object ( 
    [id] => 1 
    [subject] => use1 
    [last_reply_customer] => 1 
    [status_name] => open 
    ) 
    [1] => stdClass Object ( 
    [id] => 3 
    [subject] => use2 
    [last_reply_customer] => 1 
    [status_name] => open 
    ) 
    [2] => stdClass Object ( 
    [id] => 2 
    [subject] => use2 
    [last_reply_customer] => 1 
    [status_name] => open 
    ) 
) 

謝謝!

編輯:是所有這些複雜的實現?

+0

您是否考慮使用ACL? – 2013-03-16 19:42:30

回答

0

查找到ACL來得到的那部分工作,但回答您張貼在你的問題底部的3個問題:

1)在查詢中letter.field_name代表該查詢表alias.field_name 。別名(m)使得它更容易,所以你不必每次都輸入完整的表名。

2)WHERE前的米實際上是設置表的別名,但與懶惰語法。應該說:

SELECT m.ticket_id, m.message FROM #__ticket_messages AS m

3)「WHERE 1」是說「if(true)」的SQL方式。由於他們是立即添加至$ where子句繼「WHERE 1 $這裏」,生成的查詢是這樣的:

WHERE 1 AND t.staff_id = '" . $user_id . "'

你最初的代號呢?或者它是你在某個地方拾取的組件?它應該使用查詢構建器而不是像現在這樣直接使用SQL,以使其更直觀,更清晰。