IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ext JS / Sencha Discussion :

lire un tableau json pour créer un grid (extjs 4)


Sujet :

Ext JS / Sencha

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 71
    Par défaut lire un tableau json pour créer un grid (extjs 4)
    Bonjour,

    Je débute extjs et je ne n'arrive pas à comprendre comment alimenter mon GRID depuis un tableau JSON. Je suis parti de l'exemple basic que l'on trouve sur sencha .http://dev.sencha.com/deploy/ext-4.0...rray-grid.html

    SI je modifie les données à la main ou en formant une chaine comme dans l'exemple je parviens à intégrer mes données.

    En revanche je souhaiterais alimenter mon GRID directement depuis mon tableau au format JSON.

    J'ai vu dans la doc qu'il existait la commande Ext.data.reader.Json.
    Me permet-elle de lire directement mon tableau au format JSON (issu d'une requete SQL php puis d'un json_encode()) en vue d'alimenter le data store du grid?

    Si oui avez vous un exemple de cela?

    Par avance merci,

  2. #2
    Membre expérimenté Avatar de JulienFio
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 201
    Par défaut
    Bonjour,

    Cela se fait en 3 étapes:

    en prenant comme exemple ce JSON ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    JSON={"records":      [
                        {
                   "CHAMP1": "rouge",
                    "CHAMP2": "long",
                    "CHAMP3": "droit",
              },
                        {
                   "CHAMP1": "vert",
                    "CHAMP2": "court",
                    "CHAMP3": "gauche",
              },
                        {
                   "CHAMP1": "jaune",
                    "CHAMP2": "moyen",
                    "CHAMP3": "centre",
              }
         ],
         "totalProperties": 3,
         "success": true,
    }
    1) Définition de ton model
    Le model est là pour définir la stucture de ton store (tes données). Bien qu'il existe un standard à respecter quand au format du JSON le model va définir quelles seront les champs à traiter.
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Ext.define('MyApp.model.monModel', {    
        extend: 'Ext.data.Model',
        fields: [{
            name: 'CHAMP1'
        },{
            name: 'CHAMP2'
        },{
            name: 'CHAMP3'
        }]
    });
    2) Définition du Store
    Le Store est tout simplement le JSON qui tu vas recevoir et qui va 'alimenter' ton gridPanel. Tu définis l'url vers ta classer qui va générer ton JSON
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Ext.define('MyApp.store.monStore', {
        extend: 'Ext.data.Store',  
        model: 'MyApp.model.monModel',
        pageSize: 5,
        proxy: {
            type: 'ajax',
            simpleSortMode: true,
            url: ' l'url vers ta servlet ou ton code php qui va te construite je JSON',
            reader:{
                type: 'json',
                root: 'records',
                totalProperty: 'totalProperties',
                successProperty: 'success'
            }
        }
    });
    3) Définition de ton grid
    A ce grid tu lui spécifie le Store configuré plus tôt.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Ext.define('MyApp.view.monGrid',{
        extend      : 'Ext.grid.Panel',
        id          : 'monGrid',
        store       : 'monStore',
        columns:[{
            dataIndex: 'CHAMP1',
            align: 'left',
            flex: 0.33
        },{
    dataIndex: 'CHAMP2',
            align: 'left',
            flex: 0.33
    },{
            dataIndex: 'CHAMP3',
            align: 'left',
            flex: 0.33
        }],
    ...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 71
    Par défaut
    Merci pour toutes ces informations. J'ai pas encore eu le temps de me pencher dessus (pont oblige).

    lorsque tu dis
    url: ' l'url vers ta servlet ou ton code php qui va te construite je JSON',
    le fichier php doit-il retourner le contenu comme ton premier code? à savoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    JSON={"records":      [
                        {
                   "CHAMP1": "rouge",
                    "CHAMP2": "long",
                    "CHAMP3": "droit",
              },
                        {
                   "CHAMP1": "vert",
                    "CHAMP2": "court",
                    "CHAMP3": "gauche",
              },
                        {
                   "CHAMP1": "jaune",
                    "CHAMP2": "moyen",
                    "CHAMP3": "centre",
              }
         ],
         "totalProperties": 3,
         "success": true,
    }
    Si oui, alors j'aurai besoin d'un petit éclaircissement. Lorsque je change le format du résultat de ma requête j'utilise " json_encode() ". Alors il me renverrait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     [
                        {
                   "CHAMP1": "rouge",
                    "CHAMP2": "long",
                    "CHAMP3": "droit",
              },
                        {
                   "CHAMP1": "vert",
                    "CHAMP2": "court",
                    "CHAMP3": "gauche",
              },
                        {
                   "CHAMP1": "jaune",
                    "CHAMP2": "moyen",
                    "CHAMP3": "centre",
              }
         ]
    Pour que le php me renvoie ce qui est nécessaire, dois-je utiliser une concaténation de chaine. Ainsi mon code php qui va fabriquer le Json doit ressembler à un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $chaine1= 'JSON={"records":';
    $chaine2=json_encode ($resultatrequete);
    $chaine3=', "totalProperties": 3,  "success": true,}';
    $chaine4= $chaine1.$chaine2.$chaine3 ;
     
    echo($chaine4);
    Merci,

  4. #4
    Membre expérimenté Avatar de JulienFio
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 201
    Par défaut
    Donc oui, ton code php doit bien te retourner le JSON.
    Par contre je ne suis pas sûr qu'il s'agisse d'une concaténation de chaine, je ne connais pas la procédure exacte en php. Moi je travaille en JAVA et j'utilise la classe JSONObject pour construire mon JSON que je retourne à mon code js

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 23
    Par défaut
    Salut,

    tu dois effectivement utilisé un json_encode. Voila un code que j'ai utilisé dans un de mes dernier projet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    <?php
            
            require_once("../Connect.php");
            
            $requete = "SELECT ...'";
                            
            $resultat = odbc_exec($connexion,$requete);
            
            $projet = array();
            
            while($data = odbc_fetch_object($resultat)){
                      //Pour chaque ligne de résultat
                      $ligne = array();
                      foreach($data as $cle => $valeur)
                      {
                        //On encode en utf8 puis on stocke dans la ligne
                        $ligne[$cle] = utf8_encode($valeur);
                      }
                      $projet[] = $ligne;
            }
     
            echo json_encode($projet);       
            
    ?>
    Il te retournera quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [{"IDProjet":"102","LibelleProjet":"Outil export de l'offre","DateDebut":"2011-06-01","DateFin":"2011-06-23","ServiceConcerne":"Informatique","Avancement":"0"},{"IDProjet":"101","LibelleProjet":"Outil d'\u00e9valuation","DateDebut":"2011-06-07","DateFin":"2011-06-22","ServiceConcerne":"Direction","Avancement":"80"}]

  6. #6
    Membre expérimenté Avatar de JulienFio
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 201
    Par défaut
    Tuto sencha

    DonMero, tu ne spécifie pas de racine dans ton JSON ?
    "records" dans mon exemple.
    Propriété qui doit normalement être renseignée dans la déclaration de ton Store Extjs

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. idée pour créer un tableau
    Par adriennoob dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/05/2010, 18h30
  2. Réponses: 0
    Dernier message: 27/04/2010, 16h40
  3. Réponses: 1
    Dernier message: 02/02/2009, 19h12
  4. Réponses: 2
    Dernier message: 04/10/2007, 00h48
  5. Créer un tableau javascript pour condition for
    Par Xann_71 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 12/07/2007, 15h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo