Jak nadać temat odsłoniętej formie widoków?

12

Stworzyłem widok z wieloma odsłoniętymi filtrami, ale wygląda dość brzydko.

wprowadź opis zdjęcia tutaj

Chciałbym poprawić temat, w tym zawinąć całość w zestaw pól, a także pogrupować niektóre inne elementy (takie jak parowanie opublikowanych i zaktualizowanych danych wejściowych), ale nie jestem pewien, jak sobie z tym poradzić.

Próbowałem var_dump formularza, ale wydaje się, że trwa on wiecznie, a moja przeglądarka blokuje się, więc nie mogę łatwo dowiedzieć się niczego o formularzu w ten sposób.

Próbowałem również umieścić formularz jako dziecko zestawu pól w innej formie, ale uzyskanie wszystkich informacji o identyfikatorze formularza i tak dalej okazało się problematyczne (chociaż dostałem stylizację zestawu pól).

Czy ktoś ma jakieś wskazówki?

Aktualizacja:

Skopiowałem szablon z modułu do katalogu motywów mojej witryny i zacząłem.

<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>

I nie wydaje się, aby dowiedzieć się, jak powiązać się pola date - Muszę jakoś zmodyfikować właściwości widgetów więc mogę zawinąć je w HTML (używając hook_form_alter nie działa, ponieważ #prefix i #suffix dodaje się $widget->widgetwięc przerwać wyjście)

HorusKol
źródło

Odpowiedzi:

22

Odsłonięta forma widoków Theming Views jest trudna, ponieważ nie zachowuje się jak większość formularzy i używa własnego mechanizmu etykiet. Tak więc nie można po prostu użyć form_alterhaka do dodawania #prefixi #suffixdo elementów. Ale używając THEME_preprocess_views_exposed_formmożesz stworzyć swój własny mechanizm sufiksu / prefiksu:

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;
      }
    }
  }
}

i w pliku szablonu

<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>
Pierre Buyle
źródło
7

Możesz skopiować views -posed-form.tpl.php z witryn / wszystkich / modułów / widoków / motywu na ścieżkę motywu, aby zastąpić szablon.

Adam S.
źródło
Możesz również zastąpić określone widoki tylko wzorcami takimi jak views-exposed-form--view_id.tpl.phplub views-exposed-form--view_id--display_id.tpl.php, lub więcej informacji
user56reinstatemonica8
3

Zobacz także moduł Better Exposed Filters . Będziesz potrzebować wydania -dev, aby uzyskać opcję zwijanych filtrów, ale mam nadzieję, że wkrótce wydam właściwe wydanie 1.1 ...

mikeker
źródło
3

Powinieneś sprawdzić, co jest w form['#theme']elemencie. Lepszym sposobem na to (lepszym niż var_dump()) byłoby użycie dsm($form)lub nawet kpr($form), te funkcje będą dostępne po zainstalowaniu modułu devel ( http://drupal.org/project/devel ). form['#theme']powinna być tablicą około 7 elementów. Te elementy to nazwy zaczepów kompozycji, które są wywoływane podczas renderowania tej formy. możesz ich użyć do zaimplementowania własnego stylu tworzenia motywów w formularzu.

Jeden z przedmiotów zostanie nazwany views_exposed_form__VIEW_NAME__DISPLAY_ID.

W twoim module (jeśli go masz) powinna być implementacja 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";
}
ihor marusyk
źródło
2

W poprzednich sytuacjach użyłem Hook_form_alter (), aby dodać prefiks i sufiks, aby utworzyć elementy, aby zawinąć je w div, które można następnie stylizować. Nie jestem jednak pewien co do zawijania w zestawach pól.

na przykład.

$form['submitted']['full_name']['#prefix'] = '<div class="background">';        
$form['submitted']['message']['#suffix'] = '</div>';
Teegan
źródło
1

Użyj hook_form_FORM_ID_alter Drupala, aby zmodyfikować formularz. To rozwiązało mój problem z prefiksem znaku £ w polu ceny (umieść to w swoim module niestandardowym):

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'] = "£";
   }
}
jackocnr
źródło
1

Moduł układu odsłoniętego widoku (D7) pomoże ci z widokami odsłoniętymi z tematów.

skorzh
źródło
0

na stronie edycji widoku możemy sprawdzić informacje o motywie (prawy dolny róg). Podaje informacje dotyczące plików szablonów używanych przez Drupal do renderowania różnych części widoku na ekranie. Domyślnie używane są pliki szablonów dostarczone przez moduł widoków (w folderze motywu), ale w przypadku, gdy chcemy zmodyfikować sposób wyświetlania widoku, możemy zastąpić te pliki szablonów niestandardowymi plikami szablonów, które możemy umieścić w naszym własny niestandardowy folder motywów (lub motyw, który będzie używany do wyświetlenia tego widoku)

Te informacje o motywie pokazują nam, jak nazwać plik zgodnie z hierarchią (lub zakresem efektu pliku szablonu, który zastąpisz własne szablony widoków).

Teraz te informacje o kompozycji mogą nie pokazywać wszystkich plików szablonów używanych przez widok do renderowania tego konkretnego widoku.

więc przejdź do strony / all / modules / views / theme i skopiuj views -posed-form.tpl.php (ponieważ w tym przypadku chcemy zastąpić domyślne ustawienia renderowania filtrów!) i wkleić go do własnego folderu motywów, teraz musisz zastosować tę samą metodę, aby kontrolować efekt tego nadpisującego pliku szablonu, który umieściłeś w swoim własnym folderze motywu, odpowiednio zmieniając jego nazwę. np. views -posed-form - twoja nazwa panelu widoku name.tpl.php (nomenklaturę zrozumiesz patrząc na motyw: informacje na stronie edycji widoku)

teraz możesz dodać css do poszczególnych widżetów (generowanych przez programy obsługi filtrów) w tym pliku szablonu, a te ustawienia zostaną zastosowane do filtrów.

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

dresh
źródło