Am creat două butoane de acțiune personalizate VBO. Unul imprimă comenzi, celălalt le actualizează. Făcând clic pe unul îl dezactivează și pe celălalt până când pagina se reîncarcă (pierderea tuturor comenzilor bifate).
Cum pot face butonul de imprimare să reconstruiască/împrospătească/reîncarcă pagina sau, în alt mod, să fac butoanele disponibile din nou și să mențin elementele bifate, dacă este posibil.
Iată codul unic pentru cele două butoane:
clasa PrintOrderAction extinde ViewsBulkOperationsActionBase implementează ContainerFactoryPluginInterface {
...
funcția publică execute(Order $order = NULL) {
$this->executeMultiple([$comanda]);
return $this->t('Factura(i) de comandă tipărită');
}
funcția publică executeMultiple(matrice $comenzi) {
încerca {
(noua utilizare StreamedResponse(funcție() ($comenzi){
$this->printBuilder->deliverPrintable($comenzi, $this->entityPrintPluginManager->createSelectedInstance('pdf'), TRUE);
}))->trimite();
}
catch (PrintEngineException $e){
$this->messenger()->addError(new FormattableMarkup(Xss::filter($e->getMessage()), []));
}
}
}
...
clasa FulfillOrderAction extinde ViewsBulkOperationsActionBase {
...
funcția publică execute(Order $order = NULL) {
if(!$state = $comanda->getState()){
return $this->t('Comanda #:numărul nu se poate schimba starea',[
':number' => $order->getOrderNumber(),
]);
}
$order_state_transitions = $state->getTransitions();
dacă(!este_null($order_state_transitions['validate'])) {
$state->applyTransition($order_state_transitions['validate']);
$comanda->salvare();
}
return $this->t('Comanda #:numărul marcat ca îndeplinit', [
':number' => $order->getOrderNumber(),
]);
}
}
EDIT: Cred că acest lucru are de-a face cu StreamedResponse și cu modul în care nu reîncarcă pagina, dar lasă formularul practic inutilizabil. De exemplu, dacă selectez două articole de imprimat, le imprimez și apoi încerc să le imprim din nou, nu se întâmplă nimic. Dacă selectez alte articole de imprimat, încearcă să facă ceva, dar în cele din urmă expiră.
Drupal îngheață formularul într-un fel care interzice trimiterile ulterioare, poate într-un efort de a elimina trimiterile duble? Dacă da, există vreo modalitate de a o dezactiva pentru acest formular anume?
Are sens. Chiar mă lupt cu asta.