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

Symfony PHP Discussion :

Probleme avec le rendue d'un champ autocomplete créer avec sfWidgetFormDoctrineJQueryAutocomplete


Sujet :

Symfony PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2010
    Messages : 25
    Points : 5
    Points
    5
    Par défaut Probleme avec le rendue d'un champ autocomplete créer avec sfWidgetFormDoctrineJQueryAutocomplete
    Salut à tous.
    Je me tourne vers ce forum parce depuis deux jours je fais face à un problème. donc je travaille sur symfony et j'ai voulu créer un champs autocomplete à laide de sfWidgetFormDoctrineJQueryAutocomplete . Pour cela j'ai suivi un peu les conseil d'implémentation du plugin que j'ai trouvé sur le net. Ce qui m'a amené a pondre le code qui suit

    C’est le widget sfWidgetFormDoctrineJQueryAutocomplete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $this->widgetSchema['input_auto'] = new  sfWidgetFormDoctrineChoice(Array(
      										'model'=>'Article',
      										'renderer_class'=>'sfWidgetFormDoctrineJQueryAutocompleter',
      										'renderer_options'=>(array(
      													'model'=>'Article',
      													'url'=>'Home/search'))));
    Puis je crée l’action correspondante:
    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
     
    public function executeSearch(sfWebRequest $request)
    	{
    		$this->getResponse()->setContentType('application/json');
     
    		$q = $request->getParameter('q');
    		$limit = $request->getParameter('limit');
     
    		$req = Doctrine::getTable('Article')->getDataWhere($q, $limit);
     
    		$results = array();
    		foreach ( $req as $result )
            	$results[$result->getId()] = (string) $result;
     
            	$this->testeur=array();
            	$this->testeur=$results;
     
    		return $this->renderText(json_encode($results));         
    	}
    Du coté du modèle, je fais ma requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public function getDatatWhere($q, $limit=10)
    	{
    		$query= Doctrine_Query::Create()
                    ->where('title LIKE ?',"%$q%")
                    ->limit($limit)
                    ->execute()
                    ->getData();
     
           return $query;
     
    	}
    Puis j'ai inclus les fichiers javascript/css nécessaire au widget dans le partial "_form"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <?php use_javascript('/sfFormExtraPlugin/js/jquery.autocompleter.js') ?>
    <?php use_stylesheet('/sfFormExtraPlugin/css/jquery.autocompleter.css') ?>
    Mon formulaire s'affiche normalement on ne me signale aucune erreur. Mais quand je tape kelke chose dans le champ j'ai une image de chargement qui tourne dans le vide. On dirait qu'il travail mais qu'il ne trouve rien.

    Si quelqu'un a une idée ou une idée je suis prenneur.
    Ou à la limite est ce que kelkun oré une idée de comment je peux voir ce ki est recupéré par ma requete Doctrine::getTable.

    Merci d'avance.

  2. #2
    Membre averti Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 384
    Points
    384
    Par défaut
    Bonjour,

    J'ai un code fonctionnel au boulot, je regarde si je peux te le poster.

    Utilises-tu Firefox et Firebug ? Si oui, lorsque tu tapes quelque chose dans ton champ d'autocomplete, la requête et son résultat s'affiche dans la console. Cela permet déjà de savoir si la requête se passe correctement.

  3. #3
    Membre averti Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 384
    Points
    384
    Par défaut
    Bon, voici le code :
    dans la classe de formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $this->widgetSchema['id_profil']->setOption('renderer_class', 'sfWidgetFormDoctrineJQueryAutocompleter');
        $this->widgetSchema['id_profil'] = new sfWidgetFormDoctrineJQueryAutocompleter(
          array(
            'model' => "Profil",
            'url'   => url_for("@ajax_profil")
          ), array('size' => 100)
        );
    le routing.yml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ajax_profil:
      url: /ajax-profil
      param: { module: profil, action: ajaxProfil }
    actions.class.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      public function executeAjaxProfil(sfWebRequest $request)
      {
        $this->getResponse()->setContentType('application/json');
        $choices = array();
        foreach($profils = Doctrine::getTable('Profil')->getProfilAutocompletion($request->getParameter('q'), $request->getParameter('limit'))->getData() as $p)
        {
          $choices[$p->id] = $p->titre;
        }
        if($profils != array())
        {
          return $this->renderText(json_encode($choices));
        }
      }
    modelTable.class.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      public function getProfilAutocompletion($q, $limit){
        $dq = Doctrine_Query::create()
                ->select("p.id, p.titre")
                ->from("Profil p")
                ->where("p.titre LIKE ?","%".$q."%")
                ->limit($limit)
                ->orderBy('p.titre ASC');
        return $dq->execute();
      }
    Bon, il faut adapter c'est sûr mais c'est totalement fonctionnel chez moi.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2010
    Messages : 25
    Points : 5
    Points
    5
    Par défaut
    Merci pour ta réponse Sacricri.

    Je vais essayer ton bout de code pour voir ce que ca donne et je te tiens au courant.

    Pour ce qui concerne le navigateur jutilise bien firefox et firebug. Mais ya rien qui apparait sur la console quand je tape. Dumoins j'y ai pas fait gaf je vais essayer de refaire tout ca et on verra.

    Merci encore

  5. #5
    Membre averti Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 384
    Points
    384
    Par défaut
    Citation Envoyé par gohanfaye Voir le message
    Pour ce qui concerne le navigateur jutilise bien firefox et firebug. Mais ya rien qui apparait sur la console quand je tape. Dumoins j'y ai pas fait gaf je vais essayer de refaire tout ca et on verra.
    Voilà à quoi ressemble le résultat de la requête avec l'autocomplete dans firebug (pièce jointe)
    Images attachées Images attachées  

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2010
    Messages : 25
    Points : 5
    Points
    5
    Par défaut
    Merci la console et ton code m'ont bien aidé la j'ai plus du tout d'erreur l'appel ajax se passe bien je récupére bien les données que je veux je les vois au niveau de la console de firebug parcontre il ne s'affiche pas au niveau de mon formulaire. J'ai pas comme toi une liste des resultat qui s'affiche en dessous du champ input. J'ai pourtant mis le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return $this->renderText(json_encode($results))
    Et quand je fais un print_r sur le contenu du tableau qui récupère mes résultats il est OK ya les résultats attendus.

    Merci

  7. #7
    Membre averti Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 384
    Points
    384
    Par défaut
    Citation Envoyé par gohanfaye Voir le message
    ...
    Peux-tu mettre les codes adaptés à ta sauce pour voir stp ?

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2010
    Messages : 25
    Points : 5
    Points
    5
    Par défaut
    Dans la classe formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $this->widgetSchema['input_auto']= new sfWidgetFormDoctrineJQueryAutocompleter(array(
      										'model'=> 'Article',
      										'url'=>'Ajax'));
    Dans le routing :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ajax:
      url:   /ajax
      param: {module: Home, action: ajax}
    Dans l'action
    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
     
    public function executeAjax(sfWebRequest $request)
    	{
    		$this->getResponse()->setContentType('application/json');
     
    		$q = $request->getParameter('q');
    		$limit = $request->getParameter('limit');
     
    		$req = Doctrine::getTable('Article')->getDataWhere($q, $limit);
     
    		$results = array();
    		foreach ( $req as $result )
    		{
            	$results[$result->id] = $result->title;
    		}
     
    		print_r($results);
     
    		return $this->renderText(json_encode($results));         
    	}
    Et dans le model

    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
     
    public function getDataWhere($q, $limit=10)
    	{
    		$query= Doctrine_Query::Create()
    				->select('t.title, a.id')
    				->from('Article a')
    				->leftJoin('a.Translation t')
                    ->where('t.title LIKE ?',"%".$q."%")
                    ->limit($limit)
                    ->orderBy('t.title ASC')
                    ->execute()
                    ->getData();
     
           return $query;
     
    	}
    Voila sachant que la requete et lappel ajax tourne bien c'est laffichage qui pose probleme.

    Merci de ton aide

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2010
    Messages : 25
    Points : 5
    Points
    5
    Par défaut
    Au niveau de la dernière ligne de l'action qui fais le traitement pour l'appel ajax
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return $this->renderText(json_encode($results))
    J'ai un peu parcouru la fonction renderText() qui est dans sfAction.classs.php, il y'a un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return sfView::NONE;
    Serait ce pas à coz de ça?

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2010
    Messages : 25
    Points : 5
    Points
    5
    Par défaut
    Bon ya un truc bizard qui se passe. Pour certains articles les résultats s'affichent et pour d'autre rien ne s'affiche. Alors que la requete relatif au resultat que l'on obtient est indépendant de l'article selectionné.

  11. #11
    Membre averti Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 384
    Points
    384
    Par défaut
    Citation Envoyé par gohanfaye Voir le message
    Au niveau de la dernière ligne de l'action qui fais le traitement pour l'appel ajax
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return $this->renderText(json_encode($results))
    J'ai un peu parcouru la fonction renderText() qui est dans sfAction.classs.php, il y'a un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return sfView::NONE;
    Serait ce pas à coz de ça?
    nan, c'est tout à fait normal, étant donné qu'il s'agit d'une requête ajax, on n'affiche rien surtout !

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2010
    Messages : 25
    Points : 5
    Points
    5
    Par défaut
    Ha je retire ce que j'ai dit ca marche.

    Bon maintenant je veux essayer d'intégrer ce champ d'autocomplete dans le double liste qui est fournit par le ExtraPlugin.
    Comme ca au lieu d'avoir toute une liste d'article dans le unassocietted j'aurais juste le rendu du champ auto complete.

    L'idée sur laquelle je me lance c'est:
    dans sfWidgetFormSelectDoubleList.class.php
    le unassociatedWidget est du type sfWidgetFormSelect qui prend en option un choices
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    .....
    $associatedWidget = new sfWidgetFormSelect(array('multiple' => true, 'choices' => $associated), array('size' => $size, 'class' => $this->getOption('class_select').'-selected'));
        $unassociatedWidget = new sfWidgetFormSelect(array('multiple' => true, 'choices' => $unassociated), array('size' => $size, 'class' => $this->getOption('class_select')));
     
    .......
    donc lidée est de donner à l'option choices le rendu de l'autocomplete.

    voila si t'as une meilleure idée chui preneur.

    Merci

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2010
    Messages : 25
    Points : 5
    Points
    5
    Par défaut
    Bonjour

    Je ne vois pas bien ce que représente un objet callable php.
    Quelqu'un pourrait il m'éclairer .

    Merci

  14. #14
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Est dit d'un argument de fonction dans deux cas :
    • soit l'argument est un nom de fonction valide
    • soit l'argument est un tableau composé d'un nom d'objet et d'une fonction (statique ?) associé.


    Voir la fonction is_callable pour plus d'informations

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2010
    Messages : 25
    Points : 5
    Points
    5
    Par défaut
    Ok Merci pour le lien c plus claire maintenant.

    J'aurais une autre question. La je suis entrain de modifier la classe sfWidgetFormSelectDoubleList.class.php du plugin sfFormExtraPlugin dans le d'avoir pour le select des élément non associés une liste déroulante avec comme un système de pagination : genre on affiche les dix premiers éléments puis lorsqu'on clique sur un bouton les dix suivants.
    La je galér 1 peu pck je débute sur symfony et j'ai du mal à savoir ou mettre le jeavascript ou le récupérer etc.. On va dire ke je ne surf pas encore sur la vague MVC lol.

    Donc si quelqu'un a déja eu ce genre de modif à faire ou à une idée de cmt ca pouré se faire chui preneur. Merci

  16. #16
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Ouvre un nouveau sujet pour ton dernier message, là, il va passer à la trappe.

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2010
    Messages : 25
    Points : 5
    Points
    5
    Par défaut
    Ok merci

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 89
    Points : 64
    Points
    64
    Par défaut
    J'ai juste une petite question, j'aimerais tester ça pour mon filtre.

    Salut à tous.
    Je me tourne vers ce forum parce depuis deux jours je fais face à un problème. donc je travaille sur symfony et j'ai voulu créer un champs autocomplete à laide de sfWidgetFormDoctrineJQueryAutocomplete

    <?php use_javascript('/sfFormExtraPlugin/js/jquery.autocompleter.js') ?>
    <?php use_stylesheet('/sfFormExtraPlugin/css/jquery.autocompleter.css') ?>
    Où as-tu trouvé ces fichiers stp?

    Merci d'avance

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 89
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par sacricri Voir le message
    Bon, voici le code :
    dans la classe de formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $this->widgetSchema['id_profil']->setOption('renderer_class', 'sfWidgetFormDoctrineJQueryAutocompleter');
        $this->widgetSchema['id_profil'] = new sfWidgetFormDoctrineJQueryAutocompleter(
          array(
            'model' => "Profil",
            'url'   => url_for("@ajax_profil")
          ), array('size' => 100)
        );
    Quand tu dis, dans la classe de formulaires, c'est dans lib/filters, ou lib/forms ?

    Si c'est dans lib/forms, pourrais-tu m'expliquer pourquoi ?
    Car on s'en sert pour me filtre non ?

    Merci

  20. #20
    Membre averti Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 384
    Points
    384
    Par défaut
    Citation Envoyé par symff Voir le message
    Quand tu dis, dans la classe de formulaires, c'est dans lib/filters, ou lib/forms ?

    Si c'est dans lib/forms, pourrais-tu m'expliquer pourquoi ?
    Car on s'en sert pour me filtre non ?

    Merci
    Bonjour,

    Désolé, je ne passe plus beaucoup par ici ces temps-ci :/

    Si c'est dans ton filtre, tu le mets dans la classe de formulaire de ton filtre.

Discussions similaires

  1. probleme lors de l'execution d'un .exe créer avec py2exe
    Par stich51 dans le forum Général Python
    Réponses: 0
    Dernier message: 25/05/2010, 19h57
  2. Probleme avec multiple valeur d'un champ
    Par Delphieur dans le forum Oracle
    Réponses: 4
    Dernier message: 18/07/2007, 22h34
  3. Probleme avec plusiers valeur d'un champ
    Par Delphieur dans le forum Oracle
    Réponses: 3
    Dernier message: 17/07/2007, 15h58
  4. Réponses: 9
    Dernier message: 20/06/2007, 17h34
  5. PROBLEME avec limitation de longueur de champ...
    Par zarbydigital dans le forum Bases de données
    Réponses: 10
    Dernier message: 05/10/2005, 11h02

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