ฉันได้สร้างปุ่มการดำเนินการแบบกำหนดเองของ VBO สองปุ่มแล้ว คนหนึ่งพิมพ์คำสั่ง อีกคนอัปเดต การคลิกหนึ่งครั้งจะเป็นการปิดใช้งานและการคลิกอีกครั้งจนกว่าหน้าจะโหลดซ้ำ (สูญเสียคำสั่งที่ตรวจสอบทั้งหมด)
ฉันจะให้ปุ่มพิมพ์สร้างใหม่/รีเฟรช/โหลดหน้าใหม่ หรือทำให้ปุ่มใช้งานได้อีกครั้งและรักษารายการที่เลือกไว้ได้อย่างไร ถ้าเป็นไปได้
นี่คือรหัสเฉพาะสำหรับสองปุ่ม:
คลาส PrintOrderAction ขยาย ViewsBulkOperationsActionBase ใช้ ContainerFactoryPluginInterface {
...
ดำเนินการฟังก์ชั่นสาธารณะ (สั่งซื้อ $ สั่งซื้อ = NULL) {
$this->executeMultiple([$คำสั่ง]);
ส่งคืน $this->t('พิมพ์ใบแจ้งหนี้การสั่งซื้อ');
}
ฟังก์ชั่นสาธารณะ executeMultiple (อาร์เรย์ $ คำสั่ง) {
พยายาม {
(StreamedResponse(function() ใหม่ใช้ ($orders){
$this->printBuilder->deliverPrintable($orders, $this->entityPrintPluginManager->createSelectedInstance('pdf'), TRUE);
}))->ส่ง();
}
จับ (PrintEngineException $e){
$this->messenger()->addError(new FormattableMarkup(Xss::filter($e->getMessage()), []));
}
}
}
...
คลาส FulfillOrderAction ขยาย ViewsBulkOperationsActionBase {
...
ดำเนินการฟังก์ชั่นสาธารณะ (สั่งซื้อ $ สั่งซื้อ = NULL) {
ถ้า(!$state = $order->getState()){
ส่งคืน $this->t('Order #:number can\'t change state',[
':number' => $order->getOrderNumber(),
]);
}
$order_state_transitions = $state->getTransitions();
if(!is_null($order_state_transitions['validate'])) {
$state->applyTransition($order_state_transitions['ตรวจสอบความถูกต้อง']);
$order->save();
}
ส่งคืน $this->t('Order #:number สำเร็จแล้ว', [
':number' => $order->getOrderNumber(),
]);
}
}
แก้ไข: ฉันเชื่อว่าสิ่งนี้เกี่ยวข้องกับ StreamedResponse และวิธีที่มันไม่โหลดหน้าซ้ำ แต่ปล่อยให้แบบฟอร์มใช้งานไม่ได้ ตัวอย่างเช่น ถ้าฉันเลือกสองรายการที่จะพิมพ์ พิมพ์ออกมาแล้วลองพิมพ์ทั้งสองอีกครั้ง จะไม่มีอะไรเกิดขึ้น หากฉันเลือกรายการอื่นที่จะพิมพ์ ระบบจะพยายามทำบางอย่าง แต่ในที่สุดก็หมดเวลา
Drupal ระงับแบบฟอร์มในทางใดทางหนึ่งที่จะห้ามการส่งต่อไป หรือบางทีในความพยายามที่จะกำจัดการส่งซ้ำซ้อนหรือไม่ ถ้าเป็นเช่นนั้น มีวิธีปิดการใช้งานสำหรับแบบฟอร์มนี้หรือไม่?
มันสมเหตุสมผลไหม ลำบากจริงๆกับเรื่องนี้