我有一个带有暴露窗体的视图。我正在试着在它上面做一些事情。理想情况下,我希望有一个下拉列表,激发表单没有按钮。如果这是不可能的,那么我希望有一个不同于应用的按钮文本。
我暂时破解了它,并在views.module中更改了views_form,但这似乎不是正确的方法。我现在只有一个公开的表单,但如果我添加更多表单呢?
有关我的示例,请参阅http://www.wiredvillage.ca/News。
我在drupal.org周围转转,发现其他人也有同样的问题,但到目前为止还没有解决方案。不确定在哪里获得Drupal帮助的最佳位置。
以下是我到目前为止所做的更改:
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;
}发布于 2009-01-18 06:50:22
如果你想激活下拉菜单,我会使用JavaScript,而不是像伊顿建议的那样破解模块。
基本上,您可以像伊顿建议的那样使用hook_form_alter修改文本,然后在相同的hook_form_alter中使用,使用您的自定义JS添加对drupal_add_js的调用,该调用隐藏按钮并在select下拉菜单的onChange处理程序上提交表单。您希望为JS失败的那10%的用户提供submit按钮。
发布于 2009-03-18 17:53:08
或者,您可以使用预处理函数来更改表单,甚至可以在构建表单之前进行更改。我想更改按钮上的文本,所以我这样做了:
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']);
}
}发布于 2010-12-15 07:31:04
上面两个都很好,但我发现更改表单并不总是能带来理想的结果,主要是因为公开的过滤器是使用特定的主题模板创建主题的。更改主题的正确方法是覆盖主题文件夹中的views-exposed-form.tpl文件。请记住,这将适用于所有公开的筛选器窗体,要为特定的窗体创建主题,您需要为该文件名使用不同的名称,例如:
views-exposed-form--TITLE--DISPLAY.tpl.php
views-exposed-form--TITLE.tpl.php和其他一些模板,您可以查看视图的Theme: Information部分了解模板命名约定。
https://stackoverflow.com/questions/451745
复制相似问题