Я создал две кнопки настраиваемых действий VBO. Один печатает заказы, другой обновляет их. Щелчок по одному из них отключает его, а другой — до перезагрузки страницы (с потерей всех проверенных заказов).
Как я могу заставить кнопку печати перестроить/обновить/перезагрузить страницу или иным образом снова сделать кнопки доступными и сохранить отмеченные элементы, если это возможно.
Вот уникальный код для двух кнопок:
class PrintOrderAction расширяет ViewsBulkOperationsActionBase, реализует ContainerFactoryPluginInterface {
...
выполнение публичной функции (заказ $order = NULL) {
$this->executeMultiple([$order]);
return $this->t('Распечатанный счет(-а) заказа');
}
публичная функция executeMultiple (массив $ заказов) {
пытаться {
(новый StreamedResponse (функция () использовать ($ заказы) {
$this->printBuilder->deliverPrintable($orders, $this->entityPrintPluginManager->createSelectedInstance('pdf'), TRUE);
}))->отправить();
}
поймать (PrintEngineException $e){
$this->messenger()->addError(new FormattableMarkup(Xss::filter($e->getMessage()), []));
}
}
}
...
класс FulfillOrderAction расширяет ViewsBulkOperationsActionBase {
...
выполнение публичной функции (заказ $order = NULL) {
если(!$state = $order->getState()){
return $this->t('Заказ №:номер не может изменить состояние',[
':number' => $order->getOrderNumber(),
]);
}
$order_state_transitions = $state->getTransitions();
if(!is_null($order_state_transitions['validate'])) {
$state->applyTransition($order_state_transitions['validate']);
$ заказ-> сохранить();
}
return $this->t('Заказ №:номер помечен как выполненный', [
':number' => $order->getOrderNumber(),
]);
}
}
РЕДАКТИРОВАТЬ: я считаю, что это связано с StreamedResponse и с тем, как он не перезагружает страницу, но оставляет форму практически непригодной для использования. Например, если я выберу два элемента для печати, напечатаю их, а затем снова попытаюсь напечатать эти два элемента, ничего не произойдет. Если я выберу другие элементы для печати, он попытается что-то сделать, но в конце концов истечет время ожидания.
Замораживает ли Drupal форму каким-то образом, чтобы запретить дальнейшие отправки, возможно, в какой-то попытке устранить двойные отправки? Если да, то есть ли способ отключить это для этой конкретной формы?
Имеет ли это даже смысл. Реально борюсь с этим.