Як тематизувати викриті форми поглядів?


12

Я створив подання з кількома відкритими фільтрами, але це досить некрасиво.

введіть тут опис зображення

Я хотів би вдосконалити тематизацію, включаючи загортання всієї справи в набір полів, а також групування деяких інших елементів (наприклад, сполучення опублікованих та оновлених даних), але не впевнений, як це зробити.

Я намагався var_dump форму, але вона, здається, працює вічно, і мій браузер закривається, тому я не можу легко дізнатися нічого про форму таким чином.

Я також спробував перевести форму як дочірній набір поля в іншу форму, але отримання всієї інформації про ідентифікатор форми і так далі виявилося проблематичним (хоча, я отримав стиль набору польових даних).

Хтось має якісь покажчики?

Оновлення:

Я скопіював шаблон із модуля в каталог тем мого веб-сайту і запустив початок.

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

Я не можу зрозуміти, як поєднати поля дат - мені потрібно якось змінити властивості віджета, щоб я міг обернути їх у HTML (використання гака_форма_алтер не працює, тому що #prefix та #suffix додаються, щоб $widget->widgetвони розбити вихід)

Відповіді:


22

Форма викриття "Theming Views" є важкою, оскільки вона не веде себе як більшість форм і використовує власний механізм мітки. Отже, ви не можете просто використовувати form_alterгачок для додавання #prefixта #suffixелементів. Але, використовуючи THEME_preprocess_views_exposed_form, ви можете створити власний механізм суфікса / префікса:

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

і у файлі шаблонів

<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

Ви можете скопіювати погляди-експонати-form.tpl.php з сайтів / всіх / модулів / поглядів / теми на свій шлях теми, щоб змінити шаблон.


Ви також можете змінити конкретні перегляди лише з такими шаблонами, як, views-exposed-form--view_id.tpl.phpабо views-exposed-form--view_id--display_id.tpl.php, більше інформації
user56reinstatemonica8

3

Погляньте також на модуль « Кращі експозиції» . Вам знадобиться -dev-реліз, щоб отримати розбірний фільтр, хоча я сподіваюся незабаром отримати належну версію 1.1 ...


3

Ви повинні вивчити, що в form['#theme']предметі. Кращим способом зробити це (краще, ніж var_dump()) буде використання dsm($form)або навіть kpr($form), ці функції будуть доступні після встановлення модуля розробки ( http://drupal.org/project/devel ). form['#theme']повинен бути масив з приблизно 7 елементів. Ці елементи - це назви гачків теми, які викликаються під час надання такої форми. ви можете використовувати їх для реалізації власного способу тематизації форми.

Один із пунктів буде називатися views_exposed_form__VIEW_NAME__DISPLAY_ID.

У вашому модулі (якщо він у вас є) має бути реалізація mock_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

У попередніх ситуаціях я використовував Hook_form_alter (), щоб додати префікс і суфікс, щоб сформувати елементи, щоб обернути їх у діві, який потім можна стилізувати. Не впевнений у обгортанні наборів полів.

напр.

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

1

Використовуйте Drupal’s_______________________________________________________terter для зміни форми Ось що вирішило мою проблему приєднання символу £ до мого цінового поля (помістіть це у свій спеціальний модуль):

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

на сторінці редагування перегляду ми можемо перевірити інформацію про теми (нижній правий кут). Він надає інформацію щодо файлів шаблонів, які використовує Drupal для відображення різних частин зображення на екрані. За замовчуванням використовуються файли шаблонів, надані модулем перегляду (всередині його тематичної папки), але у випадку, коли ми хочемо змінити спосіб відображення подання, ми можемо замінити ці файли шаблонів із спеціальними файлами шаблонів, які ми можемо помістити всередині нашого власна спеціальна папка тем (або тема, яка буде використовуватися для відображення цього перегляду)

Ця інформація про тему показує нам, як назвати файл відповідно до ієрархії (або сфери ефекту файлу шаблону, який ви збираєтеся замінити власні шаблони подань.)

Тепер ця інформація про тему може відображати не всі файли шаблонів, які перегляд використовує для візуалізації цього певного виду.

тож перейдіть на сайти / all / module / views / topic і скопіюйте view -posed.tpl.php (тому що в цьому випадку ми хочемо замінити типовий для відображення фільтрів!) та вставте його у вашу власну папку тем, тепер вам слід дотримуватися того самого методу, щоб контролювати ефект цього важливого шаблонного файлу, який ви помістили всередині власної тематичної папки, перейменувавши його відповідно. наприклад, вигляд-викрита форма - ваше ім'я вікна імені.tpl.php (ви зрозумієте номенклатуру, переглянувши тему: інформація на сторінці редагування перегляду)

тепер ви можете додати css до окремих віджетів (згенерованих обробниками фільтрів) у цей файл шаблону, і ці налаштування будуть застосовані до фільтрів.

відвідайте http://eureka.ykyuen.info/2011/07/25/drupal-theme-the-exposed-filter-in-views/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.