Как вывести селесты програмно?

Главные вкладки

Аватар пользователя MiG39 MiG39 8 апреля 2019 в 12:15

Всем привет! Не могу разобраться как вывести значения из поля field_thickness_value
Вот содержимое form. Вывожу его так {{ drupal_dump(form) }}
Пробовал выводить так:

    {% for field_thickness_value in form%}
        {{ form.field_thickness_value["#options"] }}
    {% endfor %}

Не работает эта конструкция. Помогите разобраться, что я не так делаю?

Комментарии

Аватар пользователя MiG39 MiG39 8 апреля 2019 в 13:18

VasyOK wrote:
А может вывести значения этого поля вьюхой и темизировать "селект" из того, что есть?

Проблема в том что у меня 2 селеста, один в блоке с классом class="form--inline form-inline clearfix", а другой вне этого блока. JS'ом я переключаю из одного селеста другой селест. Проблема в том что при обновлении фильтра значение второго фильтра сбрасывается..... Вот страничка с каталогом, не знаю как решить проблему
https://fabrika-plitky.ru/catalog/trotuarnaya-plitka

Аватар пользователя VasyOK VasyOK 8 апреля 2019 в 13:22

И это нужно все делать программным путем?
Может лучще через раскрытые фильтры во вьюхе или SearsAPI + RacetAPI?

Аватар пользователя MiG39 MiG39 8 апреля 2019 в 13:44

Не знаю как лучше. У меня была сортировка готовая уже на сайте. Нужно было добавить фильтр по толщине. Сам фильтр добавил, при переключении состояния, значение сохраняется. А вот как только добавил в разметку
дублирующий селест и прописал JS - то при переключении значения состояние дублирующего селелста сбивается. Разметка сортировки:

<div class="form-inline">
  <label for="sort_custom">Сортировать по:</label>
  <div class="select-wrapper">
    <select class="form-select form-control" name="sort-custom" id="sort-custom">
      <option value="title" data-order="ASC">По наименованию (А->Я)</option>
      <option value="title" data-order="DESC">По наименованию (Я->А)</option>
      <option value="field_price_value" data-order="ASC">По цене (сперва дешевые)</option>
      <option value="field_price_value" data-order="DESC">По цене (сперва дорогие)</option>
    </select>
  </div>
</div>

А вот вывод фильтра по толщине:

{% if form.field_thickness_value is not empty %}
<div class="form--inline form-inline">
  <label for="thickness-custom">Толщина:</label>
  <div class="select-wrapper">
    <select class="form-select form-control" name="thickness-custom"  id="thickness-custom">
      <option value="All">- Все -</option>
      <option value="25">25 мм</option>
      <option value="40">40 мм</option>
      <option value="60">60 мм</option>
      <option value="75">75 мм</option>
      <option value="80">80 мм</option>
      <option value="100">100 мм</option>
    </select>
  </div>
</div>
{% endif %}

JS который переключает селесты скрытые стилями:

 $('body').on('change', '#sort-custom', function () {
                let sort = $(this).val(),
                    order = $(this).find('option:selected').data('order');
                $('select[name="sort_by"]').val(sort);
                $('select[name="sort_order"]').val(order);
                $('.view').addClass('loading');
                $(this).parents('form').find('[type=submit]').click();
            });

            $('body').on('change', '#thickness-custom', function () {
                let thickness = $(this).val();    
                $('select[name="field_thickness_value"]').val(thickness);
                $('.view').addClass('loading');
                $(this).parents('form').find('[type=submit]').click();

            });

Понял что при изменении состояния селеста меняется и значение поля
<?php{{ form.field_thickness_value['#value'] }}?>
т.е. можно как то прикрутить вывод селеста и менять значение option selected="selected".