Tôi đã tạo hai nút hành động tùy chỉnh VBO. Một bản in các đơn đặt hàng, cái kia cập nhật chúng. Nhấp vào một cái sẽ vô hiệu hóa nó và cái kia cho đến khi trang tải lại (mất tất cả các đơn đặt hàng đã kiểm tra).
Làm cách nào tôi có thể yêu cầu nút in xây dựng lại/làm mới/tải lại trang hoặc nói cách khác là làm cho các nút khả dụng trở lại và duy trì các mục đã chọn, nếu có thể.
Đây là mã duy nhất cho hai nút:
class PrintOrderAction extends ViewsBulkOperationsActionBase thực hiện ContainerFactoryPluginInterface {
...
chức năng công khai thực thi (Đơn hàng $order = NULL) {
$this->executeMultiple([$order]);
return $this->t('Hóa đơn đặt hàng đã in');
}
hàm công khai execMultiple(mảng $orders) {
cố gắng {
(StreamedResponse mới(function() sử dụng ($orders){
$this->printBuilder->deliverPrintable($orders, $this->entityPrintPluginManager->createSelectedInstance('pdf'), TRUE);
}))->gửi();
}
bắt (PrintEngineException $e){
$this->messenger()->addError(new FormattableMarkup(Xss::filter($e->getMessage()), []));
}
}
}
...
lớp FulfillOrderAction mở rộng ViewsBulkOperationsActionBase {
...
chức năng công khai thực thi (Đơn hàng $order = NULL) {
if(!$state = $order->getState()){
return $this->t('Đơn hàng #:số không thể thay đổi trạng thái',[
':number' => $order->getOrderNumber(),
]);
}
$order_state_transitions = $state->getTransitions();
if(!is_null($order_state_transitions['validate'])) {
$state->applyTransition($order_state_transitions['validate']);
$order->save();
}
return $this->t('Đơn hàng #:số được đánh dấu là hoàn thành', [
':number' => $order->getOrderNumber(),
]);
}
}
CHỈNH SỬA: Tôi tin rằng điều này có liên quan đến StreamedResponse và cách nó không tải lại trang nhưng khiến biểu mẫu về cơ bản không sử dụng được. Ví dụ: nếu tôi chọn hai mục để in, hãy in chúng rồi thử in lại hai mục đó, không có gì xảy ra. Nếu tôi chọn các mục khác để in, nó sẽ cố gắng thực hiện điều gì đó nhưng cuối cùng cũng hết thời gian.
Có phải Drupal đóng băng biểu mẫu theo một cách nào đó cấm gửi thêm, có lẽ trong một số nỗ lực để loại bỏ các lần gửi kép? Nếu vậy, có cách nào để vô hiệu hóa điều đó cho biểu mẫu cụ thể này không?
Điều đó thậm chí có ý nghĩa. Thực sự đấu tranh với cái này.