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 :

Couleur et filtres avec guriddo


Sujet :

MkFramework

  1. #1
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut Couleur et filtres avec guriddo
    Bonjour à tous.

    J'essaye de personaliser une page affichant des enregistrements grace au module guriddo. J'ai remarqué que même dans les tutoriaux, le tableau guriddo est bleu.
    1- Y a -t-il un moyen de faire en sorte qu'il soit d'une autre couleur? (histoire d'harmoniser le site)?
    Ensuite, en ce qui concerne les filtres: j'ai remarqué que si le mot entré dans le champs de filtre ne correspond pas exactement à une des valeurs de la colonne,le filtre ne renvoie aucune ligne.
    2- Y a -t-il un moyen de faire une recherche progressive?
    Enfin en ce qui concerne le tri: les flèches 'Haut' et 'Bas' dans chaque colonne sont pales et presques invisibles. Il est donc difficile de se rendre compte qu'on peut faire un tri.
    3- Y a -t-il un moyen d'agrandir ces flèches ou de leur donner une couleur plus frapante?

    Merci d'avance.

  2. #2
    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
    Bonjour,
    1. il faudrait que j'ajoute une section sur Guriddo sur le site
    j'ai réja répondu sur le forum ici: http://www.developpez.net/forums/d15...rement-gurido/

    Dans le css de guriddo sur le site, on voit que celui-ci est généré via une application en ligne
    http://jqueryui.com/themeroller/?ffD...diusShadow=5px

    2. pour le filtre: vous dites qu'il ne cherche que le pattern exacte, mais vous avez la main la dessus: rien n'est caché: il appelle simplement les deux methodes ajouté dans votre couche modèle, il vous suffit de modifier ces requêtes

    3. je sais pas, peut etre via le css (voir réponse 1)
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  3. #3
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    En regardant le fichier public/guriddo/trirand/ui.jqgrid.css je ne me retrouve pas sur la propriété qui gère la couleur du fond du th ou celle de la ligne du bas. Peux tu me l'indiquer dans cette jungle?

  4. #4
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    Pour ta deuxième réponse, ça m'a orienté un peu et j'ai fait ceci:
    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
    19
    20
     
    //ici la meme chose incluant un filtre
       //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 statut_poste_id = 1 AND  '.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 statut_poste_id = 1 AND  '.implode('AND',$tWhere).' ORDER BY '.$sField.' '.$side.' LIMIT '.$start.','.$limit,$tValue.'\'');
       }
    L'idée était de retourner des enregistrements dont la valeur d'une colonne commence par la suite de caractères saisis dans le champs de filtre.
    Exemple: Si je tape 'Pa' il me renvoie toutes les lignes dont la vile commence par 'Pa'.
    En testant j'au cette erreur:Nom : Capture.PNG
