Programando un formulario en Drupal

  • Posted on: 17 June 2014
  • By: santy

Drupal ofrece una interface y una serie de módulos con los que podemos implementar un gran numero de funciones, pero no siempre encontramos el módulo necesario para suplir la tarea concreta. Por ello esta vez voy a explicar como crear un módulo que nos cree un bloque que contenga un formulario.

    Para ello los pasos a seguir son:
  • Crear el módulo
  • Crear el bloque
  • Crear el formulario
  • Integrar el formulario en el bloque

Creamos el módulo llamado Form reservas, para ello lo primero que vamos a hacer es crear el archivo form_reservas.info y asignarle nombre, proyecto y depencias.

name = Form Reservas
description = Crea un bloque para reservas
package = Pro Drupal Development
core = 7.x
version = VERSION
files[]=form_reservas.module
dependencies[] = date_popup

Ya tenemos el módulo creado, ahora a por el archivo form_reservas.module que contendrá las funciones de nuestro módulo

Función que crea el bloque:

function form_reservas_block_info(){
$blocks['bloque_form_reservas'] = array(
// Título del bloque en la configuración del administrador
'info' => t('Bloque Reservas'),
'cache' => DRUPAL_NO_CACHE,
);
return $blocks;
}

Función que da visibilidad al bloque e integra el formulario. OJO AQUÍ, para integrar el formulario se usa la orden drupal_get_form que llama a la función form_reservas_form

function form_reservas_block_view($delta = '') {
$block = array();
switch ($delta) {
case 'bloque_form_reservas':
// Título del bloque.
$block['subject'] = t('Bloque Reservas');
// Función que retorna el contenido o función que se quiere en el bloque.
$block['content'] = drupal_get_form('form_reservas_form');
break;
}
return $block;
}

Creamos el formulario, integramos los campos tipo date en el, previamente definidas las dependencias en el archivo form_reservas.info


function form_reservas_form($form, &$form_state) {
$form['date'] = array(
'#title' => t('Arrival Date'),
'#type' => 'date_popup', // Provided by the date_popup module
'#date_format' => 'j F Y', // Uses the PHP date() format - http://php.net/manual/en/function.date.php
'#date_year_range' => '0:+2', // Limits the year range to the next two upcoming years
'#required' => TRUE,
'#default_value' => date('Y-m-d', time()), // Default value must be in 'Y-m-d' format.
);
$form['date_2'] = array(
'#title' => t('Departure Date'),
'#type' => 'date_popup', // Provided by the date_popup module
'#date_format' => 'j F Y', // Uses the PHP date() format - http://php.net/manual/en/function.date.php
'#date_year_range' => '0:+2', // Limits the year range to the next two upcoming years
'#required' => TRUE,
'#default_value' => date('Y-m-d', time()), // Default value must be in 'Y-m-d' format.
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Book Now'),
);
return $form;
}

Enviamos los datos, en nuestro caso lo enviamos por URL a una página interna.

function form_reservas_form_submit(&$form, &$form_state) {
$start_date = new DateTime($form_state['values']['date']);
$end_date = new DateTime($form_state['values']['date_2']);
$start_date = $start_date->format('Y-m-d');
$end_date = $end_date->format('Y-m-d');
drupal_goto('enquiry/' . $start_date . '/' . $end_date .'/1');
}

El motivo de enviar el formulario via URL es debido a que he creado el módulo para que se integre con el módulo rooms de Drupal, y necesitaba que se enviaran los datos por URL para que los recogiera la página del formulario,
y esta era la manera más sencilla.

Descargar el archivo

Añadir nuevo comentario

Plain text

  • No se permiten etiquetas HTML.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Saltos automáticos de líneas y de párrafos.
CAPTCHA
Esta pregunta es para comprobar si usted es un visitante humano y prevenir envíos de spam automatizado.