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 中暴露过滤器的删除或过滤选项的主要内容,如果未能解决你的问题,请参考以下文章