Программно выставить default_value у exposed filters во views

Если вам нужно выставить значения по умолчанию для некоторых раскрытых фильтров во вьюс программно, то вам не поможет хук _form_alter, потому что раскрытые фильтры не оттуда берут default_value.
Оказывается, нужно использовать хук _views_pre_build(&$view), в котором изменять handler нужного фильтра, примерно так:

function zz_np_views_pre_build(&$view) {
  if (isset($view->display[$view->current_display]->handler->handlers['filter']['field_tags_geography_tid'])) {
    $view->display[$view->current_display]->handler->handlers['filter']['field_tags_geography_tid']->value =array(2900 => 2900);
  }
  return;
}

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

Удачи!

Комментарии

Максим 21.09.2014 - 18:27

А как быть если значение по умолчанию должно быть пустым, т.е представление должно выводить содержимое только после выбора значения в фильтре?

Nikita Petrov 13.10.2014 - 11:04

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

Иван 03.01.2015 - 07:17

Никита, здравствуйте!
Подскажите пожалуйста, в какой файл вставлять код хука views_pre_build ?
В template.tpl.php , или нужно оформить как сомостоятельный модуль?

Nikita Petrov 12.01.2015 - 22:15

Иван, я всегда в отдельный модуль все хуки вставляю, в template.tpl.php добавляю только те хуки, которые отвечают за вывод информации на экран, т.е. например хуки _preprocess_page, preprocess_node и т.д. Но есть вероятность что и в template.tpl.php хук views_pre_build _может_ работать. Но повторюсь, это идеологически неправильно, лучше логику в отдельный модуль вставлять, а в теме - оставить только оформление внешнего вида.

Добавить комментарий