Jump to content
  • 0
Tom Germain

Restfm + Datatable + Server Side Processing

Question

Bonsoir à tous, 

 

Pour commencer, je ne suis pas encore très à l'aise avec FileMaker et le json... 

 

Pour afficher une table FileMaker dans une DataTable en Jquery je procède comme ceci :

$(document).ready(function(){  $.getJSON('server/BDD_Data/layout/zENTREPRISES.json', function(data){    console.log(data);    var content = [];    var compteur = 0;    for (var nbre = 0; nbre < data.data.length; nbre++){      content[compteur++] = [        data.data[nbre].NomEntreprise,        "<a href=tableEntreprise.php?id="+ data.meta[nbre].recordID +">Afficher</a>"      ];    }    $('#example').DataTable({      data: content,      columns: [          { title: "Nom" },          { title: "Action" }      ]    });  });});

 

Ou comme ceci :

$('#example').dataTable({  "sAjaxSource" : 'server/Nom_Data/layout/zENTREPRISES.json',  "aoColumns" : [    { data : 'NomEntreprise'},  ], });

Ces deux bouts de code fonctionne très bien et j'arrive à peu prêt au même résultat. Mais la config RestFM bloque l'affichage à 24 données. Heureusement me direz-vous, car il y a plus de 50 000 entrés dans ma table Entreprise... Pour en afficher un peu plus, je passe par "?RFMmax" que je plaçais juste après l'url. Mais bien évidemment, plus le nombre augmente, plus le chargement est long. 

J'ai donc cherché comment faire pour afficher ces 24 données (moins/plus) sur une première page et me charger les 24 autres par la suite quand on clique sur la pagination ou avec un scroll infinite style Facebook. Car vous l'avez compris je ne peux charger ces 50 000 données d'un seul coup. Pour cela j'ai trouvé la methode du serverSide. Et c'est là que ça se complique... Je n'arrive pas à comprendre comment ça fonctionne et comment mettre ça en place... 

 

Si quelqu'un peut m'éclairer sur ce sujet, je suis 100% preneur !

 

Merci d'avance et bonne soirée.

 

Tom

Share this post


Link to post
Share on other sites

6 answers to this question

Recommended Posts

  • 0

Bonjour

 

Mauvaise nouvelle : je ne vais pas te donner de solution, tout au plus éclairer (vaguement) le terrain, en espérant que cela puisse t'être utile.

En effet, je n'ai jamais cherché à utiliser du FM à partir de javascript (pour cela, j'utilise le classique JS + PHP + MySql)

Détail : interroger plus ou moins directement le serveur à partir de JS est appelé AJAX (autre mot clé pour tes recherches)

 

Point de départ : le "serverside" n'est pas une méthode, mais une approche.

L'objectif est que le client (JS) demande des données au serveur (pour moi PHP + MySql, pour toi FM) selon ses besoins. Cela peut être pour faire un scroll continu (ce que tu veux faire), pour faire des listes liées (quand on a choisi la marque de voiture, afficher les modèles de cette marque), ou tout autre chose. L'idée est, dans tous les cas, de ne pas recharger *toute* la page, mais seulement ce qui a changé.

 

