Puncte:0

Obțineți o listă cu metodele de expediere aplicabile

drapel ni

Aș dori să obțin lista metodelor de expediere aplicabile pentru coșul actual, dar depind de profilul de expediere selectat. Programez un controler personalizat care ar trebui să returneze lista metodelor și tarifelor de expediere disponibile, dar, evident, să aibă un coș și profilul de expediere al unui client.
Are modul de expediere comercială vreun serviciu sau clasă pe care l-aș putea folosi pentru a obține aceste informații? Poate, există vreo altă modalitate de a-l obține?

Am citit codul sursă din:
Commerce_Shipping\src\Plugin\Commerce\CheckoutPane\ShippingInformation.php
Acesta este pluginul CheckoutPane care redă opțiunile de expediere în pagina de finalizare a achiziției. buildPaneForm metoda redă acest formular, iar acele linii de cod ar trebui să-mi ofere lista metodelor de expediere:

 funcția publică buildPaneForm(array $pane_form, FormStateInterface $form_state, array &$complete_form) {
    ...
    $shipments = $this->order->get('shipments')->referencedEntities();
    ...
    foreach ($shipments ca $index => $shipment) {
    ... // toate transporturile
    }

Dar l-am încercat în controlerul meu personalizat și returnează întotdeauna o matrice goală. Cred că ar trebui să existe un proces anterior care să populeze această listă, dar nu o găsesc. Am încercat să aplic o tranziție de stare, dar nu funcționează.

Puncte:0
drapel ni

După câteva cercetări aprofundate asupra modulelor de comerț, am găsit o modalitate de a le obține. Acesta este un fragment din codul sursă cu instrucțiunile principale (clasa de controler care returnează JSON):

funcția publică getShippingMethods(Solicitare $cerere, $id) {
          
    $commerce_order = Comanda::load($id);       
    // ... unele verificări pentru a se asigura că este o comandă comercială

    $shipments = $commerce_order->get('shipments')->referencedEntities();
    
    $opțiuni = [];
    foreach ($shipments ca $shipment) {     
      assert($execuție de expediere a Interfeței de expediere);      
      $rate = $this->shipmentManager->calculateRates($shipment);
      foreach($rate ca $rate) {
        $options[] = [ "id" => $rate->getShippingMethodId(), 
                       "method" => $rate->getService()->getLabel(), 
                       "import" => $rate->getAmount()->getNumber(),
                       "descriere" => $rate->getDescription()];              
      }
    }
            
    // Returnează JSON cu toate metodele de expediere
    returnează JsonResponse nou ($opțiuni);
  }

Sper că ar putea ajuta pe cineva.

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.