Использование функций в темплэйте views-exposed-form.tpl.php у Views

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

Аватар пользователя strelkov.av strelkov.av 23 февраля 2021 в 19:08

Добрый день, есть задача сильно переделать раскрытую форму определенной страницы у Views.
Таким образом создал в своей теме дубликат views-exposed-form.tpl.php -> views-exposed-form--sample--page.tpl.php.
Внутри которого убрал цикл по раскрытым фильтрам из вьюхи, и теперь задача, уже верстать и вставлять рендеринг нужных лэйблов, полей, описаний и т.п. внутри нужных мне div-ах, span-ах и т.п. необходимых вещах

Самое тупое и простое это писать что то вроде этого по каждому фильтру:

<div class="some-special-class">
  <div id="<?php print $widgets['filter-title']->id; ?>-wrapper" class="views-exposed-widget views-widget-filter-title; ?>">
    <?php if (!empty($widgets['filter-title']->label)): ?><label for="<?php print $widgets['filter-title']->id; ?>"><? php print $widgets['filter-title']->label; ?></label><?php endif; ?>
    <?php if (!empty($widgets['filter-title']->operator)): ?><div class="views-operator"><?php print $widgets['filter-title']->operator; ?></div><?php endif; ?>
    <div class="views-widget"><?php print $widgets['filter-title']->widget; ?></div>
    <?php if (!empty($widgets['filter-title']->description)): ?><div class="description"><?php print $widgets['filter-title']->description; ?></div><?php endif; ?>
  </div>
</div>

Но получается по каждому фильтру, я буду один и тот же код писать по рендерингу лейбла, поле, описания и т.п. Лишь меня только идентификатора поля в каждом случае

Есть ли какой нибудь способ упросить жизнь, что то вроде создания функции, на входе которой ждать идентификатор поля, а внутри неё производить как раз рендеринг лейбла, поля, описания и т.п.
Таким образом чтобы верстка уже представляла только, что то вроде следующего:

<div class="some-special-class">
  <?php display_widget('filter-title'); ?>
</div>

Комментарии

Аватар пользователя ivnish ivnish 23 февраля 2021 в 19:20

Я думаю, нужно использовать препроцесс хук и там изменить всё что нужно перед выводом. Шаблон, по идее, останется без изменений

Аватар пользователя strelkov.av strelkov.av 23 февраля 2021 в 19:30

Чтобы форма была типа этого https://getbootstrap.com/docs/4.0/examples/checkout/
т.е. где то несколько полей в одну строку, где то разделитель в виде полосы, ещё определенные поля будут в fieldset завернуты, какие то по другому.
Т.е. то что в принципе можно легко вроде как наверстать в темплэйте (всякие bootstrap классами, типа col-md-3, col-md-6, ... ) , но как мне кажется будет геморойно править через различные hook_form_alter и т.п.