如何从Drupal表单中的选择字段中删除不必要的选项?

时间:2010-12-28 20:50:24

标签: php drupal

我正在使用better_exposed_filters模块为视图创建一组公开的过滤器。其中一个过滤器显示为选择字段,我希望该字段仅显示实际与数据库中内容关联的选项。

目前,我正在使用hook_form_alter()方法执行此操作。为简化起见,在以下示例中,该字段称为“foo”,具有该字段的内容类型称为“bar”:

function my_module_form_alter(&$form, $form_state, $form_id) {

  // Get all the values of foo that matter
  $resource = db_query('select distinct field_foo_value from {content_type_bar}');
  $foo = array();
  while($row = db_fetch_object($resource)) {
    $foo[$row->field_foo_value] = $row->field_foo_value;
  }

  $form['foo']['#options'] = $foo;
}

这很好用 - 表单只显示我想要显示的选项。不幸的是,视图最初并没有显示任何内容,我也收到以下错误消息:

  

检测到非法选择。请联系网站管理员。

我用表单过滤选项后,一切似乎都运行正常。 有谁知道我怎么能解决这个问题?如果需要的话,我会采用完全不同的方法来清除过滤器选项,或者我可以找出解决该错误的方法。

2 个答案:

答案 0 :(得分:2)

根据您的观点参数,应该有一个名为“验证程序选项”的部分,其中“如果参数未在其下验证,则需要执行。根据您想要显示的内容,您应该能够显示所有值或显示空白页面。

答案 1 :(得分:1)

我找到了一个有效的解决方案,但它有些晦涩难懂。我迫使表单认为它已经过验证,并且它不会再抱怨了,函数底部有以下行:

$form['foo']['#validated'] = true;