web-dev-qa-db-ja.com

Jquery Datatables列のレンダリングと並べ替え

YYYY-MM-DD HH:MM:SSという形式のmysqlタイムスタンプの列を含むデータテーブルを使用しています。テーブルは、最初はこの列でソートするように設定されています。データテーブルはタイムスタンプ形式を正しく自動検出し、適切にソートします。

この列の外観をよりユーザーフレンドリーに変更しようとしていますが、並べ替え方法には影響しません。したがって、私は次のようなcolumns.render機能を使用しています。

{
        "data":"created_at",
        "name":"date",
        "visible":true,
        "title":"Date Created",
        "render": function(data, type, full, meta){
                var date = new Date(data);
                var options = {year: "numeric", month: "long", day: "numeric"};

                return date.toLocaleDateString('en-US', options);
        }
}

これを行うと、並べ替えが正しく機能しなくなります。 render関数はデータの表示にのみ影響を与えるが、その行のデータオブジェクトの基になるデータに従って並べ替える必要があるという印象を受けました。これらは私が使用しようとしているドキュメントです( http://datatables.net/reference/option/columns.render )。

実際のタイムスタンプに基づいて並べ替えることができる方法を誰かが知っていますが、よりユーザーフレンドリーな日付を表示しますか?

22
flyingL123

わかったと思います。 render関数に「ディスプレイ」タイプのみを操作するように指示する必要がありました。

{
        "data":"created_at",
        "name":"date",
        "visible":true,
        "title":"Date Created",
        "render": function(data, type, full, meta){
                if(type == "display"){
                        var date = new Date(data);
                        var options = {year: "numeric", month: "long", day: "numeric"};

                        return date.toLocaleDateString('en-US', options);
                }

                return data;
        }
},
35
flyingL123

それがサーバー側のデータテーブルである場合、新しいデータテーブルのssp.class.phpの最初のように、渡される直前にjsonを編集することができます(古いものを使用している場合は教えてください)
注:新しいデータテーブルでは、同じことを行うフォーマッターと呼ばれる組み込み関数ですが、このようなカスタム関数を使用できます

if ($j == 6) {
  if ($data[$i][$columns[$j]['db']] == 1) {
      $data[$i][$columns[$j]['db']] = '<label class="btn-danger disabled btn">Stopped</label>';
  } else {
      $data[$i][$columns[$j]['db']] = '<label class="btn-success disabled btn">Running</label>';
  }

ここでは、dbの0と1を編集して、Stopped and Runningというラベルを付けています。
parse_dateなどを実行して、再フォーマットしたものを保存できます

0
Rohit Hazra