Joomla用户管理

时间:2013-03-16 18:53:01

标签: joomla user-management

我有一个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;
}

我有一些问题,我不知道如何去找......

  1. sql查询中的字母点字段名是什么?例如: SELECT m.ticket_id,m.message FROM #__ ticket_messages m WHERE m.user_id!='"。$ user_id。"
  2. " m"在WHERE之前意味着什么?
  3. " 1"在这里: WHERE 1 $ where
  4. 另外,我查看了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 
        ) 
    ) 
    

    谢谢!

    编辑:这一切都很复杂吗?

1 个答案:

答案 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,以使其更加便携,更清晰地了解它在做什么。