it-swarm.it

Come tema le viste esposte forma?

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

enter image description here

Vorrei migliorare il tema, incluso il confezionamento di 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 a $widget->widget quindi interrompono l'output)

12
HorusKol

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_alter hook per aggiungere #prefix e #suffix agli 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>
22
Pierre Buyle

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

7
Adam S

Dovresti esaminare cosa c'è nella voce form['#theme']. Il modo migliore per farlo (meglio di var_dump()) sarebbe usare dsm($form) o anche kpr($form), queste funzioni saranno disponibili dopo aver installato il modulo devel (- 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.

Uno degli elementi verrà chiamato 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";
}
3
ihor marusyk

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
mikeker

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>';
2
Teegan

Visualizza il layout dei moduli esposti (D7) il modulo ti aiuterà a visualizzare i temi dei moduli esposti.

1
skorzh

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'] = "£";
   }
}
1
jackocnr

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 eseguire il rendering delle diverse parti della vista sullo schermo. Per impostazione predefinita vengono utilizzati i file modello forniti dal modulo viste (all'interno della cartella del tema), 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 nella nostra cartella dei temi personalizzati (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. per esempio. views-expos-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/

0
dresh