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 :

Retour sur la bonne page avec GridPanel - pagingToolBar


Sujet :

Ext JS / Sencha

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 6
    Par défaut Retour sur la bonne page avec GridPanel - pagingToolBar
    Bonsoir,

    J'utilise Ext.js avec un framework PHP maison basé sur Zend Framework.

    Le processus CRUD est géré dans la même fenêtre du navigateur (pas de pop-up).

    Par exemple, j'affiche une liste de clients dans un GridPanel avec une pagination. Je vais à la page 5, j'édite le formulaire de mon client pour le modifier puis je soumets le formulaire pour enregistrement dans la base de données. Je reviens ensuite sur ma liste de clients, mais sur la page 1. Y aurait-il un moyen de revenir sur la page 5 ?

    Dans le html, le champ concerné s'appelle x-tbar-page-number.

    Merci par avance de vos retours

  2. #2
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 6
    Par défaut
    Bon, j'ai un peu avancé dans mes recherches .
    J'avais un autoLoad à true, mais on peut lui passer un objet avec les paramêtres start et limit du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     autoLoad: {params:{start: 28, limit: 14}}
    En faisant cela j'affiche la page 3, il ne me reste plus qu'à rendre cela dynamique pour que mon affaire fonctionne. Coté serveur je renvoie ces paramètres dans le JSON, par contre, je ne sais pas trop comment les récupérer dans le fichier js pour les afficher dynamiquement. Quelqu'un aurait une idée ?
    Merci
    Côté serveur
    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
             $params = new stdClass();
            //Nombre de lignes à ommettre
            $params->start = $this->_request->getParam('start', 0);
            //nombre de lignes désirées
            $params->limit = $this->_request->getParam('limit', 14);
            $params->sort  = $this->_request->getParam('sort', 'cli_name');
            $params->dir   = $this->_request->getParam('dir', 'DESC');
     
     
     
            $r = new StdClass();
            $r->results = $this->context->countGlobalQuery;
            $r->rows = $datas;
            $r->params = $params;
            Zend_Loader::loadClass('Zend_Json_Encoder');
            header('Content-Type: application/json; charset=UTF-8');
            echo utf8_encode(ereg_replace('"__className":"[^\"]+",', '',Zend_Json_Encoder::encode($r)));
    Côté js :
    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
    26
    // create the data store
        var dataStore = new Ext.data.Store({
            proxy: new Ext.data.HttpProxy({
                url: Ext.app.baseUrl + '/consultclients/getSearchDatas'
            }),
            // create reader that reads the Topic records
            reader: new Ext.data.JsonReader({
                totalProperty: "results",.
                root: "rows",
                fields: [
                //definition des champs
                {name: 'cli_id'},
                {name: 'cli_name'},
                {name: 'cli_adresse'},
                {name: 'ca'},
                {name: 'tic'},
                {name: 'cli_rdv_dt'}
                ]
            }),
     
            //autoLoad: true,
            autoLoad: {params:{start: 28, limit: 14}},
     
            // turn on remote sorting
            remoteSort: true
        });

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Par défaut
    bonjour,

    je ne comprends pas ta problématique. Normalement, le client communique les ordres au serveur concernant l'affichage d'un tableau ...

    Je pense que c'est le client qui doit envoyer ton parametre start et limit, ca me parait plus logique ...

    a mediter ...

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 6
    Par défaut
    Merci takitano pour ton retour.

    C'est bien ce qui se passe dans la première phase du processus : je demande l'affichage d'une liste de 14 clients (dans mon cas) : le serveur reçoit comme paramêtres start=0 et limit=14. Cela affiche la première page du datagrid.

    Si je souhaite passer à la page suivante, je clique sur la flèche du pagging, le client envoie au serveur les paramêtres start=14 et limit=14, cela affiche la page 2 dans le datagrid.

    Ensuite, j'édite un client de la page 2 dans un formulaire classique pour le modifier et le sauvegarder, je quitte donc le datagrid. Après la sauvegarde dans la base de données, je redemande l'affichage de ma liste de clients, mais là, les valeurs des paramêtres start et limit sont perdues. Ils prennent donc par défaut les valeurs 0 et 14 ce qui fait que je reviens sur la page 1 du datagrid. Hors, ce que je voudrais, c'est garder les dernieres valeur connues pour retrouver la page sur laquelle on était, avant l'affichage du client, la N° 2 dans mon exemple.

    Je cherche donc un moyen de renvoyer les bonnes valeurs de paramêtres pour afficher la dernière page visionnée.
    DD

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 6
    Par défaut
    Bon ben j'ai trouvé !

    Je donne ma solution pour ceux que ça intéresse. D'ailleurs, je suis un peu étonné que ce sujet n'ai pas, à ma connaissance, déjà été abordé. En effet, pour l'utilisateur qui fait une recherche dans le data grid, qui trouve ce qui l'intéresse à la page 278, qui édite l'article par exemple et qui revient ensuite à la page 1 dans le data grid, c'est plus plutôt agaçant

    Dans le fichier js, je remplace
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    autoLoad: {params:{start:  Ext.app.start, limit: 14}}
    Dans ma vue (fichier html qui affiche le data grid) j'ajoute la variable start, qui sera la valeur prise par l'autoload du fichier précédent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <div id="searchListGridPanel"></div>
    <script type="text/javascript" language="JavaScript" charset=iso-8859-1>
    	Ext.app.baseUrl = '{baseUrl}';
    	Ext.app.flecheDroite = '{const:flecheDroite}';
    	Ext.app.editAction = '{editAction}';
    	Ext.app.start = {start};
     
    </script>
    <script src="{baseUrl}/public/scripts/consultelist.js" type="text/javascript" charset=iso-8859-1></script>
    {/set}
    Dans le service AJAX de mon controller (côté serveur) je récupère la valeur de start passé et je l'enregistre dans la session:
    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
     
        /**
    	 * Service AJAX appelé par le grid du showSearchList
    	 * /va chercher les fiches correspondants aux critères de recherche
    	 */
        public function getSearchDatasAction()
        { 
            //Initialisation des paramètres pour la requête globale
            $params = new stdClass();
            //Nombre de lignes à ommettre
            $params->start = $this->_request->getParam('start', 0);
            //nombre de lignes désirées
            $params->limit = $this->_request->getParam('limit', 14);
            $params->sort  = $this->_request->getParam('sort', 'cli_name');
            $params->dir   = $this->_request->getParam('dir', 'DESC');
     
             //On historise la page sur laquelle on est
            $this->context->params = $params;
    Toujours dans mon controller, quand je reviens sur l'action d'affichage, je passe à ma vue (html) la valeur de start

    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
     
     /**
    	 * Affiche le formulaire de recherche et le datagrid
    	 *
    	 */
        public function showSearchListAction()
        {
            $this->_linkContext();
            //S'il y a une demande de recherche : affichage du grid vide
            //Le remplissage se fera à l'appel de l'action getSearchDatas
            //directement par le grid en Ajax
            if ($this->context->criteresList) {
                $this->view->searchList = true;
            }
            //Historisation de la page du grid
            if(isset($this->context->params) && !empty($this->context->params)) {
                $this->view->start = $this->context->params->start;
            } else {
                $this->view->start = 0;
            }
    Et voilà, la boucle est bouclée, il ne reste plus qu'à mettre aux endroits stratégiques quelques suppressions de ce paramêtre start, pour ne pas le garder en mémoire tout le temps, cas d'une nouvelle recherche par exemple.

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

Discussions similaires

  1. [PHP 5.3] Renvoyer l'utilisateur sur la bonne page après un login
    Par oc_alex86 dans le forum Langage
    Réponses: 2
    Dernier message: 09/02/2010, 16h09
  2. [MySQL] Retour sur la même page
    Par hades33 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 28/10/2009, 19h42
  3. Comment rester sur la même page avec actualiser ?
    Par schnuky dans le forum Débuter
    Réponses: 5
    Dernier message: 30/07/2009, 18h55
  4. Réponses: 5
    Dernier message: 30/06/2009, 23h21
  5. [MySQL] Liste déroulante dynamique qui ne renvoie pas sur la bonne page
    Par Adaviada dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 23/11/2007, 20h27

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