前几天,在为Drupal网站创建视图时,我创建了一个公开的表单,但不是将要显示的常规选择框,而是将其作为复选框列表。在Google上进行搜索时,我最终找到了这篇文章,该文章提供了可以实现此目的的功能。这是完整的功能。
/** * hack to make exposed dropdowns appear as checkboxes * (can't do it w/ form_alter b/c whole structure is different) * just render the options directly as checkboxes, pass the values the same as the SELECT, * tricks the form api and views to think it's a dropdown * [registered w/ hook_theme, toggled w/ #theme in form_alter] */ function theme_select_as_checkboxes($element) { $output = ''; $selected_options = (array) $element['#post'][$element['#name']]; // 从#options中选择的键 foreach ($element['#options'] as $key => $value) { $id = $element['#id'] . '-' . $key; // 风俗 // 选择此选项吗? $selected = (array_search($key, $selected_options) !== false); // (返回键或假) $checkbox = '<input type="checkbox" ' . 'name="'. $element['#name'] . '[]' .'" ' // 括号是关键-就像选择 . 'id="'. $id .'" ' . 'value="'. $key .'" ' . ($selected ? ' checked="checked" ' : ' ') . drupal_attributes($element['#attributes']) .' />'; $output .= '<label for="'. $id .'">' . $checkbox .' '. $value .'</label>' . "\n"; } return theme_form_element($element, $output); // 整齐地包裹它 }
唯一的问题是,作者没有同时包含将该功能集成到站点中所需的其余功能。结果,有很多评论询问如何执行此操作。经过一番修补后,我设法使此功能起作用,所以我认为我会将解决方案放在这里,以防任何人使用。在开始之前,请务必注意所有这些功能必须位于模块中。如果将它们放在template.php文件中,当前它们不会被Drupal接收。
我们需要做的第一件事(在创建视图之后)是创建一个主题挂钩,以便我们可以让Drupal知道该theme_select_as_checkboxes()函数,以便它可以在theme()调用中使用它。
/** * Implementation of HOOK_theme. * * @return array An array of theme hooks. */ function mymodule_hooks_theme() { return array( 'select_as_checkboxes' => array( 'function' => 'theme_select_as_checkboxes' ), ); }
最后一步是包含hook_form_alter()名称如下形式的函数:
<modulename>_form_<formname>_alter()
公开的表单名称为views_exposed_form,因此在名为“ mymodule”的模块中,将调用该函数modulename_form_views_exposed_form_alter()。此功能的全部作用就是更改表单,以便我们需要更改复选框的任何元素都具有正确的主题。
/** * Implementation of HOOK_form_alter(). * * @param array $form The form * @param string $form_state The current state of the form. */ function mymodule_hooks_form_views_exposed_form_alter(&$form, &$form_state) { // 我们只想更改某种形式,所以不要让Drupal查看任何形式。 // 其他公开视图形式 if ($form['#id'] == 'views-exposed-form-myview-page-1') { // 使选择框显示为复选框列表 $form['formelement']['#theme'] = 'select_as_checkboxes'; $form['anotherformelement']['#theme'] = 'select_as_checkboxes'; } }
一切就绪后,您应该会看到您的选择元素已作为复选框列表打印出来。关于表单的所有内容都将以完全相同的方式工作,显示层即已更改。
对此的另一种解决方案是使用“更好的选择”模块。该模块会将所有多选表单html" target="_blank">元素更改为在Drupal中任何位置出现的复选框列表。更好的选择是一种易于实施的解决方案,但可能并非您想要执行的操作。
我将primefaces数据表与bootsfaces一起使用,我想解决一个CSS冲突。 从primefaces showcase实现过滤器示例: 给我这个结果:datatable过滤器示例很好 但是,在页面中添加bootsfaces组件,例如(唯一的更改是添加一个空
对不起,我仍然是小新在这方面,只是万一有代码有人想看到我否定这里是整个代码要点嵌入 我花了2个星期建立这个应用程序,并已卡在这个过滤在过去的2天。我需要有这个应用程序MVP明天下午演示在一个就业活动为最近的毕业生,这是仅剩的2件事之一。 我没有足够的代表赏金,但任何帮助或建议都很感激
我的ListView自定义适配器(及其新实现的viewHolder)有一些问题。我有一个列表视图,每个项目都有一个复选框(这里没有新内容)。问题是,如果我的列表中有超过9个项目,当我选中第一个复选框时,第十个将自动选中(第二个与第十一个相同),就像两个项目都有一个监听器一样(我认为在某种程度上是这样)。 我在这里读到了listView、视图回收和ViewHolder解决它的方法的位置问题:如何使我
问题内容: 我想过滤结果。 有一个葡萄酒清单,我的愿望是当未选中任何复选框时,将显示整个葡萄酒清单。 当仅选中1个复选框时,显示相关类别 当选中多个复选框时,将显示相关类别 我是AngularJS的新手,我尝试了ng-model都没有成功,这是没有与函数关联的ng-model的代码: 如何使用ng-model或ng-change将功能与每个复选框按钮相关联以具有实时过滤模型? 问题答案: 只是添加
我试着练习用CSS选择器获取值,我想出了这个(不像预期的那样工作) (我也尝试过) 我对的期望:第三个没有id属性和data-ad-show属性的元素被选中,其值将是所需的值3。
问题内容: 我试图以与从中选择类似的方式选择的列名称。 我似乎找不到解决办法。有没有其他人以前做过此事,或者知道是否有可能? 问题答案: information_schema.columns.Table_name(至少在Sql Server 2000下)包含视图,因此只需使用