Come tema le viste esposte forma?


12

Ho creato una vista con una serie di filtri esposti, ma è piuttosto brutta.

inserisci qui la descrizione dell'immagine

Vorrei migliorare il tema, incluso il wrapping del tutto in un fieldset e il raggruppamento di alcuni degli altri elementi (come l'associazione degli input pubblicati e aggiornati), ma non sono sicuro di come procedere.

Ho provato a var_dump il modulo, ma sembra andare avanti all'infinito e il mio browser si blocca, quindi non posso facilmente imparare nulla sul modulo in quel modo.

Ho anche provato a mettere il modulo come figlio del fieldset in un altro modulo, ma ottenere tutte le informazioni sull'ID del modulo e così via si è rivelato problematico (anche se ho ottenuto lo stile del fieldset).

Qualcuno ha qualche puntatore?

Aggiornare:

Ho copiato il modello dal modulo nella directory dei temi del mio sito e ho iniziato.

<fieldset>
    <legend>Filters</legend>

    <div class="views-exposed-form">
        <div class="views-exposed-widgets clear-block">
            <?php foreach($widgets as $id => $widget): ?>
                <div class="views-exposed-widget">
                    <?php if (!empty($widget->label)): ?>
                        <label for="<?php print $widget->id; ?>">
                            <?php print $widget->label; ?>
                        </label>
                    <?php endif; ?>
                    <?php if (!empty($widget->operator)): ?>
                        <div class="views-operator">
                            <?php print $widget->operator; ?>
                        </div>
                    <?php endif; ?>
                    <div class="views-widget">
                        <?php print $widget->widget; ?>
                    </div>
                </div>
            <?php endforeach; ?>
            <div class="views-exposed-widget">
                <?php print $button ?>
            </div>
        </div>
    </div>
</fieldset>

Non riesco a capire come accoppiare i campi data - Devo in qualche modo modificare le proprietà del widget in modo da poterli avvolgere in HTML (usando hook_form_alter non funziona perché #prefix e #suffix vengono aggiunti in $widget->widgetmodo che vengano aggiunti interrompere l'uscita)

Risposte:


22

La forma esposta di Theming Views è difficile perché non si comporta come la maggior parte delle forme e utilizza il proprio meccanismo di etichette. Quindi, non puoi semplicemente usare un form_alterhook per aggiungere #prefixe #suffixagli elementi. Ma usando THEME_preprocess_views_exposed_form, puoi creare il tuo meccanismo suffisso / prefisso:

function THEME_preprocess_views_exposed_form(&$variables) {
  if ($variables['form']['#id'] == 'views-exposed-form-VIEWNAME-DISPLAYID') {
    foreach ($variables['widgets'] as $id => &$widget) {
      switch ($id) {
        case 'first_date_id':
          $widget->prefix = '<div class="date-widgets-wrapper">';
          break;
        case 'last_date_id':
          $widget->suffix = '</div>';
          break;
      }
    }
  }
}

e nel file modello

<fieldset>
    <legend>Filters</legend>

    <div class="views-exposed-form">
        <div class="views-exposed-widgets clear-block">
            <?php foreach($widgets as $id => $widget): ?>
                <?php if (!empty($widget->prefix)) print $widget->prefix; ?>
                <div class="views-exposed-widget">
                    <?php if (!empty($widget->label)): ?>
                        <label for="<?php print $widget->id; ?>">
                            <?php print $widget->label; ?>
                        </label>
                    <?php endif; ?>
                    <?php if (!empty($widget->operator)): ?>
                        <div class="views-operator">
                            <?php print $widget->operator; ?>
                        </div>
                    <?php endif; ?>
                    <div class="views-widget">
                        <?php print $widget->widget; ?>
                    </div>
                </div>
                <?php if (!empty($widget->suffix)) print $widget->suffix; ?>
            <?php endforeach; ?>
            <div class="views-exposed-widget">
                <?php print $button ?>
            </div>
        </div>
    </div>
</fieldset>

7

Puoi copiare views-Exposed-form.tpl.php da siti / all / moduli / visualizzazioni / tema nel percorso del tema per sovrascrivere il modello.


Puoi anche eseguire l'override di viste specifiche solo con modelli come views-exposed-form--view_id.tpl.phpo views-exposed-form--view_id--display_id.tpl.php, maggiori informazioni
user56reinstatemonica8

3

Dai anche un'occhiata al modulo Better Exposed Filters . Avrai bisogno della versione -dev per ottenere l'opzione di filtri comprimibili, anche se spero di ottenere presto una versione 1.1 corretta ...


3

Dovresti esaminare cosa c'è form['#theme']nell'elemento. Un modo migliore per farlo (meglio di var_dump()) sarebbe usare dsm($form)o addirittura kpr($form), queste funzioni saranno disponibili dopo aver installato il modulo di sviluppo ( http://drupal.org/project/devel ). form['#theme']dovrebbe essere un array di circa 7 elementi. Questi elementi sono nomi di hook a tema che vengono chiamati quando viene eseguito il rendering di questo modulo. puoi usarli per implementare il tuo modo personale di creare temi per un modulo.

Verrà chiamato uno degli elementi views_exposed_form__VIEW_NAME__DISPLAY_ID.

Nel tuo modulo (se ne hai uno) dovrebbe esserci un'implementazione di hook_theme ()

function MYMODULE_theme($existing, $type, $theme, $path) {
  return array(
    'views_exposed_form__VIEW_NAME__DISPLAY_ID' => array(
      'function' => 'my_exposed_form_theme_function',
      'render element' => 'form',
    )
  );
}

// somwhere later in code

function my_exposed_form_theme_function($vaiables) {
  //$vaiables['form'] contains a form array
  //to display a form element call drupal_render($vaiables['form']['some element'])
  //don't forget to call drupal_render($form) 
  //after you are done with rendering individual elements
  //
  //you can use template_preprocess_views_exposed_form() from 
  // views/theme/theme.inc as an example

  return "concatenated results of multiple drupal_render() calls";
}

2

In situazioni precedenti ho usato Hook_form_alter () per aggiungere prefisso e suffisso per formare elementi per avvolgerli in div che possono quindi essere disegnati. Non sono sicuro del wrapping nei set di campi.

per esempio.

$form['submitted']['full_name']['#prefix'] = '<div class="background">';        
$form['submitted']['message']['#suffix'] = '</div>';

1

Usa hook_form_FORM_ID_alter di Drupal per modificare il modulo. Questo è ciò che ha risolto il mio problema di anteporre un carattere £ al mio campo di prezzo (inseriscilo nel tuo modulo personalizzato):

function THEME_form_views_exposed_form_alter(&$form, &$form_state, $form_id) {
   // check this is the right form
   if ($form['#theme'][0] == 'REPLACE_THIS') {
      // add the prefix
      $form['price']['min']['#prefix'] = "£";
   }
}


0

nella pagina di modifica di una vista possiamo controllare le informazioni sul tema (angolo in basso a destra). Fornisce le informazioni relative ai file modello utilizzati da Drupal per visualizzare sullo schermo le diverse parti della vista. Per impostazione predefinita, vengono utilizzati i file modello forniti dal modulo viste (all'interno della sua cartella dei temi), ma nel caso in cui desideriamo modificare la modalità di visualizzazione di una vista, possiamo sovrascrivere quei file modello con file modello personalizzati che possiamo inserire nel nostro propria cartella tema personalizzata (o il tema che verrà utilizzato per visualizzare questa vista)

Queste informazioni sul tema ci mostrano come assegnare un nome a un file in base alla gerarchia (o all'ambito dell'effetto del file modello che sovrascriverà i modelli delle viste).

Ora, queste informazioni sul tema potrebbero non mostrare tutti i file modello utilizzati dalla vista per eseguire il rendering di questa vista specifica.

quindi, vai su siti / all / modules / views / theme e copia il views-expos-form.tpl.php (perché in questo caso vogliamo sovrascrivere il valore predefinito per i filtri di rendering!) e incollarlo nella tua cartella dei temi, ora devi seguire lo stesso metodo per controllare l'effetto di questo file modello di sostituzione che hai inserito nella cartella del tuo tema rinominandolo di conseguenza. ad es. views-Exposed-Form: il riquadro del nome della vista name.tpl.php (capirai la nomenclatura osservando il tema: informazioni nella pagina di modifica della vista)

ora puoi aggiungere CSS ai singoli widget (generati dai gestori di filtri) in questo file modello e tali impostazioni verranno applicate ai filtri.

visita http://eureka.ykyuen.info/2011/07/25/drupal-theme-the-exposed-filter-in-views/

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.