2013-03-16 2 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 WHERE m.user_id! = '". $ user_id."
  2. Что означает «m» перед ГДЕ?
  3. , что делает «1» здесь делать: WHERE 1 $, где

Кроме того, я посмотрел в менеджерах 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

Считаете ли вы использование ACL? –

ответ

0

Посмотрите в ACL, чтобы получить эту часть работу, но ответить на 3 вопроса вы размещены в нижней части вашего вопроса:

1) letter.field_name в запросе представляет собой таблицу alias.field_name в запросе , Псевдоним (m) упрощает работу, поэтому вам не нужно каждый раз вводить полное имя таблицы.

2) m перед тем, как WHERE на самом деле устанавливает псевдоним таблицы, но с ленивым синтаксисом. Он должен сказать:

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

3) «ГДЕ 1» - это SQL-способ выражения «if (true)». Так как они сразу же Добавляя $, где положение после «WHERE 1 $, где», результирующий запрос выглядит следующим образом:

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

ли вы код это изначально? или это компонент, который вы выбрали где-то? Он должен использовать построитель запросов вместо прямого SQL, как он есть сейчас, чтобы сделать его более портативным и более понятным в отношении того, что он делает.