Drupal Views2 Exposed Form como mudança
-
19-08-2019 - |
Pergunta
Eu tenho uma visão com uma forma exposta. Eu estou tentando algumas coisas sobre ele. Idealmente, eu gostaria de ter uma lista suspensa que aciona o formulário com nenhum botão. Se isso não for possível, então eu gostaria de ter o diferente algo texto do botão que se aplicam.
Eu cortei-o para agora e mudança views_form em views.module mas isso não parece ser o caminho certo para fazê-lo. Eu só tenho uma forma exposta no momento, mas o que se eu adicionar mais?
Por favor, veja http://www.wiredvillage.ca/News para o meu exemplo.
Eu estou bisbilhotando drupal.org e ver os outros com o mesmo problema, mas nenhuma solução até agora. Não tenho certeza onde o melhor lugar para obter Drupal ajuda é.
Aqui está a mudança que eu fiz até agora:
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;
}
Solução
Se quiser que o drop-down ao fogo, eu usaria JavaScript em vez de cortar o módulo como Eaton sugere.
Basicamente, você pode modificar o texto com hook_form_alter como Eaton sugere, então use no mesmo hook_form_alter, adicione uma chamada para drupal_add_js com os seus JS personalizados que esconde o botão e envia o formulário na manipulador onChange do select drop-down . Você quer que o botão não enviar para aqueles 10% dos usuários para quem o JS falhar.
Outras dicas
Ou, você poderia usar uma função pré-processamento para alterar a forma antes mesmo que seja de construção. Eu queria mudar o texto no botão, então eu fiz o seguinte:
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']);
}
}
Ambos os itens acima são bons, mas eu descobri que alterar a forma nem sempre pode levar a resultados desejáveis, principalmente porque os filtros expostos são temáticos usando um modelo tema specifc. A maneira correta de mudar o tema seria para substituir o arquivo views-exposed-form.tpl
na pasta do seu tema. Tenha em mente que isso se aplica a todas as formas de filtro expostas, com o tema um específico, você vai precisar usar um nome diferente para esse nome de arquivo, como:
views-exposed-form--TITLE--DISPLAY.tpl.php
views-exposed-form--TITLE.tpl.php
e alguns outros, você pode verificar o Tema:. Informações do seu ponto de vista para convenções de nomenclatura do modelo
Este módulo oferece uma auto-enviar entre outras coisas http://drupal.org/project/views_hacks
Este módulo é ótimo para melhorar filtros expostos http://drupal.org/project/better_exposed_filters
Você deve ser capaz de usar hook_form_alter () ( http://api.drupal.org / api / função / hook_form_alter ) para alterar a forma como é construído, modificando os domínios em causa, quando esse ponto de vista particular está a ser exibida. Você pode bombardear o botão enviar, adicionar uma função #theme que chama os drupal_add_js () função, e assim por diante.
Enquanto os parâmetros GET vir na forma visualizações esperar que eles, tudo vai funcionar bem - ele foi projetado dessa maneira para permitir bookmarking de páginas com definições de filtro expostas, etc. A parte importante é ter certeza de que você está fazendo a forma deturpação na função () hook_form_alter seu próprio módulo, para que ele não vai fazer outra vista impulsionado choke coisas.