如何创建一个GET表格


10

例如,在管理区域上的过滤器表单最好是GET表单,这样它们就可以添加书签,并且可以在整个分页中维护过滤器。

如何最好地将form_api用于此类表单?_validate挂钩会被提交吗?可以省略_submit挂钩吗?

例如,暴露于视图的过滤器以这种方式工作;但是视图中处理此问题的代码非常复杂,太复杂了,以至于无法在开发具有简单过滤器形式的自定义接口时用作示例。


我不明白这个问题。您可以通过创建或hook_alter任何形式来获取GET数据。
Letharion 2012年

我已经参考一个例子来更新了这个问题。
berkes 2012年

Answers:


11

使用如下形式的#method参数:

<?php
  $form['#method'] = 'get';
?>

当然。这是一部分。但是验证,提交钩子等等。摆好了吗
berkes 2012年

2
表单的方法必须设置为post,以便它的提交和验证函数被隐式调用。
Lester Peabody

相关:form_dataalways_processmethod也可以在表单定义中设置,从而导致运行validate + process挂钩。但我找不到用于此目的的示例,但最终仍然form_state包含一个method设置为post!的键。
artfulrobot 2014年

4

以防万一有人偶然发现这个问题,这是一个更完整的现实生活,但非常简单的示例:)

您将需要定义表格

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

然后你可以使用它

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

最后一行可以是block ['content']或您需要的任何内容。


对于搜索表单,您可能还需要放入$form_state['redirect'] = false;提交处理程序以在提交表单后禁用重定向。
阿里Gangji 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.