Отделите все открытые фильтры в Drupal друг с другом и сделайте каждый открытый фильтр в виде отдельного блока

StackOverflow https://stackoverflow.com/questions/3602063

Вопрос

Я создал пользовательский тип контента и используя View2 для создания различных видов страниц. Я использовал таксономию (наличие 4 терминов, скажем, "А", "Б", "С" а также "D") Для более широкой категоризации этого типа содержимого. Есть 4 других таксономии, соответствующие каждому из вышеуказанных условий "А", "Б", "С" а также "D" называется «Таксиномия-А», «Таксиномия-б», «Таксиномия-С» а также «Таксиномия-D» которые используются для дальнейшей подкатегоризации этого типа содержимого в определенной категории (скажем, "А" или "Б" так далее.). Подкатегория «Таксиномия-А» виден в форме редактирования узла только если более широкая категория "А" выбран. Похоже имеет дело с "Б", "С" а также "D" Категории. Теперь на моих представлениях о странице я использовал термины таксономии "А", "Б", "С" а также "D" как мои первые аргументы URL. Таким образом, следующий URL

www.example.com/a.

Предоставляет все опубликованные типы пользовательских контент «Категория A». Подобные будут случаями для «категории B», «категории C» и т. Д. Теперь, чтобы фильтровать мои типы содержимого определенной категории (скажем, «A») в его подкатегории, я создал четыре открытых фильтра, соответствующих каждой таксономии » Таксономия-а "," таксономию-б "," таксономию-C "и" таксономию-D ". Теперь я хотел бы показать только один фильтр на каждом типе «просмотра страницы»; т.е.
Фильтр, соответствующий «таксономию-а» на www.example.com/a. Вид страницы
Фильтр, соответствующий «таксономию-б» на www.example.com/b. Вид страницы
Фильтр, соответствующий «таксономию-C» на www.example.com/c. Вид страницы и т. Д.

Если я настрою основную настройку представления, чтобы показать фильтр в отдельном блоке, затем блок фильтра содержит все четыре фильтра плюс применить кнопку. Но я хочу показать только один фильтр (на основе первого аргумента страницы URL) с помощью кнопки «Применить».

На самом деле я хотел бы отделить все открытые фильтры друг с другом и сделать каждый открытый фильтр в виде отдельного блока, который можно назначить на шаблонную область.Можно ли достичь этого по тематикам (каждый элемент выбора на представленные формы выставленного фильтра имеет разные «ID»)? В противном случае единственный вариант, оставленный со мной, - создать отдельные типы содержимого для каждой категории "А", "Б", "С" а также "D", что не является практическим решением, если количество категорий больших.

Как я могу достичь этого?

Спасибо заранее за ваш ответ!

Это было полезно?

Решение

1. Super Slick

Ну, щелчок способ посмотреть на то, как вы можете изменить представления, чтобы выплавить различные открытые фильтры в разные блоки, возможно, определенные настроек блока DELTA в конфигурации для каждого фильтра. Это было бы аккуратно.

2. Универсал / избыточный / избыточный / FAPI-Cook_Block ()

Получите ваш открытый блок, затем используйте hook_form_alter() Чтобы скрыть фильтры, которые вы хотите надеть на другой блок. Затем создайте новые блоки программно в новом модуле (или если вам абсолютно обязательно должен, модуль фильтра PHP и пользовательский блок через графический интерфейс). В этом модуле повторите необходимую элементы формы в этом блоке, включая уникальный открытый фильтр. Полезно помнить, что открытые фильтры не заботятся о форме. Они заботятся о крючке. Вы можете ввести свои аргументы фильтра в URL, если это нужно.

3. Условная модификация

Реализуйте Hook_form_Alter () для формы, отображаемой в открытом фильтре. Чтобы определить эту форму, вам сначала нужно получить удостоверение личности для views_exposed_form (Не уверены, что это так), затем получите более специфическую идентификацию из массива форм, чтобы нацелить только эту открытую форму. (Вам понадобится это для подхода № 2 в любом случае).

Теперь, когда у вас есть это, вы можете сделать пару вещей. Во-первых, имейте в виду, что если вы агрессивны к кэшированию этого блока в ловушку, это сломается. Кэш на страницу, или на какую-то гранулярность вы намерены менять блок. Для каждого фильтра вы хотите скрыть, вы собираетесь поставить какую-то логику в $form['#access'] Так что Drupal может посмотреть на элемент формы, посмотрите на страницу, и скрыть эту форму, потому что он не используется.

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

$form['taxonomy_b_filter']['#access'] = arg(0) == 'section';

Это говорит Drupal скрыть воображаемое элемент Taxonyyy_b_filter, если текущая страница выглядит как http://example.com/section..

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top