14.04.2009 • Samuel Breton
Je vais vous montrer dans cet article comment mettre en place rapidement un datePicker jQuery dans un formulaire Symfony 1.2
Pré-requis
- Plugin sfFormExtraPlugin installé : sfFormExtraPlugin
Fichiers externes
- Télécharger jQuery UI
(jquery-1.3.2.min.js, jquery-ui-1.7.1.custom.min.js)Vous pouvez télécharger une version “customizée” de jQuery UI ici :
Télécharger JQuery UI - Version française
(uidatepicker-fr.js)Vous trouverez le patch français de ce plugin ici :Datepicker jQuery en français - Intégration dans Symfony
- JS
Copiez les fichiers :
[jquery UI]/js/jquery-1.3.2.min.js
[jquery UI]/js/jquery-ui-1.7.1.custom.min.js
uidatepicker-fr.js
directement dans [votre_projet]/web/js - CSS
- Copiez le fichier :
[jquery UI]/css/jquery-ui-1.7.1.custom.css dans :
[votre_projet]/web/css. - !! Attention !! :
J’ai dû remplacer toutes les occurrences de :
url(images/ par :
url(../images/
- Copiez le fichier :
- Images
N’oubliez pas de copier le contenu de :
[jquery UI]/css/smoothness/images dans :
[votre_projet]/web/images
- JS
View.yml
N’oubliez pas de faire référence aux fichiers externes dans le view :
default:
http_metas:
content-type: text/html
metas:
#title: symfony project
#description: symfony project
#keywords: symfony, project
#language: en
#robots: index, follow
stylesheets: [main.css, jquery-ui-1.7.1.custom.css]
javascripts: [jquery-1.3.2.min.js, uidatepicker-fr.js, jquery-ui-1.7.1.custom.min.js]
has_layout: on
layout: layout
sfWidgetFormJQueryI18nDate.class.php
J’ai modifié la classe sfWidgetFormJQueryDate pour qu’elle soit compatible avec un format de date français.
De plus, on peut facilement configurer les options du widget jQuery.
- Code source :
Fichier : sfWidgetFormJQueryI18nDate.class.php
Chemin : /plugins/sfFormExtraPlugin/lib/widget/EOF , $prefix, $id, $this->generateId($name.'[day]'), $this->generateId($name.'[month]'), $this->generateId($name.'[year]'), $prefix, $this->generateId($name.'[day]'), $this->generateId($name.'[month]'), $this->generateId($name.'[year]'), $id, min($this->getOption('years')), max($this->getOption('years')), $prefix, $prefix, $this->getOption('config'), $image, $this->getOption('culture') ); } }
- Explication des modifications :
- Ligne 20 :
Notre widget dérive désormais de sfWidgetFormI18nDateclass sfWidgetFormJQueryDate extends sfWidgetFormI18nDate
- Lignes 40, 41 et 42:
On ajoute les options “config”, “culture” et “years” avec le paramètre “options” de la fonction “configure” :$this->addOption('config', $options["config"]); $this->addOption('culture', $options["culture"]); $this->addOption('years', $options["years"]);
- Lignes 85 et 86
- Il faut inverser l’ordre du jour et du mois pour être compatible avec un format français, ce qui revient dans un sprintf, à changer l’ordre des lignes dans le code.
- Il faut faire un parseInt sur le mois pour transformer “01” en “1”, parseInt est la fonction javascript permettant de caster une chaîne de caractères en Integer :
Premier paramètre : la chaîne à caster (ici : date.substring(3, 5) )
Deuxième paramètre : Le système numérique à utiliser (ici décimal : 10)
- Ligne 20 :
\$("#%s").val(date.substring(0, 2));
\$("#%s").val(parseInt(date.substring(3, 5), 10));
- Lignes 95 et 109
- On passe les options directement dans le premier argument.
Le %s de la ligne 95 correspond au $this->getOption(‘config’) de la ligne 109
Le %s de la ligne 98 correspond au $this->getOption(‘culture’) de la ligne 109 - Ligne 109 : passage des options et da la culture au widget.
$prefix, $prefix, $this->getOption('config'), $image, $this->getOption('culture')
- On passe les options directement dans le premier argument.
Exemple d’utilisation
- Schéma
person: columns: [...] birthday: type: timestamp [...]
- Formulaire (Instanciation du widget)
[...] public function configure() { for($i = 1900; $i<2010; $i++) { $years[$i] = $i; } $this->widgetSchema['birthday'] = new sfWidgetFormJQueryI18nDate( array('config' => 'yearRange: \'1900:2009\', changeYear: true, changeMonth: true,', 'culture' => 'fr', 'years'=> array_combine($years, $years)) ); } [...]
- Aperçu
Sources
partager
Plus d’articles !
Plongez dans nos articles pour découvrir des insights captivants !