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

MkFramework Discussion :

Filtre dans le module dataTable


Sujet :

MkFramework

  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut Filtre dans le module dataTable
    Bonjour,
    J'ai encore une question sur ce module qui marche très bien dorénavant (c'était juste un pb de compatibilité avec le layout bootstrap).
    Je vois dans le constructeur de la classe module_datablesJson qu'on peut rajouter des filtres dans la requête AJAX en passant en paramètre GET une chaîne de type filters=''
    Seulement je n'y arrive pas.. J'ai pourtant essayé pas mal de choses comme par exemple mettre dans ma fonction _list() de mon module :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $filter= json_encode(array(
      "rules"=>array(0=>array("field"=>"monCHamp1","data"=>$maValeur),
    		      1=>array("field"=>"monCHamp2","data"=>$maValeur)
        )
      )
    );
    $paramUser = "&filters=" . $filter;
    $oTable->setJsonLink('transactions::listJson'. $paramUser);
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Bon bah je crois que je peux aller me cacher
    On sait jamais si ça peut aider qqu'un :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $filter= addslashes(json_encode(array(
      "rules"=>array(0=>array("field"=>"monChamp1","data"=>$val1),
                           1=>array("field"=>"monChamp2","data"=>$val2)
          )
        )
      )
    );
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  3. #3
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Le filtre n'est pas encore géré dans ce module, c'est pour cela que je l'ai désactivé.

    Il faut que je regarde sur la doc comment l'implementer dans la méthode ajax retournant le json

    car dans ce cas la, il faut aussi modifier le code de la méthode _listJson qui interprete l'appel pour retourner sous forme json le contenu du tableau
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Bah je viens de poster la solution qui marche bien juste en même temps

    Au final, voilà ce que j'ai fait :
    1. Ajout d'une méthode addFilter dans la classe module_datablesJson :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	public function addFilter($sField,$uValue){
    		$this->tFilter[$sField]=$uValue;
    	}

    2. Dans la fonction _listJson du module concerné on peut alors faire :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $oJson=module_datatables::getJson();
    $oJson->addFilter("monChamp1",$val1);
    $oJson->addFilter("monChamp2",$val2);
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Bonjour,

    Je pense qu'on ne parlait pas de la même chose. En effet, j'allais poser la question mais je pense que vous y avez répondu en fait.
    J'essaie d'implémenter la fonction de recherche intégrée à DataTable depuis 1 ou 2h et je crois que c'est de ça dont vous parliez
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  6. #6
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Oui en effet c'est de ça que je parlais: la prise en compte de la saisie utilisateur pour filtrer le resultat json injecté dans le tableau datatables
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  7. #7
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Apparemment une requête AJAX est envoyée au serveur à chaque fois qu'on appuie sur une touche dans le INPUT de recherche. Dans cette requête, il y a un paramètre "search[value]" qui est envoyé au serveur. (voir doc)

    Je tente de récupérer ce paramètre "search[value]" dans la méthode _listJson pour filtrer mes résultats.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if (_root::getParam('search[value]','')!=''){  
    	$tData= model_transactions::getInstance()->uneRequeteSQL();
    }else{
    	$tData=model_transactions::getInstance()->uneAutreRequeteSQL();
    }
    $oJson->setData($tData);
    $oJson->show();

    Mais ça me renvoie toujours le mm jeu de données

    Je n'utilise peut-être pas la bonne méthode pour récupérer ce paramètre...

    EDIT :

    Ah, je crois avoir trouvé, je finirai demain :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (_root::getParam('search')['value']!=''){  
    	$tData= model_transactions::getInstance()->uneRequeteSQL();
    }else{
    	$tData=model_transactions::getInstance()->uneAutreRequeteSQL();
    }
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  8. #8
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Voici une version à tester:

    note: vous devez modifier votre méthodes de filtre dans votre classe modèle par celle-ci
    Code php : 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
     
    //methode listant le nombre total d'enregistrements filtre
    public function findTotalFiltered($tFilter){
      foreach($tFilter as $sField => $sValue){
        $tWhere[]=$sField.' like ? ';
        $tValue[]='%'.$sValue.'%';
      }
      $oRow=$this->findOneSimple('SELECT count(*) as total FROM '.$this->sTable.' WHERE  '.implode(' AND ',$tWhere).'',$tValue);
      return $oRow->total;
    }
    //methode retournant les enregistrements trie et pagine et filtre
    public function findListFilteredAndLimitOrderBy($tFilter,$start,$limit,$sField,$side){
      foreach($tFilter as $sField => $sValue){
        $tWhere[]=$sField.' like ? ';
        $tValue[]='%'.$sValue.'%';
      }
      return $this->findManySimple('SELECT * FROM '.$this->sTable.' WHERE  '.implode(' AND ',$tWhere).' ORDER BY '.$sField.' '.$side.' LIMIT '.$start.','.$limit,$tValue);
    }

    pour l'instant le filtre par colonne, en bas de chaque titre fonctionne bien

    Il faut également activer dans votre module où vous instanciez le module datatables le filtre via l'appel à sa méthode
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $oTable->enableSearchEachColumn();
    Fichiers attachés Fichiers attachés
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  9. #9
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Super ! Merci ça m'aide beaucoup. Non seulement à avancer sur mon petit projet mais aussi à comprendre le fonctionnement de DataTable.

    Une petite correction sur cette fonction. Il faut juste changer le nom de $sField en paramètre d'entrée (perso j'ai mis $sOrder) pour conserver le tri
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //methode retournant les enregistrements trie et pagine et filtre
    public function findListFilteredAndLimitOrderBy($tFilter,$start,$limit,$sOrder,$side){
      foreach($tFilter as $sField => $sValue){
        $tWhere[]=$sField.' like ? ';
        $tValue[]='%'.$sValue.'%';
      }
      return $this->findManySimple('SELECT * FROM '.$this->sTable.' WHERE  '.implode(' AND ',$tWhere).' ORDER BY '.$sOrder.' '.$side.' LIMIT '.$start.','.$limit,$tValue);
    }
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

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

Discussions similaires

  1. [VB.NET] filtre dans base de donnée
    Par speedtug dans le forum Windows Forms
    Réponses: 7
    Dernier message: 21/09/2005, 18h12
  2. Application d'un filtre dans sous form (syntaxe)
    Par samlepiratepaddy dans le forum Access
    Réponses: 12
    Dernier message: 15/09/2005, 22h32
  3. violation d'adresse dans le module 'bdert70.bpl'
    Par Magnus dans le forum Bases de données
    Réponses: 6
    Dernier message: 19/08/2005, 14h34
  4. [VB.NET] Appeler une sub public dans un module de form
    Par SergeF dans le forum Windows Forms
    Réponses: 3
    Dernier message: 01/06/2004, 14h08
  5. Probleme de filtre dans bdd
    Par scorpiwolf dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/06/2002, 11h43

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