You want to use the sfWidgetFormDateJQueryUI widget but you cannot configure it to display the date in your culture ?
I had the same problem, and there is what I did to fix it.
I start to override the sfWidgetFormDateJQueryUI class to add a “format_date” option. Add a new class here lib/widget/adinWindgetFormDateJQueryUI.class.php and override the configure fonction to add the format_date option.
protected function configure($options = array(), $attributes = array()) { $this->addOption('format_date', null); parent::configure($options, $attributes); }
In the render function, format the value
if($this->getOption('format_date') != null){ $dateFormat = new sfDateFormat(); $value = $dateFormat->format($value, $this->getOption('format_date')); }
(The complete class source is at the end of this post.)
In your formClass, configure the widget :
class DemandeForm extends BaseDemandeForm { public function configure() { $this->widgetSchema['date_creation'] = new adinWidgetFormDateJQueryUI( array("change_month" => true, "change_year" => true, "culture" => 'fr', "show_button_panel" => true, "format_date" => 'dd/MM/y' //define here format ) ); $this->validatorSchema['date_creation'] = new sfValidatorDate( array("date_format" => '~(?P<day>\d{2})/(?P<month>\d{2})/(?P<year>\d{4})~' , //regex, "date_output" => "Y-m-d", //format the value after validation to send to BDD "required" => true ) ); } }
Here the complete adinWidgetFormDateJQueryUI source code
<?php class adinWidgetFormDateJQueryUI extends sfWidgetFormDateJQueryUI { protected function configure($options = array(), $attributes = array()) { $this->addOption('format_date', null); parent::configure($options, $attributes); } /** * @param string $name The element name * @param string $value The date displayed in this widget * @param array $attributes An array of HTML attributes to be merged with the default HTML attributes * @param array $errors An array of errors for the field * * @return string An HTML tag string * * @see sfWidgetForm */ public function render($name, $value = null, $attributes = array(), $errors = array()) { $attributes = $this->getAttributes(); $input = new sfWidgetFormInput(array(), $attributes); if($this->getOption('format_date') != null){ $dateFormat = new sfDateFormat(); $value = $dateFormat->format($value, $this->getOption('format_date')); } $html = $input->render($name, $value); $id = $input->generateId($name); $culture = $this->getOption('culture'); $cm = $this->getOption("change_month") ? "true" : "false"; $cy = $this->getOption("change_year") ? "true" : "false"; $nom = $this->getOption("number_of_months"); $sbp = $this->getOption("show_button_panel") ? "true" : "false"; if ($culture!='en') { $html .= <<<EOHTML <script type="text/javascript"> $(function() { var params = $.datepicker.regional['$culture']; params.changeMonth = $cm; params.changeYear = $cy; params.numberOfMonths = $nom; params.showButtonPanel = $sbp; $("#$id").datepicker(params); }); </script> EOHTML; } else { $html .= <<<EOHTML <script type="text/javascript"> $(function() { var params = { changeMonth : $cm, changeYear : $cy, numberOfMonths : $nom, showButtonPanel : $sbp }; $("#$id").datepicker(params); }); </script> EOHTML; } return $html; } }
Don’t forget to run
php symfony cc
to clear your cache and enable this new class on prod environment.