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; }