Magento 2 - На странице оформления заказа идентификатор города отображается в адресе доставки, а не в названии города - PullRequest
0 голосов
/ 15 февраля 2019

Я разместил раскрывающийся список городов на странице оформления заказа.(см. изображение ниже)

раскрывающийся список городов

Эти города были взяты из базы данных.

Таким образом, значение этого города сохраняется какидентификатор в атрибуте city в базе данных, и идентификатор берется и отображается в адресе доставки вместо названия города.(см. изображение ниже).

адрес доставки с городом

Это способ, которым я реализовал раскрывающийся список городов:

.... \ etc \ di.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
   <type name="Magento\Checkout\Block\Checkout\LayoutProcessor">
       <plugin name="talliance_layout_checkout" type="Talliance\SwyftShippingMethod\Plugin\Checkout\Model\Checkout\LayoutProcessor" sortOrder="100"/>
   </type>
</config>

.... \ Plugin \ Checkout \ Model \ Checkout \ LayoutProcessor.php

class LayoutProcessor extends CheckoutLayoutProcessor
{
    protected $_cities;

    public function __construct
    (
   \Magento\Customer\Model\AttributeMetadataDataProvider $attributeMetadataDataProvider,
   \Magento\Ui\Component\Form\AttributeMapper $attributeMapper,
   AttributeMerger $merger,
   City $cities
   )
   {
   $this->_cities = $cities;
   parent::__construct($attributeMetadataDataProvider, $attributeMapper, $merger);
}

/**
 * @param CheckoutLayoutProcessor $subject
 * @param array $jsLayout
 * @return array
 */
public function afterProcess(
    CheckoutLayoutProcessor $subject,
    array  $jsLayout
) {

    $jsLayout['components']['checkout']['children']['steps']['children']['shipping-step']['children']
    ['shippingAddress']['children']['shipping-address-fieldset']['children']['city'] = [
        'component' => 'Magento_Ui/js/form/element/select',
        'config' => [
            'customScope' => 'shippingAddress',
            'template' => 'ui/form/field',
            'elementTmpl' => 'ui/form/element/select',
            'id' => 'city'
        ],
        'dataScope' => 'shippingAddress.city',
        'label' => 'City',
        'provider' => 'checkoutProvider',
        'visible' => true,
        'validation' => [ 'required-entry' => true ],
        'sortOrder' => 250,
        'id' => 'city',
        'options' => $this->_cities->toOptionArray()
    ];
    return $jsLayout;
  }
}

Я хочу отобразить название города вАдрес доставки при оформлении заказа.Кто-нибудь знает, как это сделать?

Ниже приведен код, который я пытался установить и обновить название города вместо идентификатора города этого конкретного клиента с помощью \ Magento \ Customer \ Api \ Data \ AddressInterface.

public function getCustomerCity() {
    $customerCity = '';
    $checkout = $this->_sessionCheckout->getQuote();
    if ($checkout) {
        $shippingAddress = $checkout->getShippingAddress();
        if ($shippingAddress) {

            //Get customer addressId (this variable returns null when I debug).
            $addressId = $shippingAddress->getCustomerAddressId();
            $customerCity = $shippingAddress->getCity();
            if($customerCity) {
                if (is_numeric($customerCity)) {

                    /** @var \Magento\Customer\Api\Data\AddressInterface $address */
                    $address = $this->_addressRepository->getById($addressId);

                    /** @var \Talliance\SwyftShippingMethod\Model\ResourceModel\SrilankanCity\Collection $collection */
                    $collection = $this->_cityCollection->create();
                    //Get city name from the city id
                    $city_name = $collection->getCityName($customerCity);
                    $address->setCity($city_name);
                    $this->_addressRepository->save($address);
                    $customerCity = trim($city_name);
                }
                $this->_logger->log(100, print_r('customer city: ' . $customerCity, true));
            }
        }
    }
    return $customerCity;
}

Но я получаю сообщение об ошибке по адресу addressId = null на странице оформления заказа.Это потому, что мой addressId клиента возвращает нулевое значение.Так что у меня проблемы с исправлением.Если бы кто-нибудь мог это исправить, я был бы очень признателен.

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...