[solucionado]Agregar un campo de formulario del tipo fecha

Hola, estoy tratando de construir una personalización que de de alta en una tabla propia un solo registro.
En el formulario quiero poner un elemento del tipo fecha, ¿Se puede con la versión de Zend Forms que sea tipo fecha? Se puede hacer que muestre el control tipo calendario? Si no es posible, al agrear el elemento al formulario tipo ‘text’…como se implementa el control de la validación de los valores? que sea una fecha válida y/o que esté dentro de una rango ?
En el builder del form tengo estos métodos implementados

function get_configuracion_layout_grilla()
    {
        return array(
            array(
                'grupo' => 'tramites',
                'titulo' => trans('tit_abm_tramites'),
                'filas' => array(
                    array('fecha' => array('span' => 9)),
                )
            ),
        );
    }

    function get_action()
    {
        // se posteará a la acción index del controlador
        return kernel::vinculador()->crear('abm_tramites', 'index');
    }

    function generar_definicion(guarani_form $form, fabrica_formularios $fabrica)
    {
        $form->add_accion($fabrica->accion_boton_submit('agregar', kernel::traductor()->trans('abm_tramites_btn_agregar')));

        $form->add_elemento($fabrica->elemento('fecha', array(
                // notar el validador TIPO_ALPHA. Esto luego lo usaremos para ver el manejo de errores
                form_elemento_config::filtro            => validador::TIPO_DATE,
                form_elemento_config::obligatorio       => true,
                form_elemento_config::elemento          => array('tipo' => 'text'),
                form_elemento_config::largo             => 10
        )));
    }

    function get_id_html()
    {
        return 'formulario_tramites';
    }

Gracias

Hola Damian,

¿Esto en que versión de 3W?

Suponiendo que sea el G2:

fíjate como se esta haciendo en la operación Fechas de examen, en el archivo src/siu/operaciones/fecha_examen/filtro/builder_form_filtro.php campos fecha_desde y fecha_hasta:


$form->add_elemento($fabrica->elemento_fecha('fecha_desde', array(
            form_elemento_config::label => ucfirst(kernel::traductor()->trans("fecha_examen.filtro_fecha_desde")),
            form_elemento_config::filtro => validador::TIPO_DATE,
            form_elemento_config::obligatorio => false,
            form_elemento_config::placeholder	=> kernel::traductor()->trans('fecha_examen.filtro_seleccione'),
            form_elemento_config::clase_css => 'date filtros_fechas',
)));

saludos.

Hay otro ejemplo mas complejo en la operación Encuestas respondidas del perfil alumno:

Fíjate en el archivo src/siu/operaciones/encuestas_respondidas/filtros/builder_form_filtro.php, allí se crea la fecha desde y hasta:


        $fecha_desde = $form->add_elemento($fabrica->elemento_fecha('fecha_desde', array(
            form_elemento_config::label			=> kernel::traductor()->trans('encuestas_respondidas.fecha_desde'),
            form_elemento_config::obligatorio	=> false,
            form_elemento_config::placeholder	=> kernel::traductor()->trans('encuestas_respondidas.filtro_seleccione'),
            form_elemento_config::clase_css => 'date',
            form_elemento_config::readonly => true,
        )));
        $fabrica->elemento_decorar_boton_limpiar($fecha_desde, 'limpiar_fecha_desde');

        $fecha_hasta = $form->add_elemento($fabrica->elemento_fecha('fecha_hasta', array(
            form_elemento_config::label			=> kernel::traductor()->trans('encuestas_respondidas.fecha_hasta'),
            form_elemento_config::obligatorio	=> false,
            form_elemento_config::placeholder	=> kernel::traductor()->trans('encuestas_respondidas.filtro_seleccione'),
            form_elemento_config::clase_css => 'date',
            form_elemento_config::readonly => true,
        )));
        $fabrica->elemento_decorar_boton_limpiar($fecha_hasta, 'limpiar_fecha_hasta');

luego en src/siu/operaciones/encuestas_respondidas/filtros/pagelet_filtros.js debajo de donde dice /* Datepickers */ se le da todo el comportamiento JS, el mismo se hace con la librería Jquery UI (la misma ya se encuentra cargada en el proyecto), ver:

https://jqueryui.com/datepicker/
http://api.jqueryui.com/datepicker/

saludos.

Gracias Leonel, ahora los reviso.
G3w 2.9.3

Saludos

Usé la segunda opción agregando el archivo javascript al formulario para configurar el elemento tipo fecha usando datepickers.
Por si a alguien le sirve, tener cuidado en la construcción del formulario de que la cantidad de elementos del arreglo para la entrada ‘filas’:

function get_configuracion_layout_grilla()
    {
        return array(
            array(
                'grupo' => ',
                'titulo' => ucfirst(trans('entrada_en_mensajes.es.php')),
                'filas' => array(
                    array('fila_1' => array('span' => 9)),
                    array('fila_2' => array('span' => 9)),
                   //.....................
                    array('fila_i' => array('span' => 9)),
                   //.....................
                    array('fila_n' => array('span' => 9)),
                )
            ),
        );
    }

Se corresponda con la cantidad de veces que se llama al método para agregar elementos del formulario (add_elemento()):

function generar_definicion(guarani_form $form, fabrica_formularios $fabrica) 
    {
        //....        
        $form->add_elemento($fabrica->elemento_xxxx('nombre_1', array(
                form_elemento_config::label => ucfirst(kernel::traductor()->trans("entrada_en_mensajes.es.php")),
         //...configuración del elemento
         )));
        //.....
        $form->add_elemento($fabrica->elemento_xxxx('nombre_i', array(
                form_elemento_config::label => ucfirst(kernel::traductor()->trans("entrada_en_mensajes.es.php")),
         //...
         )));
         //...
        $form->add_elemento($fabrica->elemento_xxxx('nombre_n', array(
                form_elemento_config::label => ucfirst(kernel::traductor()->trans("entrada_en_mensajes.es.php")),
         //...
         )));
    }

Ya que a mi me paso por despistado que quería agregar elementos solamente en generar_definicion() sin especificar en get_configuracion_layout_grilla(). No arroja errores aparentes pero no agrega el elemento.

Saludos

Hola Damian, gracias por el aporte!!!

¿pudiste solucionarlo o necesitas alguna otra ayuda? en tal caso no dudes en consultar.

Reitero que los DatePickers que utilizamos son los de jQuery UI, por defecto es un DatePicker simple para seleccionar una fecha, pero se puede personalizar vía JavaScript utilizando esta API y estos ejemplos.

saludos.

Hola, si se logró lo buscado.
Saludos