Affichages : 173
Taille : 53,9 Ko
    L'erreur se trouve ou? STP explique moi car je ne vois pas trop comment faire cela.

  5. #5
    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
    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
    19
    20
    21
     
     
    //ici la meme chose incluant un filtre
       //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 statut_poste_id = 1 AND  '.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 statut_poste_id = 1 AND  '.implode('AND',$tWhere).' ORDER BY '.$sField.' '.$side.' LIMIT '.$start.','.$limit,$tValue);
       }
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  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
    Citation Envoyé par Kristen Saphiroz Voir le message
    En regardant le fichier public/guriddo/trirand/ui.jqgrid.css je ne me retrouve pas sur la propriété qui gère la couleur du fond du th ou celle de la ligne du bas. Peux tu me l'indiquer dans cette jungle?
    Il faut regarder dans ce css sur cette propriété:
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    .ui-widget-header .ui-state-default {
    	border: 1px solid #77d5f7;
    	background: #0078ae url("images/ui-bg_glass_45_0078ae_1x400.png") 50% 50% repeat-x;
    	font-weight: normal;
    	color: #ffffff;
    }

    par exemple pour enlever ll'effet "glass" il faut enlever l'image, ensuite pour le passer en vert par exemple:
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    .ui-widget-header .ui-state-default {
    	border: 1px solid #77d5f7;
    	background: #007700  50% 50% repeat-x;
    	font-weight: normal;
    	color: #ffffff;
    }
    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 régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    Merci énormément, j'ai pu personnaliser l'apparence de la table. Les modifications se font dans le fichier public/guriddo/css/jquery-ui.css
    C'est beau guriddo!
    Cependant pour le filtre c'est toujours les problèmes. J'ai appliqué les corrections que tu m'as indiqué, c'est bon ça marche sur les valeurs des colonnes propres à la table. Dans le cas présent ma table 'postes' recoit une clé étrangère 'direction_id'. Donc pour afficher dans la table guriddo le nom de la direction et non son 'id' j'ai fais ceci dans la méthode _listJson() :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $tJoinmodel_directions=model_directions::getInstance()->getSelect();
     foreach($tData as $key => $val)
    		{
    			if(isset($tJoinmodel_directions[$val->direction_id])){
    			$val->direction_id=$tJoinmodel_directions[$val->direction_id];
    			}
                    }
    $oJson->setData($tData);
    Le problème c'est que pour filtrer les postes par direction l'utilisateur est obligé de taper l'identifiant de la direction pour que ça marche. Pour pallier cela j'ai entrepris ceci:
    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
     
     public function findTotalFiltered($tFilter){
           foreach($tFilter as $sField => $sValue){
    			if($sField=='direction_id'){
    				$oDirection = model_directions::getInstance()->findByLibelleLike($sValue);
     
    				$svalue = $oDirection->id;
    			}
     
               $tWhere[]=$sField.' LIKE ?';
               $tValue[]='%'.$sValue.'%';
           }
            $oRow=$this->findOneSimple('SELECT count(*) as total FROM '.$this->sTable.' WHERE statut_poste_id = 1 AND  '.implode('AND',$tWhere).'',$tValue);
           return $oRow->total;
       }
    Sachant que dans mon model direction j'ai la fonction:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public function findByLibelleLike($sLibelle){
    		return $this->findOne('SELECT * FROM '.$this->sTable.' WHERE libelle LIKE \'%?%\'',$sLibelle );
    	}
    Quand je fais un test avec le début 'tec' du libellé de la direction 'technique' jobtient une erreur:Nom : Capture.PNG
Affichages : 170
Taille : 43,4 Ko l'erreur se trouve au niveau de 'public function findByLibelleLike($sLibelle)' ?

  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
    je pense que le soucis vient de cette recherche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $oDirection = model_directions::getInstance()->findByLibelleLike($sValue);
    si la methode findByLibelleLike ne retourne rien, ça pose problème
    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 régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    Justement elle retourne des éléments!
    Dans le model voici la méthode et la requête:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public function findByLibelleLike($sLibelle){
    		return $this->findOne('SELECT * FROM '.$this->sTable.' WHERE libelle LIKE \'%?%\'',$sLibelle );
    	}
    et dans phpmyadmin lorsque j’exécute la même requête en précisant la table et la valeur du $sLibelle:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM directions WHERE libelle LIKE '%tec%'
    j'ai le résultat attendu:Nom : Capture.PNG
