2016-03-26 1 views
0

私はボタンプラグインでdatatablesを使用しています。私はサーバーに送信する必要がある変数に基づいて表示されるコンテンツをフィルタリングする2つのボタンがあるので、ajax URLはボタンを1つクリックするたびに変更する必要があります。datatablesボタンは、送信された変数に基づいてコンテンツを変更/フィルタリングします

$('#example').DataTable({ 
    processing: true, 
    lengthChange: false, 
    dom: 'Bfrtip', 
    ajax: { 
     url: '/get?op=10', 
     dataSrc: '' 
    }, 
    columns: [ 
     { data: 'id' }, 
     { data: 'name' }, 
     { data: 'surname' }, 
     { data: 'phone' }, 
     { data: 'email' }, 
     { data: 'nin' } 
    ], 
    buttons: [ 
     { 
      text: 'Everyone', 
      // action ?? 
     }, 
     { 
      text: 'Owners', 
     }, 
     { 
      text: 'Applicants', 
     } 
    ], 
    select: true 
}); 

3番目のボタンは、ajaxのURLを元のURLにリセットする必要があります。

public function get_address_book_table($id, $owner = 0) { 
    $mysqli = $this->aet->getAetSql(); 
    $mysqli->set_charset('utf8'); 

    switch ($owner) { 
     case 0: $a = $b = NULL; break; 
     case 1: $a = 'pd.applicant_id'; $b = 'INNER JOIN property_demand pd ON pd.applicant_id = ab.id'; break; 
     case 2: $a = 'po.owner_id';  $b = 'INNER JOIN property_owner po ON po.owner_id = ab.id'; break; 
    } 

    $query = 'SELECT ab.*, sab.*' . $a . ' 
       FROM address_book ab 
       INNER JOIN staff_address_book sab ON sab.contact_id = ab.id' . 
       $b . ' 
       WHERE sab.staff_id = ?'; 

    if ($stmt = $mysqli->prepare($query)) { 
     $stmt->bind_param('s', $id); 
     $stmt->execute(); 

     $stmt->bind_result($id, $name, $surname, $phone, $email, $nin, $note, $a, $b); 

     $data = []; 
     while ($stmt->fetch()) { 
      $nestedData = []; 
      $nestedData['id'] = $id; 
      $nestedData['name'] = $name; 
      $nestedData['surname'] = $surname; 
      $nestedData['phone'] = $phone; 
      $nestedData['email'] = $email; 
      $nestedData['nin'] = $nin; 
      $data[] = $nestedData; 
     } 
    } 

    return $data; 
} 

とGETファイル:テーブルは新しいサーバーで更新されるように、私は、私はクリックでAJAX URLを変更することができ、ボタンプラグインのオプションを探しています

// address_book table 
if ($op === 10) { 

    $owner = isset($_GET['owner']) ? (int) $_GET['owner'] : 0; 
    $result = $functions->get_address_book_table($staff->getId(), $owner); 

    header('Content-type: text/json'); 
    header('Content-type: application/json'); 
    echo json_encode($result); 
} 

コンテンツ。

+0

誰かにコードを提供してもらいたいですか?何かを試してみてください(必要な場合は研究してください)。そして、援助が必要な場合は、私たちはあなたを助けることができます。 –

+0

はい、申し訳ありませんが、私はすでに研究を行っています(私はそれを忘れてしまった)が、役に立たなかった。私はドキュメントを読んできましたが、動作しないものの例しか見つけられませんでした:https://datatables.net/extensions/tabletools/button_options 'sAjaxUrl'オプションは、ボタンの仕組みがわからないplugin ... –

+0

"このパラメータは、Ajaxボタンのデフォルトの 'fnClick'関数によって、Ajaxリクエストの送信先を定義するために使用されます。 { "aButtons":[{ "sExtends": "AJAX"、 "sAjaxUrl": "remote.php" }] }は '' "remote.php" ' "oTableTools" のいくつかのバリエーション'はあなたの' get_address_book_table($ id、$ owner = 0) 'を指しているURLであり、あなたのサイトに何があるのか​​わからない。 –

答えて

1

ボタンイベントで値を設定し、その値をパラメーターとしてサーバーに渡す必要があります。最後に、ボタンをクリックしたときにajaxデータのリロードをトリガーしたいと思うかもしれません。

var filterType = 'all'; 
$('#example').DataTable({ 
    processing: true, 
    lengthChange: false, 
    dom: 'Bfrtip', 
    serverSide: true, 
    ajax: { 
     url: '/get', 
     //dataSrc: 'data', 
      data: function(d) { 
      d.op = 10; 
      d.filterType = filterType; 
      } 
    }, 
    columns: [ 
     { data: 'id' }, 
     { data: 'name' }, 
     { data: 'surname' }, 
     { data: 'phone' }, 
     { data: 'email' }, 
     { data: 'nin' } 
    ], 
    buttons: [ 
     { 
      text: 'Everyone', 
      action: function(e, dt) { filterType = 'all'; dt.ajax.reload(); } 
     }, 
     { 
      text: 'Owners', 
      action: function(e, dt) { filterType = 'owner'; dt.ajax.reload(); } 
     }, 
     { 
      text: 'Applicants', 
      action: function(e, dt) { filterType = 'app'; dt.ajax.reload(); } 
     } 
    ], 
    select: true 
}); 
+0

サーバサイドについては、送信する必要がある変数が原因ですが、すべてのデータをデーターに一度に送信すると、データセットでそれをフィルタリングする方が良いでしょうか?新しい列を追加せずにこれを行うことはできますか?私はデータベーステーブルで、おそらく非表示の列を意味するので、データテーブルはフィルタリングする方法を知っていますか? –

+0

はい、おそらく私はあなたがしようとしていたことを誤解していました。その場合、 'dt.ajax.refresh()'は必要ありません。代わりに、あなたは気にしているフィルターの種類を実装したいと思うかもしれません。おそらく[列フィルター](https://datatables.net/examples/api/multi_filter.html)です。 'dt.column(0).search( '1')。draw()' – David784

+0

私はそれを両方の方法で試してみます。ありがとう! –

関連する問題