1.Super Slick
Что ж, отличный способ - посмотреть, как можно модифицировать Views, чтобы разбивать различные открытые фильтры на разные блоки, возможно, определяемые настройкой дельты блока в конфигурации для каждого фильтра.Это было бы аккуратно.
2.Overkill / Redundant / FAPI-hook_block () Drill
Получите выставленный блок, затем используйте hook_form_alter()
, чтобы скрыть фильтры, которые вы хотите поместить в другой блок.Затем программно создайте новые блоки в новом модуле (или, если вам абсолютно необходимо, модуль PHP Filter и пользовательский блок через графический интерфейс).В этом модуле скопируйте нужные элементы формы в этом блоке, включая уникальный открытый фильтр.Полезно помнить, что открытые фильтры не заботятся о форме.Они заботятся о строке запроса.При необходимости вы можете ввести аргументы фильтра в URL.
3.Условная модификация
Реализация hook_form_alter () для формы, отображаемой в экспонированном фильтре.Чтобы идентифицировать эту форму, вам сначала нужно получить идентификатор для views_exposed_form
(не уверен, что это так), а затем получить более конкретную идентификацию из массива форм для нацеливания только на эту открытую форму.(Это все равно понадобится для подхода № 2).
Теперь, когда у вас есть это, вы можете сделать пару вещей.Во-первых, имейте в виду, что если вы агрессивно относитесь к кешированию этого блока в глобальном масштабе, это сломается.Кэшируйте на странице или с какой-либо степенью детализации, которую вы намереваетесь изменить блок.Для каждого фильтра, который вы хотите скрыть, вы собираетесь поместить некоторую логику в $form['#access']
, чтобы Drupal мог просматривать элемент формы, просматривать страницу, на которой он находится, и скрывать этот элемент формы, потому что он не используется.
Если вы полагаетесь на текущий путь к странице, вы можете сделать что-то вроде этого:
$form['taxonomy_b_filter']['#access'] = arg(0) == 'section';
Это говорит Drupal скрывать воображаемый элемент 'taxonomy_b_filter', если путь к текущей странице выглядит как http://example.com/section.