Petit guide pratique pour sfFormExtraPlugin : Différence entre versions
(→Intro) |
|||
Ligne 3 : | Ligne 3 : | ||
=== Intro === | === Intro === | ||
− | Avoir un input "text" qui aille chercher des enregistrements en base est extrêmement utile lorsqu'on veut trouver une parade à un select bien trop volumineux. Pour se faire, la solution se trouve, au moins partiellement dans le plugin dont il est question ici : sfFormExtraPlugin. Elle se nomme "sfWidgetFormJQueryAutocompleter". | + | Avoir un input "text" qui aille chercher des enregistrements en base est extrêmement utile lorsqu'on veut trouver une parade à un select bien trop volumineux. Pour se faire, la solution se trouve, au moins partiellement dans le plugin dont il est question ici : [http://www.symfony-project.org/plugins/sfFormExtraPlugin sfFormExtraPlugin]. Elle se nomme "sfWidgetFormJQueryAutocompleter". |
=== Trouver le bon widget === | === Trouver le bon widget === |
Version du 14 avril 2009 à 21:43
Sommaire
sfWidgetFormDoctrineJQueryAutocompleter
Intro
Avoir un input "text" qui aille chercher des enregistrements en base est extrêmement utile lorsqu'on veut trouver une parade à un select bien trop volumineux. Pour se faire, la solution se trouve, au moins partiellement dans le plugin dont il est question ici : sfFormExtraPlugin. Elle se nomme "sfWidgetFormJQueryAutocompleter".
Trouver le bon widget
Si vous fonctionnez avec Propel, rien à redire de plus, allez voir le tutoriel dédié, et tout sera réglé. Pour ceux qui sont sous Doctrine, la chose se complique à l'heure où j'écris ces lignes : il n'existe pas officiellement de widget spécialisé pour Doctrine, ce qui nous simplifierai quand même beaucoup la tâche. Allons donc fouiller dans le "trac" de Symfony : http://trac.symfony-project.org/ticket/6012
Récupérez le fichier attaché et ajoutez-le dans "lib/widget/". Videz le cache avec un "php symfony cc". Vous avez votre widget pour Doctrine. Mais ce n'est que le début.
Les mains dans le code
Le formulaire
Dans votre classe formulaire correspondante, effectuez les ajouts suivants (à adaptés à votre schéma, ici le module courant étant "individu" et les objets recherchés sont de la classe "Entreprise") à sa méthode "configure()" :
public function configure() { $this->widgetSchema['entreprise_id']->setOption('renderer_class', 'sfWidgetFormDoctrineJQueryAutocompleter'); $this->widgetSchema['entreprise_id']->setOption('renderer_options', array( "model" => "Entreprise", "url" => "individu/ajax", )); }
L'action
Nous voyons ici que l'action appelée pour le module "individu" est "ajax". Il nous faut donc gérer cette action, en allant dans le fichier "apps/backend/modules/individu/actions/actions.class.php" et en créant la fonction "executeAjax()" de la manière suivante :
public function executeAjax($request) { $this->getResponse()->setContentType('application/json'); $request = Doctrine::getTable("Entreprise")->createQuery() ->where("nom_courant ILIKE ?","%".$request->getParameter('q')."%") ->limit($request->getParameter('limit')) ->execute() ->getData(); $entreprises = array(); foreach ( $request as $entreprise ) $entreprises[$entreprise->id] = (string) $entreprise; return $this->renderText(json_encode($entreprises)); }
Voilà, votre widget est chaud et prêt à servir !