Affichages : 161
Taille : 6,1 Ko
    La formulation de ma requête dans la méthode du model est -elle équivalente à celle qui s'est exécutée dans phpmyadmin?

  10. #10
    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
    La requête dans la couche modèle n'est pas correcte (syntaxe pdo)

    Essayez avec ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    		return $this->findOne('SELECT * FROM '.$this->sTable.' WHERE libelle LIKE ? ' , '%'.$sLibelle.'%' );
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  11. #11
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    return $this->findOne('SELECT * FROM '.$this->sTable.' WHERE libelle LIKE ? ' , '%'.$sLibelle.'%' );
    il n'est plus besoin de mettre des cotes autour de %mot_cle%?

  12. #12
    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
    Pour pdo, il faut mettre les % dans la valeur passé et non dans la requete contenant le "?"
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  13. #13
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    Donc ceci
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function findByLibelleLike($sLibelle){
    		//return $this->findOne('SELECT * FROM '.$this->sTable.' WHERE libelle LIKE ? ' , '%'.$sLibelle.'%' );
    		return $this->findOne('SELECT * FROM '.$this->sTable.' WHERE libelle LIKE ?',$sLibelle );
    	}
    sachant que l'appel se fait ainsi
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if($sField=='direction_id'){
    				$sValue ='%'.$sValue.'%';
    				$oDirection = model_directions::getInstance()->findByLibelleLike($sValue);
     
    				$svalue = $oDirection->id;
    			}
    C'est bien?
    J'ai essayé la requete que tu m'a donné plus haut mais rien ne sort lorsque je tape par exemple 'tec'

  14. #14
    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
    Et là ça fonctionne ?
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  15. #15
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    Niet. non

  16. #16
    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
    ON va faire plusieurs choses:

    1. activer le log d'information:
    Dans le fichier conf/site.ini.php de votre application, mettez information=1

    Faites de nouveau votre action et regardez dans le fichier data/log/ de la journée pour voir la requete sQL

    Si ça n'aide pas d'avoir la requete executée

    2. faire un var_dump du retour:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if($sField=='direction_id'){
    				$sValue ='%'.$sValue.'%';
    				$oDirection = model_directions::getInstance()->findByLibelleLike($sValue);
     
    				var_dump($oDirection);
    				$svalue = $oDirection->id;
    			}
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  17. #17
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    Quand j'ai regardé dans le fichier data/log j'ai vu que la requête que MKF tente d'exécuter est: SELECT * FROM DIRECTION WHERE LIBELLE LIKE [%tec%], pareil pour les autres requêtes ou je passe $sLibelle, cette variable est remplacée par '[%tec%]'. Je me demande alors si c'est normal qu'il y ait des crochets qui encadre ma chaîne de caractère?

    Lorsque j'ai mis le var_dump($oDirection) j'ai ce message:
    object(row_directions)#13 (4) { ["sClassModel":protected]=> string(16) "model_directions" ["_bChooseUpdate":"abstract_row":private]=> bool(true) ["_tProperty":protected]=> array(3) { ["id"]=> string(1) "4" ["code"]=> string(2) "DT" ["libelle"]=> string(9) "TECHNIQUE" } ["_tPropertyToUpdate":protected]=> NULL } object(row_directions)#13 (4) { ["sClassModel":protected]=> string(16) "model_directions" ["_bChooseUpdate":"abstract_row":private]=> bool(true) ["_tProperty":protected]=> array(3) { ["id"]=> string(1) "4" ["code"]=> string(2) "DT" ["libelle"]=> string(9) "TECHNIQUE" } ["_tPropertyToUpdate":protected]=> NULL } {"page":0,"total":0,"records":"0"}
    Apparemment la raquette a retourné la bonne direction (l'objet direction technique). mais alors pourquoi la table guriddo n'affiche pas les enregistrement ayant pour direction la technique?

  18. #18
    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
    Je pense savoir d'ou vient le soucis: Guriddo attend un tableau d'enregistrement et non un enregistrement unique

    il faut remplacer je pense: (findOne)

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public function findByLibelleLike($sLibelle){
    		//return $this->findOne('SELECT * FROM '.$this->sTable.' WHERE libelle LIKE ? ' , '%'.$sLibelle.'%' );
    		return $this->findOne('SELECT * FROM '.$this->sTable.' WHERE libelle LIKE ?',$sLibelle );
    	}

    par (findMany)

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public function findByLibelleLike($sLibelle){
    		//return $this->findOne('SELECT * FROM '.$this->sTable.' WHERE libelle LIKE ? ' , '%'.$sLibelle.'%' );
    		return $this->findMany('SELECT * FROM '.$this->sTable.' WHERE libelle LIKE ?',$sLibelle );
    	}
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  19. #19
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    Bonjour bonjour à toi,
    Nouvelle journée, espérons qu'on fera des pas de géant!
    Je vais reprendre un peu la situation car je crois qu'il est important de le noter:
    J'affiche dans guriddo des postes contenus dans la table 'postes': voici 'model_postes':
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    <?php
    
    class model_postes extends abstract_model{
    	
    	protected $sClassRow='row_postes';
    	
    	protected $sTable='postes';
    	protected $sConfig='candidature';
    	
    	protected $tId=array('id');
    
    	public static function getInstance(){
    		return self::_getInstance(__CLASS__);
    	}
    
    	public function findById($uId){
    		return $this->findOne('SELECT * FROM '.$this->sTable.' WHERE id=?',$uId );
    	}
    	
    	
    	public function findByDirectionContrat($iDirection, $sContrat){
    		return $this->findMany('SELECT * FROM '.$this->sTable.' WHERE direction_id=? AND type_contrat=? ',$iDirection,$sContrat );
    	}
    	
    	public function findByDirection($iDirection){
    		return $this->findMany('SELECT * FROM '.$this->sTable.' WHERE direction_id=?',$iDirection );
    	}
    	
    	public function findByContrat($sContrat){
    		return $this->findMany('SELECT * FROM '.$this->sTable.' WHERE type_contrat=?',$sContrat );
    	}
    	
    	public function findAll(){
    		return $this->findMany('SELECT * FROM '.$this->sTable);
    	}
    	
    	public function findByCandidat($iCandidat){
    		return $this->findMany('SELECT postes.id as "id", reference, intitule, statut_poste_id, date_publication
    								FROM postes, candidatures, candidats 
    								WHERE candidats.id = candidatures.candidat_id
    								And candidatures.poste_id = postes.id
    								and candidats.id =?',$iCandidat );
    	}
    	
    	
    	public function getSelect(){
    		$tab=$this->findAll();
    		$tSelect=array();
    		if($tab){
    		foreach($tab as $oRow){
    			$tSelect[ $oRow->id ]=$oRow->intitule;
    		}
    		}
    		return $tSelect;
    	}
    	
    	  //methode listant le nombre total d'enregistrements
       public function findTotal(){
           $oRow=$this->findOneSimple('SELECT count(*) as total FROM '.$this->sTable.' WHERE statut_poste_id = 1');
           return $oRow->total;
       }
       
       //methode retournant les enregistrements trie et pagine
       public function findListLimitOrderBy($start,$limit,$sField,$side){
           return $this->findManySimple('SELECT * FROM '.$this->sTable.' WHERE statut_poste_id = 1 ORDER BY '.$sField.' '.$side.' LIMIT '.$start.','.$limit);
       }
      
       //ici la meme chose incluant un filtre
       //methode listant le nombre total d'enregistrements filtre
       public function findTotalFiltered($tFilter){
           foreach($tFilter as $sField => $sValue){
    			if($sField=='direction_id'){
    				$sValue ='%'.$sValue.'%';
    				$oDirection = model_directions::getInstance()->findByLibelleLike($sValue);
    				
    				$svalue = $oDirection->id;
    			}
    			
               $tWhere[]=$sField.' LIKE ?';
    	   $tValue[]=$sValue;
           }
            $oRow=$this->findOneSimple('SELECT count(*) as total FROM '.$this->sTable.' WHERE statut_poste_id = 1 AND  '.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){
    			if($sField=='direction_id'){
    				$sValue ='%'.$sValue.'%';
    				$oDirection = model_directions::getInstance()->findByLibelleLike($sValue);
    				
    				$svalue = $oDirection->id;
    			}
    	   
               $tWhere[]=$sField.' LIKE ?';
               $tValue[]=$sValue;
           }
           return $this->findManySimple('SELECT * FROM '.$this->sTable.' WHERE statut_poste_id = 1 AND  '.implode(' AND ',$tWhere).' ORDER BY '.$sField.' '.$side.' LIMIT '.$start.','.$limit,$tValue);
       }
    
    	
    }
    
    class row_postes extends abstract_row{
    	
    	protected $sClassModel='model_postes';
    	
    	/*exemple jointure 
    	public function findAuteur(){
    		return model_auteur::getInstance()->findById($this->auteur_id);
    	}
    	*/
    	/*exemple test validation*/
    	private function getCheck(){
    		$oPluginValid=new plugin_valid($this->getTab());
    		
    		
    		/* renseigner vos check ici
    		$oPluginValid->isEqual('champ','valeurB','Le champ n\est pas &eacute;gal &agrave; '.$valeurB);
    		$oPluginValid->isNotEqual('champ','valeurB','Le champ est &eacute;gal &agrave; '.$valeurB);
    		$oPluginValid->isUpperThan('champ','valeurB','Le champ n\est pas sup&eacute; &agrave; '.$valeurB);
    		$oPluginValid->isUpperOrEqualThan('champ','valeurB','Le champ n\est pas sup&eacute; ou &eacute;gal &agrave; '.$valeurB);
    		$oPluginValid->isLowerThan('champ','valeurB','Le champ n\est pas inf&eacute;rieur &agrave; '.$valeurB);
    		$oPluginValid->isLowerOrEqualThan('champ','valeurB','Le champ n\est pas inf&eacute;rieur ou &eacute;gal &agrave; '.$valeurB);
    		$oPluginValid->isEmpty('champ','Le champ n\'est pas vide');
    		$oPluginValid->isNotEmpty('champ','Le champ ne doit pas &ecirc;tre vide');
    		$oPluginValid->isEmailValid('champ','L\email est invalide');
    		$oPluginValid->matchExpression('champ','/[0-9]/','Le champ n\'est pas au bon format');
    		$oPluginValid->notMatchExpression('champ','/[a-zA-Z]/','Le champ ne doit pas &ecirc;tre a ce format');
    		*/
    
    		return $oPluginValid;
    	}
    
    	public function isValid(){
    		return $this->getCheck()->isValid();
    	}
    	public function getListError(){
    		return $this->getCheck()->getListError();
    	}
    	public function save(){
    		if(!$this->isValid()){
    			return false;
    		}
    		parent::save();
    		return true;
    	}
    	
    	
    	/*FORMATAGE DES DATES*/
    	   //on surcharge le constructeur
       public function __construct($tRow=null){
    
           //on appel le constructeur normal de la row
           parent::__construct($tRow);
    
           //on modifie le champ date_publication avant d'initialiser l'objet
           $oDate = new plugin_date($tRow['date_publication'],'Y-m-d');
           $this->date_publication = $oDate->toString('d-m-Y');
    	}
    
    } ?>
    Donc dans ma table 'postes' j'ai une clé étrangère 'direction_id' de type integer. J'affiche guriddo dans l'action '_list()' du module 'postes': (module/postes/main.php): Voici l'action:
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    public function _list(){
    			 
    			
    	   //instancier le module
    	   $oTable=new module_guriddo;
    	   //on indique le nombre de lignes par page
    	   $oTable->setPaginationLimit(5);
    	  
    	   //l'id de la div html
    	   $oTable->setId('id');
    	  
    	   //on definit la hauteur du tableau (en pixels)
    	   $oTable->setHeight(250);
    	   $oTable->setWidth(780);
    
    	   //la page permettant de retourner le contenu au format json
    	   $oTable->setJsonLink('postes::listJson');
    
    	   //on defini (si besoin) un menu deroulant permettant de modifier la pagination
    	   $oTable->setListLimit(array(5,10));
    
    	   //activer l'alternance des lignes
    	   $oTable->enableAltRows();
    	  
    	   //activer la reorganisation des colonnes
    	   $oTable->enableSortable();
    
    	   //definir le sens par defaut de tri (asc/desc)
    	   $oTable->setDefaultSort('desc');
    
    	   //defintion du tri par defaut
    	   $oTable->setDefaultSortField('id');
    
    	   //pour ajouter un group de colonne
    	   //$oTable->addGroupColumn('Perrsonne',2,'firstname');
    	   
    
    	   $tJoinmodel_directions=model_directions::getInstance()->getSelect();
    		$tmp=array();
    		foreach($tJoinmodel_directions as $key => $val){
    			$tmp[]=$key.':'.$val;
    		}		$sJoinmodel_directions=implode(';',$tmp);
    		$omodel_directions=new stdclass;		$omodel_directions->value=$sJoinmodel_directions;
    		
    		$tJoinmodel_statut_postes=model_statut_postes::getInstance()->getSelect();
    		$tmp=array();
    		foreach($tJoinmodel_statut_postes as $key => $val){
    			$tmp[]=$key.':'.$val;
    		}		$sJoinmodel_statut_postes=implode(';',$tmp);
    		$omodel_statut_postes=new stdclass;		$omodel_statut_postes->value=$sJoinmodel_statut_postes;
    	   
    	   
    	   //les colonnes que l'on veut afficher dans le tableau
    	   $oTable->addColumn('Référence','reference',array('width'=>100));
    	   $oTable->addColumn('Intitulé','intitule',array('width'=>250));
    	   $oTable->addColumn('Contrat','type_contrat',array('width'=>90));
    	   $oTable->addColumn('Direction','direction_id');
    	   $oTable->addColumn('Publication','date_publication');
    	   $oTable->addColumn('Statut','statut_poste_id',array('width'=>50));
    	   $oTable->addColumn('        ','id',array(
                                   'formatter'=>
                                       "function ( cellValue, options, rowObject ){
     
                                           if(rowObject.id!=''){
     
                                               return '<a href=\"index.php?:nav=postes::show&id='+rowObject.id+'\"><img src=\"css/images/loupe.png\" alt=\"voir l\'offre\" /></a> ';
                                           }else{
                                               return cellValue;
                                           }
                                       }",
    								'width'=>50));
    
    	   $oView= $oTable->build();
    		$oView1=new _view('postes::list');
    		
    	   //assigner la vue retournee a votre layout
    	   $this->oLayout->add('main1',$oView1);
    	   $this->oLayout->add('main',$oView);
    	   
    	   $this->oLayout->title="e-tmg - Liste des offres";
    	}
    	
    	public function _listJson(){
      
    	   $oJson=module_guriddo::getJson();
    	   //on precise la liste des champs autorise a etre trie
    	   $oJson->setSortFieldAllowed(array('id','reference','intitule','type_contrat','direction_id'));
    		  
    	   if($oJson->hasFilter()){
    		  
    		   $count = model_postes::getInstance()->findTotalFiltered($oJson->getListFilter());
    		   $oJson->setTotal($count);
    		   $tData=model_postes::getInstance()->findListFilteredAndLimitOrderBy($oJson->getListFilter(),$oJson->getStart(),$oJson->getLimit(),$oJson->getSortField(),$oJson->getSortSide());
    
    	   }else{
    		   $count = model_postes::getInstance()->findTotal();
    		   $oJson->setTotal($count);
    		   $tData=model_postes::getInstance()->findListLimitOrderBy($oJson->getStart(),$oJson->getLimit(),$oJson->getSortField(),$oJson->getSortSide());
    	   }
    	  
    	  
    	  $tJoinmodel_directions=model_directions::getInstance()->getSelect();
    	  $tJoinmodel_statut_postes=model_statut_postes::getInstance()->getSelect();
    	  foreach($tData as $key => $val)
    		{
    			if(isset($tJoinmodel_directions[$val->direction_id])){
    			$val->direction_id=$tJoinmodel_directions[$val->direction_id];
    			}
    			if(isset($tJoinmodel_statut_postes[$val->statut_poste_id])){
    			$val->statut_poste_id=$tJoinmodel_statut_postes[$val->statut_poste_id];
    			}
    		}
    	  
    	  
    	   $oJson->setData($tData);
      
    	   $oJson->setId('id');
    	   $oJson->addColumn('id');
    	   $oJson->addColumn('reference');
    	   $oJson->addColumn('intitule');
    	   $oJson->addColumn('type_contrat');
    	   $oJson->addColumn('situation');
    	   $oJson->addColumn('dimension');
    	   $oJson->addColumn('activite');
    	   $oJson->addColumn('finalite');
    	   $oJson->addColumn('profil_requis');
    	   $oJson->addColumn('date_publication');
    	   $oJson->addColumn('statut_poste_id');
    	   $oJson->addColumn('direction_id');
    	  
    	   $oJson->show();
    	}

    Tu remarqueras donc que dans guriddo j'affiche le libellé des directions plutôt que l'entier correspondant à 'direction_id'. (Merci getSelect())!
    Maintenant venons-en aux filtres: je veux filtrer les postes selon la direction. Tu as dû remarqué que j'ai customisé les méthodes 'findTotalFiltered($tFilter)' et 'findListFilteredAndLimitOrderBy($tFilter,$start,$limit,$sField,$side)' .Car:
    1- j'ai supposé que '$svalue' est le texte saisi dans le champs de filtre d'une colonne de guriddo. C'est sur ce texte que s'effectue la recherche.
    2- Sur la colonne 'direction_id' guriddo attend un 'integer' dans la variable '$sValue'. Or l'internaute va saisir une chaîne de caractères.
    3- J'ai donc récupéré le texte qui sera saisi dans le filtre de la colonne 'direction_id', j'ai récupéré l'objet direction dont le libellé est proche de ce texte, et je passe l'identifiant de cet objet à '$sValue'.
    4- Et le tour est joué je continu le traitement normal.
    Voici le model_directions:
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    <?php
    class model_directions extends abstract_model{
    	
    	protected $sClassRow='row_directions';
    	
    	protected $sTable='directions';
    	protected $sConfig='candidature';
    	
    	protected $tId=array('id');
    
    	public static function getInstance(){
    		return self::_getInstance(__CLASS__);
    	}
    
    	public function findById($uId){
    		return $this->findOne('SELECT * FROM '.$this->sTable.' WHERE id=?',$uId );
    	}
    	public function findAll(){
    		return $this->findMany('SELECT * FROM '.$this->sTable.' ORDER BY LIBELLE ASC');
    	}
    	
    	public function findByLibelleLike($sLibelle){
    		//return $this->findOne('SELECT * FROM '.$this->sTable.' WHERE libelle LIKE ? ' , '%'.$sLibelle.'%' );
    		return $this->findOne('SELECT * FROM '.$this->sTable.' WHERE libelle LIKE ?',$sLibelle );
    	}
    	
    	
    	public function getSelect(){
    		$tab=$this->findAll();
    		$tSelect=array();
    		if($tab){
    		foreach($tab as $oRow){
    			$tSelect[ $oRow->id ]=$oRow->libelle;
    		}
    		}
    		return $tSelect;
    	}
    	
    
    	
    }
    
    class row_directions extends abstract_row{
    	
    	protected $sClassModel='model_directions';
    	
    	/*exemple jointure 
    	public function findAuteur(){
    		return model_auteur::getInstance()->findById($this->auteur_id);
    	}
    	*/
    	/*exemple test validation*/
    	private function getCheck(){
    		$oPluginValid=new plugin_valid($this->getTab());
    		
    		
    		/* renseigner vos check ici
    		$oPluginValid->isEqual('champ','valeurB','Le champ n\est pas &eacute;gal &agrave; '.$valeurB);
    		$oPluginValid->isNotEqual('champ','valeurB','Le champ est &eacute;gal &agrave; '.$valeurB);
    		$oPluginValid->isUpperThan('champ','valeurB','Le champ n\est pas sup&eacute; &agrave; '.$valeurB);
    		$oPluginValid->isUpperOrEqualThan('champ','valeurB','Le champ n\est pas sup&eacute; ou &eacute;gal &agrave; '.$valeurB);
    		$oPluginValid->isLowerThan('champ','valeurB','Le champ n\est pas inf&eacute;rieur &agrave; '.$valeurB);
    		$oPluginValid->isLowerOrEqualThan('champ','valeurB','Le champ n\est pas inf&eacute;rieur ou &eacute;gal &agrave; '.$valeurB);
    		$oPluginValid->isEmpty('champ','Le champ n\'est pas vide');
    		$oPluginValid->isNotEmpty('champ','Le champ ne doit pas &ecirc;tre vide');
    		$oPluginValid->isEmailValid('champ','L\email est invalide');
    		$oPluginValid->matchExpression('champ','/[0-9]/','Le champ n\'est pas au bon format');
    		$oPluginValid->notMatchExpression('champ','/[a-zA-Z]/','Le champ ne doit pas &ecirc;tre a ce format');
    		*/
    
    		return $oPluginValid;
    	}
    
    	public function isValid(){
    		return $this->getCheck()->isValid();
    	}
    	public function getListError(){
    		return $this->getCheck()->getListError();
    	}
    	public function save(){
    		if(!$this->isValid()){
    			return false;
    		}
    		parent::save();
    		return true;
    	}
    
    }
    Désolée d'avoir fait un si long message, je ne savais pas comment t'envoyer les fichiers pour que tu suive la logique, désolée.
    Maintenant que tu as sous les yeux tous les scripts que je manipule peut-être verras-tu ou j'ai fait l'erreur. ou si c'est ma compréhension de guriddo qui pose problème.

    Merci

  20. #20
    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
    Je pense avoir trouvé le soucis, modifiez ces deux méthodes dans votre classe modèle model_postes

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    //ici la meme chose incluant un filtre
       //methode listant le nombre total d'enregistrements filtre
       public function findTotalFiltered($tFilter){
           foreach($tFilter as $sField => $sValue){
    			if($sField=='direction_id'){
     
    				//si direction: on cherche d'abord la direction
    				$sValue ='%'.$sValue.'%';
    				$oDirection = model_directions::getInstance()->findByLibelleLike($sValue);
     
    				//puis on cherche avec cet id (il y avait une erreur de variable)
    				$tWhere[]=$sField.' = ?';
    	   			$tValue[]=$oDirection->id;
     
    			}else{
     
    				$tWhere[]=$sField.' LIKE ?';
    	   			$tValue[]=$sValue;
    			}
     
     
           }
            $oRow=$this->findOneSimple('SELECT count(*) as total FROM '.$this->sTable.' WHERE statut_poste_id = 1 AND  '.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){
    			if($sField=='direction_id'){
     
    				//si direction: on cherche d'abord la direction
    				$sValue ='%'.$sValue.'%';
    				$oDirection = model_directions::getInstance()->findByLibelleLike($sValue);
     
    				//puis on cherche avec cet id (il y avait une erreur de variable)
    				$tWhere[]=$sField.' = ?';
    	   			$tValue[]=$oDirection->id;
     
    			}else{
     
    				$tWhere[]=$sField.' LIKE ?';
    	   			$tValue[]=$sValue;
    			}
           }
           return $this->findManySimple('SELECT * FROM '.$this->sTable.' WHERE statut_poste_id = 1 AND  '.implode(' AND ',$tWhere).' ORDER BY '.$sField.' '.$side.' LIMIT '.$start.','.$limit,$tValue);
       }
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

Discussions similaires

  1. filtre avec couleur
    Par likinter dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/03/2009, 09h58
  2. Filtre avec zone de liste déroulante
    Par petitloup71 dans le forum Access
    Réponses: 10
    Dernier message: 08/07/2006, 13h21
  3. Filtre Avec Password
    Par @rkane dans le forum Sécurité
    Réponses: 7
    Dernier message: 15/06/2006, 23h31
  4. Réponses: 7
    Dernier message: 13/06/2006, 10h12
  5. Recherche et filtre avec un dynaset
    Par mat75019 dans le forum Access
    Réponses: 10
    Dernier message: 10/04/2006, 20h53

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