Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从Drupal表单中的选择字段中删除不必要的选项?_Php_Drupal - Fatal编程技术网

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

Php 如何从Drupal表单中的选择字段中删除不必要的选项?,php,drupal,Php,Drupal,我正在使用better_exposed_filters模块为视图创建一组公开的过滤器。其中一个过滤器显示为选择字段,我希望该字段仅显示与数据库中的内容实际关联的选项 目前,我正在使用hook\u form\u alter()方法进行此操作。为简化起见,在以下示例中,该字段称为“foo”,该字段的内容类型称为“bar”: function my_module_form_alter(&$form, $form_state, $form_id) { // Get all the valu

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

目前,我正在使用hook\u form\u 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;
}
这很好——表单只显示我想要显示的选项。不幸的是,视图最初并没有实际显示任何内容,我还收到以下错误消息:

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

在我用表单过滤一次选项之后,一切似乎都很好。
有人知道我如何解决这个问题吗?如果需要的话,我愿意用一种完全不同的方法来剔除筛选选项,或者我可以找到一种方法来解决这个错误。

在您的视图参数下应该有一个名为“验证器选项””的部分,其中包含“如果参数未验证,则要采取的操作。根据您希望显示的内容,您应该能够显示所有值或显示空白页。

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

我找到了一个可行的解决方案,但它有点不成熟。我强制表单认为它已验证,并且不再抱怨,函数底部有以下行:

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

我找到了一个可行的解决方案,但它有点不成熟。我强制表单认为它已验证,并且不再抱怨,函数底部有以下行:

$form['foo']['#validated'] = true;
嗯,很高兴知道。可悲的是,(我想因为我使用的是更好的过滤器模块,虽然我不是肯定的),我使用的是“过滤器”而不是“参数”作为视图。嗯,很高兴知道。可悲的是,(我想因为我使用的是更好的过滤器模块,尽管我不是肯定的),我使用的是“过滤器”而不是“参数”作为视图。