Điểm:0

Hành động tùy chỉnh VBO - đặt lại sau hành động

lá cờ gg

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.

Jaypan avatar
lá cờ de
Tôi không có câu trả lời cho câu hỏi của bạn, nhưng khi suy nghĩ lại, có lẽ tôi sẽ chỉ tạo một hành động thứ ba gọi hai hành động đầu tiên.
Delford Chaffin avatar
lá cờ gg
@Jaypan - Đó là một khả năng thú vị. Tôi không hình dung chúng nhất thiết lúc nào cũng áp dụng cho cùng một phương án đã chọn và cố gắng giữ cho nó linh hoạt. Nhưng nếu đó dường như là cách tiếp tục sử dụng trong thế giới thực, thì có lẽ đó là một ý tưởng hay. Cảm ơn!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.