web-dev-qa-db-fra.com

Rendu et tri des colonnes Jquery Datatables

Je travaille avec un datatable qui inclut une colonne de timestamps mysql au format YYYY-MM-DD HH:MM:SS. Ma table est définie pour trier initialement par cette colonne. Datatables détecte correctement le format de l'horodatage et le trie correctement.

J'essaie maintenant de modifier l'apparence de cette colonne pour qu'elle soit plus conviviale, mais pas la manière dont elle est triée. Donc, j'utilise la fonctionnalité columns.render comme ceci:

{
        "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);
        }
}

Dès que je fais cela, le tri ne fonctionne plus correctement. J'avais l'impression que la fonction render ne devrait affecter que l'affichage des données, mais qu'elle devrait tout de même être triée en fonction des données sous-jacentes de l'objet de données de cette ligne. Ce sont les documents que j'essaie d'utiliser ( http://datatables.net/reference/option/columns.render ).

Est-ce que quelqu'un sait comment je peux trier en fonction de l'horodatage réel mais affiche une date plus conviviale?

19
flyingL123

Je crois que j'ai compris. Il me suffisait de dire à la fonction de rendu de ne fonctionner que sur les types "display":

{
        "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;
        }
},
34
flyingL123

Eh bien, s’il s’agit d’une datable côté serveur, vous pouvez éditer un JSON juste avant de le transmettre comme au début de ssp.class.php dans les nouvelles tables de données (dites-moi si vous utilisez l’ancien )
NOTE: dans les nouvelles tables de données, il s’agit d’une fonction intégrée appelée formateur qui fait de même, mais vous pouvez utiliser une fonction personnalisée comme celle-ci.

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>';
  }

ici, je suis simplement en train d’éditer un 0 et un dans ma base de données vers une étiquette arrêtée et en cours d’exécution.
vous pouvez faire quelque chose comme parse_date et en stocker un reformaté

0
Rohit Hazra