我有一个Joomla票务模块,它在页面的某个部分显示当前用户的当前票证。我想创建用户组,其中组成员可以查看属于该组的所有票证。我认为最简单的方法是创建Joomla组,将用户分配给那些用户,并且当用户进入时,它可以看到其组中的所有票证。我将我的代码添加到函数的开头,但是出了点问题...对于每个用户(当前"已注册"的用户)显示相同的结果,最后一个用户的票证,我不# 39;不知道为什么:这是代码:
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;
}
我有一些问题,我不知道如何去找......
另外,我查看了ACL管理器,但无法使用此代码。
编辑:感谢快速解答!我还有1个,我觉得它很简单,但是我无法让它工作......
如果我将$ ticket数组的内容打印到另一个数组中,我会得到一个包含多个数组的数组。这就是我的代码无效的原因......我得到的数组是:
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 :(得分:0)
查看ACL以使该部分正常工作,但要回答您在问题底部发布的3个问题:
1)查询中的letter.field_name表示查询中的表alias.field_name。别名(m)使其更容易,因此您不必每次都输入完整的表名。
2)WHERE之前的m实际上是设置表别名,但是使用了惰性语法。它应该说:
SELECT m.ticket_id, m.message FROM #__ticket_messages AS m
3)“WHERE 1”是说“if(true)”的SQL方式。由于他们之后立即附加$ where子句“WHERE 1 $ where”,结果查询如下所示:
WHERE 1 AND t.staff_id = '" . $user_id . "'
你原来编码了吗?或者它是你在某个地方捡到的组件?它应该使用查询构建器而不是当前的直接SQL,以使其更加便携,更清晰地了解它在做什么。