Poner un calendar para la fecha

Para poner un calendar en una fecha tenemos varias opciones. Quizá la más sencilla sea incluir jquery y jquery ui. Para hacer esto debemos añadir las siguientes líneas en default.ctp:

 echo $this->Html->script("https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js");
 echo $this->Html->css('https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css');
 echo $this->Html->script("https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js");

Una vez hecho, sólo tenemos que cambiar la vista donde esté nuestra fecha, haciéndola de tipo texto y añadiendo el datepicker:

<script>
$(function() {
 $("#calendario").datepicker({
 dateFormat: "dd-mm-yy",
 });
});
</script>
......
 echo $this->Form->input('fecha', array(
 'id' => 'calendario',
 'type' => 'text'
 ));

Para que nos convierta la fecha al formato de mysql tenemos que ponerlo en el beforesave del modelo:

  public function beforeSave($options = array()) {
 if (isset($this->data['Autor']['fecha'])) {
 $this->data['Autor']['fecha'] = date("Y-m-d", strtotime($this->data['Autor']['fecha']));
 }
 
 }

 public function afterFind($results, $primary = false) {

 foreach ($results as $key => $val) {
 if (isset($results[$key]['Autor']['fecha'])) {
 $results[$key]['Autor']['fecha'] = date("d-m-Y", strtotime($results[$key]['Autor']['fecha']));
 }
 }
 return $results;
 }