Como criar um formulário GET

10

Por exemplo, um formulário de filtro nas áreas administrativas pode ser melhor o GET, dessa forma eles podem ser marcados como favoritos e os filtros podem ser mantidos nas páginas do pager.

Como alguém pode usar melhor o form_api para esses formulários? Os ganchos _validate serão enviados? O gancho _submit pode ser omitido?

Por exemplo, os filtros expostos a visualizações funcionam dessa maneira; Mas o código nas visualizações que lidam com isso é complicado e complexo, complexo demais para ser usado como um bom exemplo para o desenvolvimento de interfaces personalizadas com formulários de filtro simples.

berkes
fonte
Eu não entendo a pergunta. Você pode criar ou ligar qualquer forma para obter dados GET, se é isso que você quer dizer.
Letharion
Atualizei a pergunta com uma referência a um exemplo.
berkes

Respostas:

11

Use o parâmetro #method do formulário como este:

<?php
  $form['#method'] = 'get';
?>
Alexandru Badiu
fonte
Certo. Essa é uma parte. Mas e a validação, envie ganchos e assim por diante. São o conjunto?
Berkes
2
O método de um formulário deve ser definido para ser postado, para que as funções de envio e validação sejam chamadas implicitamente.
Lester Peabody
Relacionado: form_datachaves always_processe methodtambém pode ser definido na definição do formulário, o que resulta na validação de + ganchos de processo em execução. Mas não consigo encontrar um exemplo de uso para isso e continuo form_statecontendo uma methodchave definida como post!
Artfulrobot
4

Caso alguém se depare com essa questão, este é um exemplo mais completo da vida real, mas muito simples :)

você vai querer definir o formulário

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

e então você pode usá-lo

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

A última linha pode ser, por exemplo, um bloco ['conteúdo'] ou o que você precisar.

mojzis
fonte
Para formulários de pesquisa, você também pode colocar $form_state['redirect'] = false;no manipulador de envio para desativar o redirecionamento após o envio do formulário.
Ali Gangji 14/09/14