Як змінити програмно відкриті фільтри у видах


10

У мене перегляд сторінки з відкритими фільтрами. Одним із фільтрів є терміновий словник, і ось у випадаючому списку користувач може вибрати лише одну категорію (термін).

Я хочу встановити програмно один термін із випадаючого списку, коли я прийшов з певної URL-адреси. Я спробував, views_query_alterде $categoryє tid.

 $set_exposed_input  = array();
 $set_exposed_input['field_category_tid'] = $category;

 if ($set_exposed_input) {
    $view->set_exposed_input($set_exposed_input);
 }

Ось також корисне посилання: groups.drupal.org/node/82219#comment-1116663
Андрій Руденко

Відповіді:


14

Для drupal 7 можна використовувати

$view->exposed_input[$key] = $value;

Це є

$view->exposed_input['title'] = 'My title is a cat';

Для повного прикладу ви можете спробувати це:

$name = 'name_of_view';
$display = 'page_1';
$alter = array('exposed' =>array('title' => 'title_value'));

$view = views_get_view($name);
$view->init_display($display);
$view->preview=TRUE;
$view->is_cacheable = FALSE;


if(isset($alter['exposed'])){
  foreach($alter['exposed'] as $key => $valor){

     $view->exposed_input[$key] = $valor;

  }
}

$view->pre_execute();
$output = $view->display_handler->preview();
$view->post_execute();

print_r($view->result);

Інший спосіб - це використання функції перегляду set_option

$filters = $view->display_handler->get_option('filters');

foreach($alter['exposed'] as $key => $valor){
   $filters[$key]['value'] = $valor;
   $view->display_handler->set_option('filters', $filters);
}

1
куди ви розміщуєте це, у попередньому виконанні чи щось подібне?
Міка А.

У видах tpl! І повний приклад, де б вона не мала функцію перегляду навантаження
rafinskipg

1
Ви також можете додати його до mock_views_pre_view
Квентін Кемпбелл

5
Файл tpl повинен використовуватися для відображення наданого вмісту, а не для встановлення бізнес-логіки. Спробуйте один з інших безлічі гачок переглядів: api.drupal.org/api/views/views.api.php/7
aaronbauman

Що з фільтром, що не піддається впливу? У мене дуже рідкісний випадок використання, і мені потрібно встановити значення фільтра за спеціальним кодом.
Кодіум

1

Встановіть таке значення фільтра:

$view->exposed_input['field_category_tid'] = $category;

1

з Drupal 7.54, коли ви хочете програмно обробити відкритий фільтр, саме так ви робите це, коли у вас є кілька значущих полів. Як вирішити, як пройти відкритий фільтр, слід вирішити, як зробити URL-адресу.

Тут: view_name? Alias ​​[1] = 1

$view = views_get_view('view_name');
$view->init_display('display_id');

$filters = array('alias' => array('1'));
$view->set_exposed_input($filters);

$view->execute();

Ви можете виконати це з будь-якого місця. Переважно з файлу модуля.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.