2013-03-16 86 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,以使其更直观,更清晰。