뷰에서 프로그래밍 방식으로 노출 된 필터를 변경하는 방법


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);
 }


답변:


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
사전 실행 또는 이와 비슷한 위치에서 이것을 어디에 배치합니까?
Mika A.

보기에서 tpl! 전체 예제는로드 뷰 기능을 가지고 있습니다
rafinskipg

1
또한 hook_views_pre_view에 추가 할 수 있습니다
쿠엔틴 캠벨에게

5
tpl 파일은 비즈니스 로직을 설정하지 않고 렌더링 된 컨텐츠를 표시하는 데 사용해야합니다. 다른 수많은 관점 중 하나를 시도하십시오 : api.drupal.org/api/views/views.api.php/7
aaronbauman

비노출 필터는 어떻습니까? 매우 드문 유스 케이스가 있으며 사용자 정의 코드로 필터 값을 설정해야합니다.
Codium

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();

원하는 곳 어디에서나 실행할 수 있습니다. 바람직하게는 모듈 파일로부터.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.