ฉันมีมุมมองที่ต้องตั้งค่าเริ่มต้นสำหรับตัวกรองที่เปิดเผยตามฟิลด์เอนทิตีผู้ใช้ สิ่งนี้ใช้งานได้จริง:
ฟังก์ชัน MYMODULE_views_pre_build(\Drupal\views\ViewExecutable $view) {
ถ้า ($view->current_display !== 'MY_VIEW_DISPLAY') {
กลับ;
}
$exposedFilterValues = $view->getExposedInput();
ถ้า (!array_key_exists('MY_FIELD', $exposedFilterValues)) {
$personalizedDefaultValue = $someUserEntity->getMyCustomDefaultFilterValue();
$view->setExposedInput(array_merge($exposedFilterValues, ['MY_FIELD' => $personalizedDefaultValue] );
$view->element['#cache']['tags'] = Cache::mergeTags($view->element['#cache']['tags'] ?? [], $someUserEntity->getCacheTags() );
}
}
แต่:
หน้ามุมมองนี้ยังมีตัวกรองตามบริบทที่กรองฟิลด์ที่แตกต่างไปจากเดิมอย่างสิ้นเชิง ทันทีที่ค่าตัวกรองตามบริบทปรากฏใน URL โค้ดด้านบนจะยังคงทำงาน แต่จะไม่มีผลกับส่วนหน้า หากไม่มีค่าตัวกรองตามบริบท ก็จะทำงานได้อย่างสมบูรณ์
เหตุใดโค้ดสำหรับฟิลด์ที่เปิดเผยจึงไม่ทำงานเมื่อมีค่าตามบริบทของฟิลด์ที่แตกต่างกันโดยสิ้นเชิง