Рейтинг:0

Получить список применимых способов доставки

флаг ni

Я хотел бы получить список применимых способов доставки для текущей корзины, но в зависимости от выбранного профиля доставки. Я программирую собственный контроллер, который должен возвращать список доступных способов доставки и тарифов, но, очевидно, с учетом корзины и профиля доставки клиента.
Имеет модуль коммерческой доставки любой сервис или класс, который я мог бы использовать для получения этой информации? Может быть, есть какой-то другой способ получить его?

Я читал исходный код из:
Commerce_Shipping\src\Plugin\Commerce\CheckoutPane\ShippingInformation.php
Это плагин CheckoutPane, который отображает параметры доставки на странице оформления заказа. билдпанеформ метод отображает эту форму, и эти строки кода должны дать мне список способов доставки:

 общедоступная функция buildPaneForm (массив $pane_form, FormStateInterface $form_state, массив и $complete_form) {
    ...
    $shipments = $this->order->get('shipments')->referencedEntities();
    ...
    foreach ($shipments as $index => $shipment) {
    ... // все поставки
    }

Но я пробовал это в своем пользовательском контроллере, и он всегда возвращает пустой массив. Я думаю, что должен быть предварительный процесс, который заполняет этот список, но я не могу его найти. Я попытался применить переход состояния, но он не работает.

Рейтинг:0
флаг ni

После тщательного изучения модулей коммерции я нашел способ их получить. Это отрывок исходного кода с основными инструкциями (класс контроллера, возвращающий JSON):

публичная функция getShippingMethods (запрос $ request, $ id) {
          
    $commerce_order = Заказ::загрузить($id);       
    // ... некоторые проверки, чтобы убедиться, что это коммерческий заказ

    $shipments = $commerce_order->get('shipments')->referencedEntities();
    
    $опции = [];
    foreach ($ пересылка как $ пересылка) {     
      утверждать($shipment instanceof ShipmentInterface);      
      $rates = $this->shipmentManager->calculateRates($shipment);
      foreach ($ ставки как $ ставка) {
        $options[] = [ "id" => $rate->getShippingMethodId(), 
                       "метод" => $rate->getService()->getLabel(), 
                       "импорт" => $rate->getAmount()->getNumber(),
                       "описание" => $rate->getDescription()];              
      }
    }
            
    // Возвращаем JSON со всеми способами доставки
    вернуть новый JsonResponse($options);
  }

Надеюсь, это может помочь кому-то.

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

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