Php 如何从Drupal表单中的选择字段中删除不必要的选项?
我正在使用better_exposed_filters模块为视图创建一组公开的过滤器。其中一个过滤器显示为选择字段,我希望该字段仅显示与数据库中的内容实际关联的选项 目前,我正在使用hook\u form\u alter()方法进行此操作。为简化起见,在以下示例中,该字段称为“foo”,该字段的内容类型称为“bar”: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
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;
嗯,很高兴知道。可悲的是,(我想因为我使用的是更好的过滤器模块,虽然我不是肯定的),我使用的是“过滤器”而不是“参数”作为视图。嗯,很高兴知道。可悲的是,(我想因为我使用的是更好的过滤器模块,尽管我不是肯定的),我使用的是“过滤器”而不是“参数”作为视图。