Điểm:0

Nhận danh sách các phương thức vận chuyển áp dụng

lá cờ ni

Tôi muốn nhận danh sách các phương thức vận chuyển áp dụng cho giỏ hàng hiện tại nhưng phụ thuộc vào hồ sơ vận chuyển đã chọn. Tôi đang lập trình một bộ điều khiển tùy chỉnh sẽ trả về danh sách các phương thức và mức phí vận chuyển có sẵn, nhưng rõ ràng là đã cung cấp một giỏ hàng và hồ sơ vận chuyển của khách hàng.
mô-đun vận chuyển thương mại bất kỳ dịch vụ hoặc lớp học nào tôi có thể sử dụng để lấy thông tin này? Có lẽ, có cách nào khác để có được nó?

Tôi đã đọc mã nguồn từ:
Commerce_Shipping\src\Plugin\Commerce\CheckoutPane\ShippingInformation.php
Đó là plugin CheckoutPane hiển thị các tùy chọn lô hàng trong trang thanh toán. buildPaneForm sẽ hiển thị biểu mẫu này và những dòng mã đó sẽ cung cấp cho tôi danh sách các phương thức vận chuyển:

 chức năng công khai buildPaneForm(mảng $pane_form, FormStateInterface $form_state, mảng &$complete_form) {
    ...
    $shipments = $this->order->get('shipments')->referencedEntities();
    ...
    foreach ($lô hàng dưới dạng $index => $shipment) {
    ... // tất cả các lô hàng
    }

Nhưng tôi đã thử nó trong bộ điều khiển tùy chỉnh của mình và Nó luôn trả về mảng trống. Tôi nghĩ rằng nên có một quy trình trước đó điền vào danh sách này, nhưng tôi không thể tìm thấy nó. Tôi đã thử áp dụng chuyển trạng thái nhưng không được.

Điểm:0
lá cờ ni

Sau một số nghiên cứu chuyên sâu về các mô-đun thương mại, tôi đã tìm ra cách để có được chúng. Đây là đoạn trích của mã nguồn với các hướng dẫn chính (lớp trình điều khiển trả về JSON):

hàm công khai getShippingMethods(Request $request, $id) {
          
    $commerce_order = Đơn hàng::load($id);       
    // ... một số kiểm tra để đảm bảo đó là một đơn đặt hàng thương mại

    $shipments = $commerce_order->get('shipments')->referencedEntities();
    
    tùy chọn $ = [];
    foreach ($lô hàng dưới dạng $shipment) {     
      khẳng định($shipment instanceof ShipmentInterface);      
      $rates = $this->shipmentManager->calculateRates($shipment);
      foreach($rate as $rate) {
        $options[] = [ "id" => $rate->getShippingMethodId(), 
                       "phương thức" => $rate->getService()->getLabel(), 
                       "nhập" => $rate->getAmount()->getNumber(),
                       "mô tả" => $rate->getDescription()];              
      }
    }
            
    // Trả về JSON với tất cả các phương thức vận chuyển
    trả lại JsonResponse mới( $options );
  }

Hy vọng nó có thể giúp được ai đó.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.