Bonjour à tous,
Je viens chercher un peu d'aide sur un problème d’auto complétion sur un champs.
Je m'explique. J'ai un formulaire qui me permet d'entrée des produits en stock.
Lorsque l'utilisateur veut entrer un produit en stock, celui tape les deux ou trois premier chiffres de son code article et un champs auto complété affiche les articles correspondant à sa saisie. Jusqu'ici, pas de problème, tout fonction correctement.
Mon problème vient lorsque le formulaire ne passe pas correctement la validation. Par exemple, lorsque l'utilisateur saisie une quantité négative dans un autre champs pour l'entrée en stock.
Le champs auto complété affiche le code article et son libelle lors de la saisie mais réaffiche l'id à enregistrer après validation du formulaire alors que je voudrais le recharger avec le code article et son libellé mais garder comme valeur de renvoi l'id de l'article.
je n'arrive pas à réaliser ce mode de fonctionnement pour le bind de mon champs autocomplété. Pourriez - vous me dire comment je peux coder ce mode de fonctionnement ?
Voici mon formulaire :
La requete pour l'autocomplétion :
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 $this->setWidgets(array( 'id' => new sfWidgetFormInputHidden(), 'm_mag' => new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('Magasins'), 'key_method' => 'getMId', 'order_by' => array('m_nom', 'asc'), 'add_empty' => false)), 'm_codearticle' => new sfWidgetFormJQueryAutocompleter(array( 'url' => url_for('/mouvement/codeArticleAutoComplete'), 'config' => '{scrollHeight: 200, minChars: 1, delay: 500}'), array('size' => '60')), 'm_qte' => new sfWidgetFormInputText(), )); $this->setValidators(array( 'id' => new sfValidatorChoice(array('choices' => array($this->getObject()->get('id')), 'empty_value' => $this->getObject()->get('id'), 'required' => false)), 'm_mag' => new sfValidatorDoctrineChoice(array('model' => $this->getRelatedModelName('Magasins'), 'column' => 'm_id', 'required' => true)), 'm_codearticle' => new sfValidatorString(array('required' => true)), 'm_qte' => new sfValidatorInteger(array('min' => 1, 'max' => 9999, 'required' => true),array('min'=>'Valeur min : 1', 'max'=>'Valeur max : 9999', 'invalid' => '"%value%" n\'est pas un entier.')), ));
Merci d'avance aux personnes qui prendront le temps de me répondre.
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
27
28
29 public function executeCodeArticleAutoComplete(sfWebRequest $request) { $this->getResponse()->setContentType('application/json'); $req = sprintf(" SELECT a.a_id as id_code_article, s.s_id as code_article, s.s_libelle as libelle_article FROM articles a RIGHT JOIN servals s ON a.a_id = s.id WHERE a.a_mag like '%s' and (s.s_id like '%%%s%%' or s.s_libelle like '%%%s%%') GROUP BY s.id LIMIT %s", sfContext::getInstance()->getUser()->getAttribute("default_mag"), $request->getParameter('q'), $request->getParameter('q'), $request->getParameter('limit')); $statement = Doctrine_Manager::getInstance()->connection(); $codes_articles = $statement->execute($req)->fetchAll(); $response = array(); if($codes_articles != array()) { foreach($codes_articles as $code_article) $response[$code_article['id_code_article']] = $code_article['code_article']." - ".$code_article['libelle_article']; } else $response[0] = "AUCUN RESULTAT TROUVE"; return $this->renderText(json_encode($response)); }
Partager