ฉันมีโมดูลที่กำหนดเองใน Drupal 9 (แสดงบล็อกในภูมิภาค) ที่มีแบบฟอร์มผู้ดูแลระบบพร้อมช่องทำเครื่องหมายสำหรับแสดงเฉพาะใน "หน้าแรก" หรือหากไม่ได้เลือกในหน้า "ทั้งหมด"
เพื่อให้บล็อกแสดงในหน้าแรกหรือทุกหน้า ฉันต้องมีฟังก์ชันประมวลผลล่วงหน้าก่อนที่จะโหลดบล็อกหรือไม่ build() เกิดขึ้นเพียงครั้งเดียวแล้วแคชหรือไม่ ถ้าเป็นเช่นนั้น เราจะแจ้งให้บล็อกทราบได้อย่างไรว่าหน้าใดอยู่ในโปรแกรม
ฉันมีฟังก์ชั่นการสร้างอย่างง่ายเพื่อทดสอบสิ่งนี้ (build() อยู่ภายใน src/plugin/block) ซึ่งใช้งานไม่ได้:
สร้างฟังก์ชั่นสาธารณะ () {
$alert_front = \Drupal::config('alert_front.settings')->get('ด้านหน้า');
$current_is_front = \Drupal::service('path.matcher')->isFrontPage();
ถ้า ($current_is_front) {
กลับ [
'#markup' => $this->t("ใช่ หน้าแรกเท่านั้น"),
];
}อื่น{
กลับ [
'#markup' => $this->t('@alert และ @fp',[
'@alert' => alertType($alert_type),
'@fp' => $alert_front,
]),
];
}
}
Drupal block api ไม่ได้ให้อะไรฉันมากที่นี่ แต่ฉันจะขุดต่อไป ขอบคุณสำหรับความคิดใด ๆ