Domanda

Ho una vista con un modulo esposto. Sto provando alcune cose su di esso. Idealmente, vorrei avere un menu a discesa che attiva il modulo senza pulsante. Se ciò non fosse possibile, vorrei che il testo del pulsante fosse diverso da quello applicabile.

Per ora l'ho hackerato e ho cambiato views_form in views.module ma non sembra il modo giusto di farlo. Ho solo un modulo esposto in questo momento, ma cosa succede se ne aggiungo altri?

Per favore, vedi http://www.wiredvillage.ca/News per il mio esempio.

Sto frugando su drupal.org e vedo altri con lo stesso problema, ma finora nessuna soluzione. Non sono sicuro di dove sia il posto migliore per ottenere aiuto su Drupal.

Ecco la modifica che ho apportato finora:

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 

Ho una vista con un modulo esposto. Sto provando alcune cose su di esso. Idealmente, vorrei avere un menu a discesa che attiva il modulo senza pulsante. Se ciò non fosse possibile, vorrei che il testo del pulsante fosse diverso da quello applicabile.

Per ora l'ho hackerato e ho cambiato views_form in views.module ma non sembra il modo giusto di farlo. Ho solo un modulo esposto in questo momento, ma cosa succede se ne aggiungo altri?

Per favore, vedi http://www.wiredvillage.ca/News per il mio esempio.

Sto frugando su drupal.org e vedo altri con lo stesso problema, ma finora nessuna soluzione. Non sono sicuro di dove sia il posto migliore per ottenere aiuto su Drupal.

Ecco la modifica che ho apportato finora:

<*>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; }
È stato utile?

Soluzione

Se vuoi che il menu a discesa si attivi, utilizzerei JavaScript invece di hackerare il modulo come suggerisce Eaton.

Fondamentalmente, puoi modificare il testo con hook_form_alter come suggerisce Eaton, quindi utilizzare nello stesso hook_form_alter, aggiungere una chiamata a drupal_add_js con il tuo JS personalizzato che nasconde il pulsante e invia il modulo sul gestore onChange del menu a discesa select . Vuoi quel pulsante di invio lì per quel 10% di utenti per i quali JS fallisce.

Altri suggerimenti

In alternativa, è possibile utilizzare una funzione di preelaborazione per modificare il modulo anche prima che venga creato. Volevo cambiare il testo sul pulsante, quindi ho fatto questo:

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']);
  }
}

Entrambi i precedenti vanno bene, ma ho scoperto che l'alterazione del modulo potrebbe non portare sempre a risultati desiderabili, principalmente perché i filtri esposti sono tematici utilizzando un modello di tema specifico. Il modo corretto di cambiare il tema sarebbe quello di sovrascrivere il file views-expos-form.tpl nella cartella del tema. Tieni presente che questo si applicherà a tutti i moduli di filtro esposti, per un tema specifico, dovrai utilizzare un nome diverso per quel nome file, come:

views-exposed-form--TITLE--DISPLAY.tpl.php
views-exposed-form--TITLE.tpl.php

e alcuni altri, puoi controllare la sezione Tema: Informazioni delle tue viste per le convenzioni di denominazione dei modelli.

Questo modulo fornisce un invio automatico tra l'altro http://drupal.org/project/views_hacks

Questo modulo è ottimo per migliorare i filtri esposti http://drupal.org/project/better_exposed_filters

Dovresti essere in grado di utilizzare hook_form_alter () ( http://api.drupal.org / api / function / hook_form_alter ) per cambiare il modulo man mano che viene creato, modificando i campi in questione quando viene visualizzata quella particolare vista. È possibile nuke il pulsante di invio, aggiungere una funzione #theme che chiama la funzione drupal_add_js () e così via.

Finché i parametri GET arrivano nel modo in cui le visualizzazioni li aspettano, tutto funzionerà bene - è stato progettato in questo modo per consentire il bookmarking di pagine con impostazioni di filtro esposte, ecc. La parte importante è assicurarsi che tu sia eseguendo il form mangling nella funzione hook_form_alter () del proprio modulo, in modo da non far soffocare altre viste guidate da roba.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top