ฉันใช้บล็อกมุมมองในเว็บไซต์ของฉัน เนื้อหาของมุมมองนี้ถูกกรองโดยทางโปรแกรม ตอนนี้ฉันได้รับข้อความจากผู้ใช้ที่เห็นข้อมูลที่ไม่ถูกต้อง ตัวกรองจะขึ้นอยู่กับผู้ใช้ที่เข้าสู่ระบบในปัจจุบัน เนื่องจากฉันต้องการข้อมูลนี้ในตัวกรองปกติ ไม่ใช่ในตัวกรองตามบริบท ฉันจึงสร้างโมดูลอย่างง่ายเพื่อเปลี่ยนค่าตัวกรอง
ตัวกรองของฉันเป็นดังนี้:
(
ประเภทเนื้อหา = contenttype_a
และ
uid(ผู้เขียนโหนด) = */ค่านี้ถูกเพิ่มโดยทางโปรแกรม*/
)
หรือ
(
ประเภทเนื้อหา = contenttype_b
และ
user_target_id(reference) = */ค่านี้ถูกเพิ่มโดยทางโปรแกรม*/
)
กว่าที่ฉันใช้สิ่งนี้ในโมดูลของฉัน:
*/
ฟังก์ชัน entity_access_views_pre_view(ViewExecutable $view, $display_id, อาร์เรย์ &$args){
$currentUser = \Drupal::currentUser();
$cuid = $currentUser->id();
/* @ มุมมองตัวกรอง: สื่อ */
ถ้า ($view->id() == 'my_view_id') {
ถ้า ($display_id == 'block_1' || $display_id == 'page_1' || $display_id == 'page_2') {
$filters = $view->display_handler->getOption('ฟิลเตอร์');
$filters['uid']['value']['value'] = $cuid;
$filters['user_target_id']['value']['value'] = $cuid;
$view->display_handler->overrideOption('ฟิลเตอร์', $ฟิลเตอร์);
}
}
}
เนื่องจากฉันไม่พบปัญหา ฉันจึงสงสัยว่าข้างต้นทำงานตามที่ฉันต้องการหรือไม่ ฉันเลยอยากจะตรวจดูว่าคุณเห็นอะไรแปลกๆหรือเปล่า สามารถแคชค่าตัวกรองนี้ด้วยวิธีใดวิธีหนึ่งได้หรือไม่ หรืออาจมีวิธีที่ดีกว่าในการทำเช่นนี้
ฉันไม่สามารถใช้ตัวกรองตามบริบท ซึ่งฉันต้องการ เนื่องจากมุมมองแสดงเนื้อหาสองประเภท โดยที่ตัวกรองเนื้อหาแต่ละประเภทควรแตกต่างกัน
ขอบคุณล่วงหน้า.