Drupal 7 中暴露过滤器的删除或过滤选项

Posted

技术标签:

【中文标题】Drupal 7 中暴露过滤器的删除或过滤选项【英文标题】:Remove or Filter Options on Exposed Filter in Drupal 7 【发布时间】:2011-10-13 17:32:35 【问题描述】:

我正在开发一个使用域访问的网站,并且为了一个视图,我公开了一个列出所有域的过滤器。我只想列出一些域,但不是全部。我知道可以使用过滤器配置,但是如果我以这种方式限制选项,则 ajax 会出现问题,它将所有选项文本更改为“1”,无论如何我都想知道该怎么做,使用钩子形式改变或主题,但最好使用模块中的一些钩子。

一般来说,我试图弄清楚如何删除暴露过滤器的一些选项,我设法使用 JQuery 来完成,但我想用 php 来完成,谢谢!

【问题讨论】:

【参考方案1】:

按照您的建议,使用hook_form_FORM_ID_alter 应该相当简单。首先检查过滤器表单的<form> 元素(使用Firebug 或类似的)并获取它的ID 属性。 Drupal 中的表单 ID 将是该字符串,但所有“-”字符都替换为“_”(因此“form-exposed-filter-form”将变为“form_exposed_filter_form”)。

要记住的是,表单的提交处理程序可能会期望您尝试删除的元素在那里,因此如果您将它们从那里拉出,您可能会得到意想不到的结果。

解决方法是将元素的类型改为value(因此它们可用于$form_state['values'] 中的提交函数),并为每个元素选择一个默认值。像这样的:

// Replace 'FILTER_FORM_ID' with the form's ID
function mymodule_form_FILTER_FORM_ID_alter(&$form, &$form_state, $form_id) 
  $form['some_existing_element'] = array(
    '#type' => 'value',
    '#value' => $default_value_for_filter
  );

【讨论】:

谢谢!,您知道如何获取表单的特定字段的 id,在这种情况下是我的选择字段吗?在这种特殊情况下,至少在删除选项的 javascript 方式中,删除它们似乎不会对提交造成任何问题。如果是这样,我可能会用 function mymodule_form_FILTER_FORM_ID_submit(&$form, &$form_state) ...something here ... 之类的东西覆盖提交函数 最简单的方法是使用与上面相同的方法来获取表单 id...检查元素,它的 ID 可能是 edit-something-1 或类似的。在这种情况下,表单的元素键就是something。同样,edit-something-else-1 会将something_else 作为表单键。希望有帮助

以上是关于Drupal 7 中暴露过滤器的删除或过滤选项的主要内容,如果未能解决你的问题,请参考以下文章

Drupal 7 视图中的块中暴露的过滤器

一种在drupal中使用参数限制分类暴露过滤器选项的方法

Drupal 暴露日期过滤器:从选择中删除“-Year”

Drupal 查看具有近似匹配的暴露过滤器

SEO 友好的暴露过滤器视图 Drupal 7

Drupal 7 视图暴露的过滤器