130

Как сделать красивой раскрытую форму в Drupal 8

Иногда нам необходимо темизовать форму поиска с большим количеством опций.. И нам нужен полный контроль над видом формы, для этого нам нужно переписать шаблон, представленный по умолчанию, ибо стандартный друпаловский шаблон очень тяжело поддается форматированию. Всё же мы легко можем его кастомизировать с помощью темы или модуля. Всё, что для этого нам потребуется - это знание ID формы и имя шаблона. Чтобы это узнать, используем код: dump($form['#id']); and dump($form['#theme']); inside hook_form_alter() or hook_form_FORM_ID_alter().

В нашем случае, мы имеем: views-exposed-form-class-schedule-block-1 and views_exposed_form__class_schedule__block_1 , вы должны переписать оба "вывода".

File /modules/custom/YOUR_CUSTOM_MODULE/YOUR_CUSTOM_MODULE.module

use Drupal\Core\Form\FormStateInterface;
 
/**
 * Implements hook_theme().
 */
function YOUR_CUSTOM_MODULE_theme($existing, $type, $theme, $path) {
  return [
    'views_exposed_form__class_schedule__block_1' => [
      'render element' => 'form',
    ],
  ];
}
 
/**
 * Implements hook_form_FORM_ID_alter().
 */
function YOUR_CUSTOM_MODULE_form_views_exposed_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  if ($form['#id'] == 'views-exposed-form-class-schedule-block-1') {
    // Optional, in case, if you want to remove the title and ise own placeholder.
    if (isset($form['keywords']) && $form['keywords']['#type'] == 'textfield') {
      $form['keywords']['#attributes']['placeholder'] = t('My custom placeholder');
      unset($form['keywords']['#title']);
    }
  }
}

hook_theme() - Хук, который открывает доступ к нашей форме views_exposed_form__class_schedule__block_1

hook_form_FORM_ID_alter() - Вместо глобального hook_form_alter().

File /modules/custom/YOUR_CUSTOM_MODULE/templates/views-exposed-form--class-schedule--block-1.html.twig

<div class="row">
  <div class="col-sm-6">
    <div class="form-group">
      <label>{{ "Subject"|t }}</label>
      {{ form.subject_term }}
    </div>
    <div class="form-group">
      <label>{{ "Keywords"|t }}</label>
      {{ form.keywords }}
    </div>
    <div class="form-group">
      <label>{{ "Class Type"|t }}</label>
      {{ form.type }}
    </div>
  </div>
  <div class="col-sm-6">
    <div class="form-group">
      <label>{{ "Location"|t }}</label>
      {{ form.location }}
    </div>
    <div class="form-group">a
      <label>{{ "Days"|t }}</label>
      <div class="days">
        <div class="day">
          {{ form.sun }}
        </div>
        <div class="day">
          {{ form.mon }}
        </div>
        <div class="day">
          {{ form.tue }}
        </div>
        <div class="day">
          {{ form.wed }}
        </div>
        <div class="day">
          {{ form.thu }}
        </div>
        <div class="day">
          {{ form.fri }}
        </div>
        <div class="day">
          {{ form.sat }}
        </div>
      </div>
    </div>
    <div class="form-group">
      <label>{{ "Day/Night"|t }}</label>
      {{ form.night_section }}
    </div>
  </div>
</div>
<div class="row">
  <div class="col-sm-12">
    {{ form.actions }}
    {# Renders the rest of the form #}
    {{ form|without('subject_term', 'keywords', 'type', 'location', 'sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'night_section', 'actions') }}
  </div>
</div>

Этот пример использует стандартную bootstrap-сетку с двумя колонками. Но вы можете использовать любой html-код с CSS & JS.

Ниже представлен вариант готовой раскрытой формы в Drupal 8:

Иногда нам необходимо темизовать форму поиска с большим количеством опций..

Источник на материал - https://makedrupaleasy.com/articles/drupal-8-9-make-beautiful-views-exposed-filters-form-custom-twig-template-and-bootstrap

Ограниченный HTML

  • Допустимые HTML-теги: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Строки и абзацы переносятся автоматически.
  • Адреса веб-страниц и email-адреса преобразовываются в ссылки автоматически.
CAPTCHA