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;
}
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top