Sostituire l’helper “input_date_tag()” in Symfony 1.1

Come molti di voi avranno appreso, a partire da symfony 1.1 gli helper javascript (e relativi ai form) sono (imho giustamente) da considerarsi deprecati. Questo perché rendono la scrittura (ma anche l’utilizzo) del codice più complesso del dovuto stravolgendo (e forzando) logiche non sempre corrette.

Tale scelta ha però portato ad alcune mancanze, prima tra tutte l’impossibilità di definire un behavior rich per quelle form più spesso usate, una per tutte quella delle date.

Un’utile soluzione è quindi quella di includere all’interno della propria applicazione UI JQuery e nello special modo il modulo datepicker.

Supponiamo che all’interno della classe che definisce la form del nostro modello esista un widget definito come sfWidgetFormDateTime(). Per sostituire alla scomoda select multipla un calendario javascript dovremmo così agire:

1
2
3
4
5
6
7
8
class EventForm extends BaseEventForm
{
  public function configure()
  {    
    $this->widgetSchema['date'] = new sfWidgetFormInput();
    $this->validatorSchema['date'] = new sfValidatorDateTime( array('with_time' => false) );    
   }
}

definiamo quindi la vista che mostrerà la nostra form (supponendo di includere nel layout della nostra applicazione jquery.js e ui.js.

1
2
3
4
5
6
7
8
9
<style type="text/css">.embed + img { position: relative; left: -21px; top: -1px; }</style>
<script type="text/javascript">
$("#event_date").datepicker({ 
    showOn: "button", 
    buttonImage: "/web/images/calendar.gif", 
    buttonImageOnly: true 
}).addClass("embed");
</script>
<?php echo $form; ?>

et voilà: un bellissimo calendario javascript tornerà a rendere “felici” le nostre applicazioni web 2.0 😉

Leave a Reply

Your email address will not be published. Required fields are marked *