Puncte:0

Acțiuni personalizate VBO - resetare după acțiune

drapel gg

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.

Jaypan avatar
drapel de
Nu am răspunsul la întrebarea ta, dar ca o regândire, probabil că aș crea o a treia acțiune care le apelează pe primele două.
Delford Chaffin avatar
drapel gg
@Jaypan - Aceasta este o posibilitate interesantă. Nu mi-am imaginat ca acestea să se aplice mereu la aceleași opțiuni selectate tot timpul și am încercat să-l mențin flexibil. Dar dacă acesta pare să fie modul în care continuă utilizarea în lumea reală, poate că este o idee bună. Mulțumiri!

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.