サーバー側のjQueryデータテーブルでLaravel 4.2を使用しています。
パッケージ: https://github.com/Chumper/Datatable
カスタムソートを追加するにはどうすればよいですか?
通貨、時間などの列のように
サーバー側のjQueryデータテーブルでLaravel 4.2を使用しています。
パッケージ: https://github.com/Chumper/Datatable
カスタムソートを追加するにはどうすればよいですか?
通貨、時間などの列のように
これが私のやり方です
nb最適化されていません。エラー チェックなしのほぼ完全なコード スニペット
laravel コントローラー関数 (L5.2 ですが、4.2 に簡単にダウングレードできます):
$response = array();
$query = MyModel::query();
$response['recordsTotal'] = MyModel::count();
$response['draw'] = Input::get('draw', 0);
$query->where('searchField', 'LIKE', '%' . Input::get('search', array('value' => ''))['value'] . '%');
$response['recordsFiltered'] = $query->count();
$query->take(Input::get('length', 1));
$query->offset(Input::get('start', 0));
$columns = Input::get('columns');
$orders = Input::get('order', []);
$data = $data->toArray();
foreach($orders as $order){
$idx = $order['column'];
$column = $columns[$idx];
$orderFactor = 1;
if($order['dir'] == 'desc')
$orderFactor = -1;
$dname = $column['data'];
if(count($data)>0){
if(isset($data[0][$dname])){
usort($data, function($record1, $record2) use($dname, $orderFactor){
// here you implement your custom sorting
// like if($dname === 'price') return compare_price($record1[$dname], $record2[$dname]) * $orderFactor;
// but I hope you're not storing prices as strings in your database. you won't need this custom sorting
//
return strcmp($record1[$dname], $record2[$dname]) * $orderFactor;
});
}
}
}
$response['data'] = $data;
return Response::json($response);
psこのコードは、データテーブル列の「データ」フィールドがデータベースのフィールド名とまったく同じ名前であると想定しています。必要に応じてデータテーブル列をレンダリングするには、render_function を使用する必要もあります。
データテーブル列:
columns: [
{ data: 'price', orderable: true, searchable: true, render: render_price },
{ data: 'anotherField' },
[...]
],
render_function の例:
function render_price(price, type, row) {
return price + ' USD';
}
このようにして、必要な方法で列を表示するデータテーブルが作成されます (例: 価格 = 10.50$)
そしてそれらはソート可能になります
コレクションまたはクエリの結果を任意の順序で並べ替えようとしている場合は、次のようにすることができます。
$orders = Order::all()->SortBy('currency','desc');
また
$customers = Customers::where('age',$age)->orderBy('currency','desc')->get();
ところで、Laravel 8 が既にあるのに、なぜまだ Laravel 4 を使用しているのですか?
ヘッダーをクリックして行を並べ替えるという意味かどうかわかりませんcustom sorting
か? それが意味する場合は、データテーブル設定を定義することにより、クライアント側でそれらを定義できます。
oSettings = $("#{{$table->getId()}}").dataTable().fnSettings();
oSettings.aaSorting = [[6, 'desc']];
ただし、データテーブルのロード時に特定の列のデフォルトの並べ替えを維持したい場合は、
Datatable::table()
->addColumn($theader) // these are the column headings to be shown
->setOptions('order', array([$ordercolumn ,"desc"]))
->setUrl(route('route.name', $form_id))
->render()
これが役立つことを願っています。
ドキュメントを確認していませんか?そこで説明されているので:
public function getDatatable() { return Datatable::collection(User::all(array('id','name'))) ->showColumns('id', 'name') ->searchColumns('name') ->orderColumns('id','name') ->make(); }