Drupal Views2公开表单如何更改
我有一个暴露形式的视图。我正试着在上面写一些东西。理想情况下,我希望有一个下拉菜单,不带按钮地触发表单。如果这是不可能的,那么我想有按钮文本的东西不同于适用 我现在入侵了它,并在views.module中更改了views\u表单,但这似乎不是正确的方法。我现在只有一个暴露的表单,但是如果我添加更多呢 请看我的例子 我在drupal.org上闲逛,看到其他人也有同样的问题,但到目前为止还没有解决方案。不确定哪里是获得Drupal帮助的最佳地点 以下是我到目前为止所做的更改:Drupal Views2公开表单如何更改,drupal,drupal-6,drupal-views,Drupal,Drupal 6,Drupal Views,我有一个暴露形式的视图。我正试着在上面写一些东西。理想情况下,我希望有一个下拉菜单,不带按钮地触发表单。如果这是不可能的,那么我想有按钮文本的东西不同于适用 我现在入侵了它,并在views.module中更改了views\u表单,但这似乎不是正确的方法。我现在只有一个暴露的表单,但是如果我添加更多呢 请看我的例子 我在drupal.org上闲逛,看到其他人也有同样的问题,但到目前为止还没有解决方案。不确定哪里是获得Drupal帮助的最佳地点 以下是我到目前为止所做的更改: function vi
function views_exposed_form(&$form_state) {
// Make sure that we validate because this form might be submitted
// multiple times per page.
$form_state['must_validate'] = TRUE;
$view = &$form_state['view'];
$display = &$form_state['display'];
$form_state['input'] = $view->get_exposed_input();
// Let form plugins know this is for exposed widgets.
$form_state['exposed'] = TRUE;
$form['#info'] = array();
if (!variable_get('clean_url', FALSE)) {
$form['q'] = array(
'#type' => 'hidden',
'#value' => $view->get_url(),
);
}
// Go through each filter and let it generate its info.
foreach ($view->filter as $id => $filter) {
$view->filter[$id]->exposed_form($form, $form_state);
if ($info = $view->filter[$id]->exposed_info()) {
$form['#info']['filter-' . $id] = $info;
}
}
// I CHANGED The VALUE OF THIS SUBMIT BUTTON TO GO
$form['submit'] = array(
'#name' => '', // prevent from showing up in $_GET.
'#type' => 'submit',
'#value' => t('go'),
);
$form['#action'] = url($view->get_url());
$form['#theme'] = views_theme_functions('views_exposed_form', $view, $display);
$form['#id'] = views_css_safe('views_exposed_form-' . check_plain($view->name) . '-' . check_plain($display->id));
// $form['#attributes']['class'] = array('views-exposed-form');
// If using AJAX, we need the form plugin.
if ($view->use_ajax) {
drupal_add_js('misc/jquery.form.js');
}
views_add_js('dependent');
return $form;
}
您应该能够使用hook_form_alter()()在构建表单时更改表单,在显示特定视图时修改相关字段。您可以单击submit按钮,添加一个调用drupal_add_js()函数的主题函数,等等
只要GET参数符合视图的预期,一切都会正常工作——它的设计允许使用公开的过滤器设置等对页面进行书签。重要的是确保您在自己模块的hook\u form\u alter()函数中进行表单损坏,这样它就不会让其他视图驱动的东西窒息。如果你想启动下拉菜单,我会使用JavaScript,而不是像伊顿建议的那样对模块进行黑客攻击
基本上,您可以按照Eaton的建议使用hook\u form\u alter修改文本,然后在同一个hook\u form\u alter中使用自定义js添加对drupal\u add\u js的调用,该调用隐藏按钮并在select下拉列表的onChange处理程序上提交表单。您希望提交按钮用于JS失败的10%用户。或者,您可以在表单生成之前使用预处理函数更改表单。我想更改按钮上的文本,所以我这样做:
function MYTHEME_preprocess_views_exposed_form(&$vars, $hook) {
// only alter the jobs search exposed filter form
if ($vars['form']['#id'] == 'views-exposed-form-jobs-search-page-1') {
// Change the text on the submit button
$vars['form']['submit']['#value'] = t('Search');
// Rebuild the rendered version (submit button, rest remains unchanged)
unset($vars['form']['submit']['#printed']);
$vars['button'] = drupal_render($vars['form']['submit']);
}
}
以上两种方法都很好,但我发现改变表单可能并不总是能得到理想的结果,主要是因为公开的过滤器使用特定的主题模板进行主题化。更改主题的正确方法是覆盖主题文件夹中的
视图公开表单.tpl
文件。请记住,这将适用于所有公开的筛选表单,要设置特定表单的主题,您需要为该文件名使用不同的名称,如:
views-exposed-form--TITLE--DISPLAY.tpl.php
views-exposed-form--TITLE.tpl.php
您可以查看视图的主题:信息部分,了解模板命名约定。此模块提供自动提交功能
这个模块对于改进暴露的过滤器非常有用是的,David的建议很合理。要在非JS客户端上实现干净的降级,请将按钮保留在那里,但使用JS将其删除或隐藏。但是,您仍然可以使用hook\u form\u alter()来添加调用drupal\u add\u js的主题函数。您是否已修改“选择”下拉列表以添加onChange处理程序?只有删除该按钮,drupal才能知道视图的公开过滤器已更新。不过,您不需要提交页面,如果您是通过Ajax加载结果的,您可能可以连接到该页面,但是需要某种onChange处理程序。它是一个项目页面,不太可能更改。