Làm cách nào để thay đổi các bộ lọc được hiển thị theo chương trình trong chế độ xem


10

Tôi có một trang xem với các bộ lọc tiếp xúc. Một trong những bộ lọc là từ vựng thuật ngữ và đó là danh sách thả xuống, người dùng chỉ có thể chọn một danh mục (thuật ngữ).

Tôi muốn đặt lập trình một thuật ngữ từ danh sách thả xuống khi tôi đến từ URL cụ thể. Tôi đã thử với views_query_alternơi $categorytid.

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

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

Đây cũng là liên kết hữu ích: Groups.drupal.org/node/82219#comment-1116663
Andrey Rudenko

Câu trả lời:


14

Đối với drupal 7, bạn có thể sử dụng

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

Đây là

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

Để có một ví dụ đầy đủ, bạn có thể thử điều này:

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

Một cách khác là sử dụng hàm view 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
Bạn đặt cái này ở đâu, trong một khung nhìn trước khi thực hiện hoặc một cái gì đó tương tự?
Mika A.

Trong quan điểm tpl! Và ví dụ đầy đủ, ở bất cứ đâu, nó có chức năng xem tải
rafinskipg

1
Bạn cũng có thể thêm nó vào hook_view_pre_view
Quentin Campbell

5
Tệp tpl nên được sử dụng để hiển thị nội dung được hiển thị, không đặt logic nghiệp vụ. Vui lòng thử một trong số vô số lượt xem khác: api.drupal.org/api/view/view.api.php/7
aaronbauman

Còn bộ lọc không tiếp xúc thì sao? Tôi có trường hợp sử dụng rất hiếm và tôi cần đặt giá trị bộ lọc theo mã tùy chỉnh.
Codium

1

Đặt giá trị bộ lọc được hiển thị như thế này:

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

1

với Drupal 7.54 khi bạn muốn xử lý bộ lọc tiếp xúc theo chương trình, đây là cách bạn thực hiện khi bạn có nhiều trường có giá trị. Giải pháp để xem cách vượt qua bộ lọc bị lộ là làm theo cách URL được tạo.

Ở đây: view_name? Bí danh [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();

Bạn có thể thực hiện điều này từ bất cứ nơi nào bạn muốn. Tốt nhất là từ các tập tin mô-đun.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.