Я делаю новый способ доставки, и мне нужно добавить новый столбец, чтобы проверить стоимость доставки. Данные будут поступать из пользовательских настроек способа доставки, например, описание метода. Или какое-то поле ввода, в которое клиент может добавить информацию (данные, вероятно, будут сохранены в цитате, а затем по порядку).
Вероятно, самая простая часть всего - реализовать шаблон с помощью
Magento_Checkout/web/template/shipping.html
Это просто нужно
<div data-bind="text: method.description"></div>
Проблема в том, что я не могу понять, как добавить пользовательские данные. Недостаточно добавить это:
public function collectRates(RateRequest $request)
{
if (!$this->isActive()) return false;
$method = $this->rateMethodFactory->create();
$method->setData('carrier', $this->getCarrierCode());
$method->setData('carrier_title', $this->getConfigData('title'));
$method->setData('method_title', $this->getConfigData('title'));
$method->setData('method', $this->getCarrierCode());
$method->setPrice($this->_price);
$method->setData('cost', $this->_price);
// custom
$method->setData('description', $this->getConfigData('description'));
$result = $this->rateResultFactory->create();
$result->append($method);
return $result;
}
Данные для html поступают из js rate (), которая получает данные из API:
<route url="/V1/carts/:cartId/shipping-methods" method="GET">
<service class="Magento\Quote\Api\ShippingMethodManagementInterface" method="getList"/>
<resources>
<resource ref="Magento_Cart::manage" />
</resources>
</route>
После этого есть много шагов, в то время как что-то действительно собирается. я нашел
Magento \ Цитата \ Модель \ Корзина \ ShippingMethodConverter modelToDataObject ()
это выглядело многообещающе, но если я попытаюсь добавить свой атрибут, ничего не произойдет.
Таким образом, мой вопрос, есть ли способ добавить новые данные к стоимости доставки? В М1 это было возможно. Было бы сумасшествием, если бы М2 это было невозможно.
Есть много причин, почему это должно быть возможно. Например, если я хотел сделать метод «забрать в магазине» с выпадающим списком нескольких магазинов или что-то подобное.