Cómo crear un formulario GET

10

Por ejemplo, un formulario de filtro en las áreas de administración puede ser formularios GET, de esa manera se pueden marcar como marcadores y se pueden mantener los filtros en las páginas del localizador.

¿Cómo se puede usar form_api para tales formularios? ¿Se enviarán los ganchos _validate? ¿Se puede omitir el gancho _submit?

Por ejemplo, los filtros expuestos a vistas funcionan de esta manera; Pero el código en las vistas que manejan esto es complicado y complejo, demasiado complejo para ser utilizado como un buen ejemplo para desarrollar interfaces personalizadas con formas de filtro simples.

Berkes
fuente
No entiendo la pregunta. Puede crear o enganchar cualquier forma para obtener datos GET, si eso es lo que quiere decir.
Letharion
He actualizado la pregunta con una referencia a un ejemplo.
Berkes

Respuestas:

11

Use el parámetro #method del formulario de esta manera:

<?php
  $form['#method'] = 'get';
?>
Alexandru Badiu
fuente
Por supuesto. Esa es una parte. Pero, ¿qué hay de la validación, enviar ganchos, etc.? Son el conjunto?
Berkes
2
El método de un formulario debe configurarse para publicar para enviar y validar funciones para que se invoquen implícitamente.
Lester Peabody el
Relacionado: las form_dataclaves always_processy methodtambién se pueden establecer en la definición del formulario, lo que da como resultado la validación + proceso de ganchos que se ejecutan. ¡Pero no puedo encontrar un ejemplo de uso para esto y todavía termino form_stateconteniendo una methodclave establecida en post!
artfulrobot
4

En caso de que alguien tropiece con esta pregunta, este es un ejemplo más completo de la vida real, pero muy simple :)

querrás definir el formulario

function YOURMODULE_search_form($form, &$form_state) {
  $form['#method'] = 'get';
  $form['#action'] = '/search';
  $form['#attributes'] = array('class' => array('mymod-search'));
  $form['search'] = array(
    '#type' => 'textfield',
    '#size' => 20,
  );
  return $form;
}

y luego puedes usarlo

$searchform = drupal_get_form('YOURMODULE_search_form');
$output .= drupal_render($searchform);

La última línea podría ser, por ejemplo, un bloque ['contenido'] o lo que sea que necesite.

mojzis
fuente
Para los formularios de búsqueda, es posible que también desee incluir $form_state['redirect'] = false;el controlador de envío para deshabilitar la redirección después de enviar el formulario.
Ali Gangji