Измените выбор по умолчанию для фильтра просмотра 2
На мой взгляд, у меня есть открытый фильтр, который позволяет пользователям выбирать между двумя различными типами контента. Значение по умолчанию для открытого фильтра, по-видимому, выбирается тем типом контента, который стоит первым в алфавитном порядке. Итак, если я позволю пользователям выбирать между типами контента "Группа" и "Песня", по умолчанию будет "Группа". Я хочу изменить это значение по умолчанию на другой тип контента ("Песня" в приведенном здесь примере). Я не могу найти для этого опцию в интерфейсе представлений. Должен ли я это делать сделать это через hook_form_alter
? Если да, то как именно я это сделаю?
5 answers
Итак, я попробовал поступить так, как предложил @David Lanier, но не смог до конца осознать это. Поэтому я вернулся к основам Drupal и попробовал использовать подход hook_form_alter()
. После некоторого устранения неполадок я также нашел сообщение об изменении значений фильтра представлений по умолчанию. Я применил тот же подход и заставил его работать. Ниже приведен используемый код a с несколькими изменениями, чтобы удалить материалы, относящиеся к моему сайту. Как всегда, обязательно замените "имя модуля" именем вашего модуль.
function modulename_form_alter(&$form, $form_state, $form_id) {
// is this the right form?
if($form['#id'] == 'name-of-the-views-form-displayed') {
if (empty($_GET['label-of-the-filter'])) {
$form_state['input']['label-of-the-filter'] = 'default-value-for-filter';
}
}
}
Просто замените name-of-the-views-form-displayed
, как вы уже догадались, именем формы представлений, которую вы хотите изменить. Самый простой способ найти это - проверить источник представления в браузере (я люблю Firebug за это) и найти элемент form
, а затем захватить его атрибут id
. Чтобы найти название фильтра и значение, которое вы должны установить, измените фильтры и выполните "поиск". Загляните в адресную строку, и вы увидите значения, которые вам нужно использовать здесь в качестве параметров в URL-адресе.
Надежда это также помогает другим обойти эту проблему!
Я сделал так
function hook_form_views_exposed_form_alter(&$form, &$form_state) {
global $user;
$account = user_load($user->uid);
$term = taxonomy_term_load($account->field_user_industry[LANGUAGE_NONE]['0']['tid']);
unset($form['field_event_industry_tid']['#size']);
if ($form['#id'] == 'views-exposed-form-events-events-pane') {
// get the view argument if defined
$term_filter=$_GET;
unset($term_filter['q']);
$term_arg = $term_filter;
if (!empty($term_arg)) {
$terms = $term_arg;
}
// change our input as required
if (isset($terms)) {
$form_state['input']['field_event_industry_tid'] = $terms['field_event_industry_tid'];
}
else{
$form_state['input']['field_event_industry_tid'] = $term->tid;
}
}
}
В моем случае мне пришлось изменить значение по умолчанию в соответствии с запросом, но если это не так, я использую нужное значение, этот способ отлично работает!
Как только фильтр будет открыт, в параметрах конфигурации фильтра вы должны увидеть флажки для каждого типа контента на вашем сайте. Те, которые вы отмечаете здесь, - это те, которые выбираются по умолчанию, когда конечный пользователь видит представление.
Если вам нужно, чтобы в форме были доступны только некоторые из ваших типов контента, и только некоторые из предварительно выбранных, вам нужно будет сделать что-то вроде этого: Добавьте два фильтра типов контента:
- Фильтр 1 = только типы контента это должно быть доступно. Не подвергайте этот фильтр воздействию.
- Фильтр 2 = открытый фильтр. Выберите здесь те, которые должны быть предварительно выбраны по умолчанию.
Возможно, вы уже получили ответ, но вот как я решил. Если вы отредактируете фильтр в представлении, появится опция " Ограничить список выбранными элементами ". Я проверил эту опцию, и значение по умолчанию было сброшено, так что теперь значение фильтра по умолчанию - Все (с тегом Any).
Смотрите нижнюю часть поста по адресу:
Если вы не выберете какой-либо из вариантов в поле Пол клиента и установите флажок Необязательно, этот открытый фильтр является необязательным и будет иметь дополнительные параметры, позволяющие его не устанавливать. флажок, то будет выбран по умолчанию. Если вы выберете Мужской элемент, то ваш выбор по умолчанию будет мужским при отображении представления.