En PHP + MySql (et d'autres couples), c'est facile : l'instruction "fetch" (sous ses différentes formes) est là pour cela.

Dans le cas de FM, cela risque d'être un peu plus compliqué. Il faut que tu trouves le moyen (et là je refile le bébé aux vrais experts FM) de n'afficher que les enregs de 1 à 20, puis de 21 à 40, puis de 41 à 60...

Je sais que cela peut se faire en dur dans une TE, mais pour le reste, je ne vois que la possibilité de "jouer" avec un script FM qui n'affiche que la tranche de données voulue.

 

Reste à savoir comment passer ce type de paramètre à un script via une URL. Et là, aucune idée, ce n'est plus mon domaine.

 

Bonne chasse

 

Yvan

Share this post


Link to post
Share on other sites
  • 0

Bonjour, 

 

Merci beaucoup de ta réponse !

 

Effectivement, j'ai trouvé beaucoup de solution via PHP + MySQL. Mais je n'utilise aucun SQL sachant que je récupère d'amblé un fichier JSON. :/ 

 

Je pensais avoir trouvé une approche avec "?RFMskip=20". Il me semble que cela affiche les 24 données suivantes après les 20 premières mais je ne suis pas sur... Je vais essayer de continuer à chercher sur cette voie en espérant que c'est possible. 

 

De plus, j'en profite tant que j'y suis, j'ai une table "individus" et une table "adresse". Il y a une jointure entre les deux. Y a-t-il un moyen d'afficher l'individus avec son adresse qui lui est propre ? J'ai pensé à récupérer l'id de l'individus et la comparer au même id qui se trouve dans les adresses mais là pareil je suis bloqué à 24 adresses..  Et même si j'arrivais à les comparer dans l'ensemble des adresses je pense que ça mettrait du temps...

 

Merci encore Yvan, et bonne journée !

 

Tom

Share this post


Link to post
Share on other sites
  • 0

Le json n'est que le format des données transmises. A l'origine d'Ajax, on transmettait surtout du xml, mais le json a pris le dessus depuis qques années maintenant (plus léger, moins verbeux, directement utilisable, ...).

Le schéma (un peu plus complet, mais encore simplifié et encore avec PHP) est le suivant

- le navigateur détecte un événement (clic sur un bouton, scroll de la page, ...) et appelle le JS correspondant

- le JS forme une requête http (ou autre, mais on va rester dans le simple) sous forme d'une URL qu'il envoie au serveur

- PHP reçoit la requête http, l'analyse et la transforme en requête SQL

- SQL retourne les enregs demandés dans un format assez brut à PHP

- PHP met les données au format json et les renvoie au navigateur

- JS, qui était à l'écoute depuis qu'il a envoyé sa requête, récupère les données json

- JS transforme les données en html, et complète / mets à jour / transforme la page affichée par le navigateur

 

Maintenant, dans ton cas, j'imagine (mais c'est à confirmer) qu'il suffit de remplacer "PHP" et "SQL" dans le flux ci-dessus par "script" et "FM".

 

A toi de trouver les bons paramètres à envoyer au script (et écrire le bon script...). Avec cela, tu peux faire à peu près ce que tu veux, y compris n'envoyer que les 20 individus suivants avec leur 50 adresses.

 

Yvan

Share this post


Link to post
Share on other sites
  • 0

Je n'avais pas compris que tu utilisais restfm (c'est pourtant dans le titre, mais je ne connaissais pas cette bibiothèque : je viens de le découvrir via google un moteur de recherche).

Je corrige donc un peu ce que je disais dans mon msg précédent, et t'encourage à regarder du coté du RFMfind

http://www.restfm.com/restfm-manual/web-api-reference-documentation/uri-restfmdatabaselayoutlayout/read-get

 

D'après ce que je comprends, les données qui sont affichées dans ton modèle sont ensuite envoyées au format json (ce qui est logique vu que restFM s’appuie sur du PHP)

En construisant correctement ton modèle, tu pourras récupérer les infos qui te sont utiles. Il y a plusieurs msg dans cette section du forum qui expliquent comment construire un modèle performant pour PHP.

 

Yvan

Share this post


Link to post
Share on other sites
  • 0

Bonjour !

 

J'ai trouvé la solution à mon deuxième problèmes qui, je le rappelle, était d'afficher une adresse lié à un individu sachant que "adresse" et "individu" sont deux tables différentes.

 

Ça donne quelque chose comme ça :

$.getJSON('server/RESTfm/BDD_Data/layout/zADRESSES.json?RFMfind=SELECT Adresse1 WHERE IdIndividu LIKE "IdIndividu"', function(data){ for(var nbre = 0; nbre < data.data.length; nbre++){  adresse = data.data[nbre].Adresse1; }});

Merci encore à toi Yvan de m'avoir lancé sur cette piste ! :) 

 

Me manque plus qu'à essayer de construire quelque chose pour l'affichage des données. Je reviendrai sur ce topic si j'y arrive (ou pas).

 

Bonne journée,

 

Tom

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...