Drupal 7: Создание фильтра таксономии с помощью флажков

Я хочу создать страницу с фильтром таксономии, используя флажки, и когда один или несколько флажков отмечены, это создает список страниц ниже, которые помечены выбранной таксономией. Например, фильтр может содержать категории A, B, C, D и E в качестве флажков. Если пользователь отметит категорию A и категорию D, а затем нажмет кнопку отправки, все страницы, связанные с категориями A и D, будут перечислены ниже.


Кажется, борются с использованием обоих методов! У кого-нибудь есть учебник или пошаговое руководство, которое я мог бы использовать? В противном случае, может ли кто-нибудь помочь со следующими вопросами?

  1. Я создал форму в block--block--1.tpl.php, получив теги таксономии с помощью taxonomy_get_tree(1); и прокручивая их, чтобы создать флажки. Я надеялся, что смогу каким-то образом получить данные публикации и создать список событий (страниц), содержащих выбранные теги. Где бы я сделал PHP для этого? Я предполагаю, что этого не будет в файле шаблона, поэтому он будет в моем пользовательском модуле? Если да, то как?

  2. Я думал о создании формы и использовании hook_form_FORM_ID_alter, но как мне создать форму с помощью тегов таксономии? Как мне тогда добавить эту форму в свой блок?

  3. Любые другие варианты?

Спасибо


person Derek Carlisle    schedule 09.02.2012    source источник


Ответы (3)


Вы можете сделать это с помощью превосходного модуля Views. Представления позволяют создавать настраиваемые списки содержимого, которые пользователь может настроить для фильтрации. Здесь есть хорошая статья о создании фильтруемого списка с представлениями.

http://www.advomatic.com/blogs/amanda-luker/build-filterable-staff-directory-drupal-6-or-7

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

person SpaceBeers    schedule 09.02.2012
comment
Как настроить фильтрацию по пользователю?? - person Derek Carlisle; 15.02.2012
comment
Вы должны убедиться, что ваше представление является страницей, и использовать контекстные фильтры. - person SpaceBeers; 15.02.2012
comment
Хм, а в выпадающем списке нет вариантов для этого? Я предполагаю, что мне нужно выбрать «Содержание: имеет идентификатор термина таксономии», но не вижу никаких вариантов, позволяющих пользователям фильтровать результаты. - person Derek Carlisle; 16.02.2012
comment
Точно, сейчас я куда-то денусь. Я просматривал контекстные фильтры в разделе «Дополнительно», а не просто «Критерии фильтрации». Теперь мне просто нужно изменить раскрывающийся список на флажки, хм. - person Derek Carlisle; 16.02.2012
comment
Мне удалось изменить его на флажки, в конце концов довольно легко используя: - person Derek Carlisle; 16.02.2012
comment
Готово, спасибо. Кстати, я поставил их как галочки, но почему-то они автоматически проверяются при загрузке страницы. Я предполагаю, что могу изменить это в mymodule_form_alter, но не уверен, что заставляет их проверяться, есть идеи? - person Derek Carlisle; 16.02.2012
comment
Спасибо. Вы сможете подключиться к форме, чтобы изменить это. - person SpaceBeers; 16.02.2012

Другим вариантом может быть использование решения Faceted Search, такого как http://drupal.org/project/facetapi. Он работает с любым базовым поисковым решением, включая SOLR, если у вас большие объемы.

person Countzero    schedule 10.02.2012
comment
Есть ли демо этого где-нибудь? Звучит довольно интересно. - person SpaceBeers; 10.02.2012
comment
Не знаю о демо, но эта страница wunderkraut.com/en/blog/ содержит интересную информацию с примером реализации и ссылками на сопутствующие модули. - person Countzero; 11.02.2012

Чтобы изменить фильтр с выбора на флажки, я сделал следующее:

function mymodule_form_alter(&$form, &$form_state, $form_id) {

switch ($form_id) {
case 'views_exposed_form':
    $form['tid']['#type'] = 'checkboxes';
break;
    }
}
person Derek Carlisle    schedule 16.02.2012