Возможно ли выборочно скрыть exposed filter?

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

Аватар пользователя geotype geotype 11 февраля 2014 в 18:26

Добрый день.

Возник следующий вопрос. На настоящий момент у меня заведен один материал - "продукт" и в нем 5 полей таксономии для выбора производителя, цвета, размера и прочее.
Также на таксономии построено меню по группам товаров.
Для красивого вывода продуктов через термины таксономии соответственно реализована одна вьюха на материал "продукт" через Taxonomy Display и в ней включены раскрытые фильтры по 4-м терминам таксономии (пятый термин определяет позицию товара в главном меню).

Так вот проблема в том что одна группа товаров не требует указания производителя. Соответственно я хотел бы чтобы для нее фильтр по производителю не показывался. Возможно ли это реализовать не создавая отдельного материала и не делая отдельной вьюхи?

Спасибо.

Комментарии

Аватар пользователя Koreychenko Koreychenko 11 февраля 2014 в 23:12

Есть мнение, что если сделать unset, фильтру во вьюхе через form_alter, то будут проблемы при сабмите формы. Проще уж css ом скрыть. CSS class категории в body добавляется же.

Аватар пользователя drupby drupby 12 февраля 2014 в 7:55

"Koreychenko" wrote:
Есть мнение

"imarat" wrote:
Не будет проблем

есть мнение , что это зависит от "специалиста" , да и зачем убирать unset-ом ?

Аватар пользователя Artu Artu 10 марта 2014 в 17:16

webpavilion wrote:
unset не нужно, нужно #access = FALSE

Работает. Интересно, чем это кошернее чем
hide ($form['field_name']);
?

Метку фильтра в любом случае нужно прятать отдельно.

Аватар пользователя geotype geotype 13 февраля 2014 в 10:58

Спасибо, пока что отказался от этой идеи так как понял, что хотелось бы найти более глобальный подход, т.е. чтобы была возможность для нескольких определенных групп товаров создавать собственные уникальные фильтры, которые не показывались бы у других групп. В такой формулировке простое скрытие фильтров уже боюсь не подойдет.

Аватар пользователя drupby drupby 10 марта 2014 в 18:16

"Artu" wrote:
. Интересно, чем это кошернее чем

Due to the fact that hide() and show() simply toggle the #printed attribute on an element, the Form API will not reject input that has been submitted for these form elements (it has no way to know).

This means that through Javascript or other means, one can still submit data to a hidden form element. Form elements that have been #disabled or #access = FALSE are protected from this vulnerability.

Вот как то так , т.е. ты скрываешь элемент формы hide($form['element']) , а я потом его javascript-ом вставляю на страничку , заполняю и он отработает в сабмите формы

Аватар пользователя Artu Artu 10 марта 2014 в 21:10

Спасибо.

Но оба метода оставляют пустую разметку:

< div id="edit-field-field_name-tid-wrapper" class="views-exposed-widget views-widget-filter-field_name_tid">
< div class="views-widget">
< /div>
< /div>

Как от нее избавится?

Если убрать несколько фильтров подряд смещение уже видно.

Аватар пользователя drupby drupby 10 марта 2014 в 21:44

"Artu" wrote:
Но оба метода оставляют пустую разметку:

эта разметка добавляется вьюсом в шаблоне views-exposed-form.tpl.php

Аватар пользователя drupby drupby 10 марта 2014 в 23:49

"Artu" wrote:
Убрать их из шаблона означает отказаться от возможности темизации фильтров.

ну убирать и не нужно - просто перетянуть шаблон в тему и отредактировать минимально - поставить условия необходимые

вот как то так

<?php

/**
 * @file
 * This template handles the layout of the views exposed filter form.
 *
 * Variables available:
 * - $widgets: An array of exposed form widgets. Each widget contains:
 * - $widget->label: The visible label to print. May be optional.
 * - $widget->operator: The operator for the widget. May be optional.
 * - $widget->widget: The widget itself.
 * - $sort_by: The select box to sort the view using an exposed form.
 * - $sort_order: The select box with the ASC, DESC options to define order. May be optional.
 * - $items_per_page: The select box with the available items per page. May be optional.
 * - $offset: A textfield to define the offset of the view. May be optional.
 * - $reset_button: A button to reset the exposed filter applied. May be optional.
 * - $button: The submit button for the form.
 *
 * @ingroup views_templates
 */

?>
<?php if (!empty($q)): ?>
  <?php
    // This ensures that, if clean URLs are off, the 'q' is added first so that
    // it shows up first in the URL.
    print $q;
  ?>
<?php endif; ?>
<div class="views-exposed-form">
  <div class="views-exposed-widgets clearfix">
    <?php foreach ($widgets as $id => $widget): ?>
      <?php if ($widget->widget): ?>
        <div id="<?php print $widget->id; ?>-wrapper" class="views-exposed-widget views-widget-<?php print $id; ?>">
          <?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>
          <?php if (!empty($widget->description)): ?>
            <div class="description">
              <?php print $widget->description; ?>
            </div>
          <?php endif; ?>
        </div>
      <?php endif; ?>
    <?php endforeach; ?>
    <?php if (!empty($sort_by)): ?>
      <div class="views-exposed-widget views-widget-sort-by">
        <?php print $sort_by; ?>
      </div>
      <div class="views-exposed-widget views-widget-sort-order">
        <?php print $sort_order; ?>
      </div>
    <?php endif; ?>
    <?php if (!empty($items_per_page)): ?>
      <div class="views-exposed-widget views-widget-per-page">
        <?php print $items_per_page; ?>
      </div>
    <?php endif; ?>
    <?php if (!empty($offset)): ?>
      <div class="views-exposed-widget views-widget-offset">
        <?php print $offset; ?>
      </div>
    <?php endif; ?>
    <div class="views-exposed-widget views-submit-button">
      <?php print $button; ?>
    </div>
    <?php if (!empty($reset_button)): ?>
      <div class="views-exposed-widget views-reset-button">
        <?php print $reset_button; ?>
      </div>
    <?php endif; ?>
  </div>
</div>