समय पर रेंडर करने के बजाय हुक में इन्हें बदलना बेहतर होगा ताकि आप साइट के प्रदर्शन और कैशिंग को कम न करें। मुझे यह समझने के लिए उम्र लग गई कि हुक_व्यूज_पर_बिल्ट () आग में बहुत देर हो जाती है, आपको हुक_व्यूज_पर_व्यू () की आवश्यकता है ।
मुझे $ दृश्य का उपयोग करने के लिए संदर्भ मिला-> add_item () लेकिन उदाहरण के लिए संघर्ष किया गया, नीचे कुछ विशेष शब्दों को शामिल करने के लिए केवल वर्गीकरण शब्दों के एक सेट को फ़िल्टर करने के लिए मेरा समाधान था:
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);
}
}
}
नोट संपादित करें : do समूह की इस टिप्पणी से मुझे यह पता लगाने में मदद मिली कि किस तरह से व्यू फिल्टरों का उपयोग किया जा सकता है $view->display_handler->get_option('filters')
और फिर उन्हें उपयोग करने से ओवरराइड किया जा सकता है $view->display_handler->override_option('filters', $filters);
।
dpm($view);
?