0

ページの特定の部分に現在のユーザーの現在のチケットを表示する 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;
}

検索の仕方がわからないという質問がありました...

  1. SQLクエリのレタードットフィールド名は何ですか? 例: SELECT m.ticket_id, m.message FROM #__ticket_messages m WHERE m.user_id !='".$user_id."
  2. WHERE の前の「m」は何を意味しますか?
  3. 「1」はここで何をしますか: WHERE 1 $where

また、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 
    ) 
) 

ありがとう!

編集:このすべてを達成するのは複雑ですか?

4

1 に答える 1

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" は SQL の "if (true)" の言い方です。「WHERE 1 $where」の後にすぐに $where 句を追加しているため、結果のクエリは次のようになります。

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

これを最初にコーディングしましたか?それともどこかで拾った部品ですか?現在のように直接 SQL を使用するのではなく、クエリ ビルダーを使用して、移植性を高め、何をしているかをより明確にする必要があります。

于 2013-03-21T20:41:59.263 に答える