Рейтинг:0

Пользовательские действия VBO - сброс после действия

флаг gg

Я создал две кнопки настраиваемых действий 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 форму каким-то образом, чтобы запретить дальнейшие отправки, возможно, в какой-то попытке устранить двойные отправки? Если да, то есть ли способ отключить это для этой конкретной формы?

Имеет ли это даже смысл. Реально борюсь с этим.

Jaypan avatar
флаг de
У меня нет ответа на ваш вопрос, но, если подумать, я бы, вероятно, просто создал третье действие, которое вызывает первые два.
Delford Chaffin avatar
флаг gg
@Jaypan - это интересная возможность. Я не предполагал, что они обязательно всегда будут применяться к одним и тем же выбранным параметрам все время, и пытался сохранить гибкость. Но если это похоже на то, как продолжается использование в реальном мире, возможно, это хорошая идея. Спасибо!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.