Amigos, vamos a explicar como poner un datepicker, o “seleccionador de fechas”, mas atractivo que el que nos ofrece symfony. Bien lo primero es instalar el plugin que contiene el widget, que se llama sfFormExtraPlugin, para ello introducimos el siguiente comando en la raiz del proyecto:
php symfony plugin:install sfFormExtraPlugin
Este plugin nos ofrece varios controles a parte del sfWidgetFormJQueryDate, que es el que vamos a gastar, como un widget de autocompletado o un wysiwyg.
Una vez tenemos instalado el plugin debemos descargarnos las librerias de jQuery ui aquí. Ahora hay que añadir los archivos al proyecto por lo que descomprimimos el archivo y copiamos los archivos “jquery-1.3.2.min.js” y “jquery-ui-1.7.2.custom.min.js” en la carpeta “/web/js/”. A continuación, le tenemos que decir a la aplicación que use estos archivos y coja el css para el widget. Entramos en el archivo “/apps/app/modules/config/view.yml” y en la linea de javascripts le decimos:
javascripts: [jquery-1.3.2.min.js, jquery-ui-1.7.2.custom.min.js]
y en la de css:
stylesheets: [main.css, ui-lightness/jquery-ui-1.7.2.custom.css]
Pues ya están los preparativos. Ahora configuramos nuestro form para que utilice el widget y a correr:
/lib/form/doctrine/IllidanForm.class.php
|
1 2 3 4 5 6 7 8 9 10 |
public function configure(){
$this->widgetSchema['fecha'] = new sfWidgetFormJQueryDate(array(
//Y lo configuramos
'config' => '{}',
'culture' => 'es',
'config' => "{firstDay: 1, dayNamesMin: ['Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa'],
monthNames: ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre']}",
'date_widget' => new sfWidgetFormDate(array('format' => '%year%-%month%-%day%'))
));
} |
En mi caso, este widget me dió un problema al utilizarlo y era que al hacer submit me quitaba el día de la selección por lo que daba un error de campo no válido. Conseguí subsanarlo cambiando la siguiente línea dentro de la clase del widget:
plugins/sfFormExtraPlugin/lib/widget/sfWidgetFormJQueryDate (linea 106)
|
1 |
jQuery("#%s option").attr("disabled", ""); |
por
|
1 |
jQuery(“#%s option”).removeAttr(“disabled”); |
No me acuerdo en que página encontre la solución, hace mucho tiempo, así que no puedo poner la referencia.
Pingback: Uso de Tiny MCE (wysiwyg) en Symfony | etreoblog.com
Buenas!
Voy a tratar de explicarme bien… He insertado sin problemas el datepicker gracias a vuestro ejemplo pero ahora lo que quiero hacer es insertar los datepickers en el filtro de un modulo, es decir, los selectores de fecha con los que puedo filtrar los registros entre dos fechas. El caso es que te divide el created_at y el updated_at en dos: un from y un to para poder poner un intervalo de fechas… Ese es el kit, ya que si inserto el datepicker en el campo created_At por ejemplo, solo me muestra un campo, con lo que no puedo poner un intervalo.
Espero haberme explicado con claridad y que podais ayudarme.
Un saludo y enhorabuena por el blog.
Albertuni
Hola Albertuni. Gracias por la enhorabuena. Dejame decirte que he estado un buen rato para resolver el problema que planteas, pero por fin he conseguido resolverlo y al final resulta que la solución es lo mas simple del mundo. Te pongo lo que tienes que hacer, abres el filter que quieres modificar y:
“/lib/filter/doctrine/PruebaFormFilter.class.php”
public function configure{
.
.
.
/*Creamos el widget como sfWidgetFormFilterDate, en mi caso lo he hecho sobre el created_at, y dentro de este configuras las opciones ‘from_date’ y ‘to_date’ que son cada una de las opciones del rango de la fecha.*/
$this->widgetSchema['created_at'] = new sfWidgetFormFilterDate(array(
‘from_date’ => new sfWidgetFormJQueryDate(array(
‘config’ => ‘{}’,
‘culture’ => ‘es’,
‘config’ => “{firstDay: 1, dayNamesMin: ['Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa'],
monthNames: ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre']}”,
‘date_widget’ => new sfWidgetFormDate(array(‘format’ => ‘%year%-%month%-%day%’))
)),
‘to_date’ => new sfWidgetFormJQueryDate(array(
‘config’ => ‘{}’,
‘culture’ => ‘es’,
‘config’ => “{firstDay: 1, dayNamesMin: ['Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa'],
monthNames: ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre']}”,
‘date_widget’ => new sfWidgetFormDate(array(‘format’ => ‘%year%-%month%-%day%’))
)),
‘with_empty’ => false));
Bueno y con esto deberías de poder solucionarlo. Un saludo y gracias por visitarnos figura.
Funciona a la perfeccion! muchas gracias!!!
Pingback: A week of symfony #265 (23->29 January 2012) « We are php
Hola, tuve el mismo problema que Albertuni he hice lo propuesto en el blog, pero el problema es se me muestra el datepicker detrás del formulario de filtros, no sé si me hago explicar bien. Agradezco ayuda
Buenas Yuly, explícate mejor que no te acabo de entender.