Bạn nên thay đổi những cái này trong hook hơn là vào thời gian kết xuất để bạn không làm giảm hiệu suất trang web và bộ nhớ đệm. Mất tuổi tôi để tìm ra hook_view_pre_build () cháy quá muộn, bạn cần hook_view_pre_view () .
Tôi đã tìm thấy tài liệu tham khảo về việc sử dụng $ view-> add_item () nhưng đấu tranh cho các ví dụ, dưới đây là giải pháp của tôi để lọc một tập hợp các thuật ngữ phân loại để chỉ bao gồm một số từ vựng nhất định:
function MODULENAME_views_pre_view(&$view, &$display_id, &$args) {
if ($view->name == 'VIEWNAME' && $display_id == 'DISPLAYID') {
// Add all the terms of a vocabulary to the terms listing widget select field
$vids = array();
$vocab = taxonomy_vocabulary_machine_name_load('vocab_name');
$vids[ $vocab->vid ] = $vocab->vid;
// Get the existing filters
$filters = $view->display_handler->get_option('filters');
if (empty($filters['vid'])) {
// There is no vid filter so we have to add it
$view->add_item(
$view->current_display,
'filter',
'taxonomy_term_data',
'vid',
array(
'operator' => 'in',
'value' => $vids,
'group' => 1
)
);
}
else {
// Add to pre-existing filter
foreach($vids as $vid) {
$filters['vid']['value'][ $vid ] = $vid;
}
$view->display_handler->override_option('filters', $filters);
}
}
}
Chỉnh sửa ghi chú : Nhận xét này về nhóm do đã giúp tôi tìm ra cách lấy các bộ lọc chế độ xem bằng cách sử dụng $view->display_handler->get_option('filters')
và sau đó ghi đè chúng bằng cách sử dụng $view->display_handler->override_option('filters', $filters);
.
dpm($view);
?