Как сделать Имя и фамилию необязательными для адресов?


У меня есть сайт Magento 2.15, который почти исключительно продает B2B. У нас не так много клиентов, которые являются просто частными лицами. 99 % из них - это бизнес.

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

Как я могу сделать Первый и Поля фамилии необязательны? Возможно ли, что это будет иметь последствия в других местах? Я знаю, что Magento 2 странно относится к адресам, так как в прошлом у меня были проблемы с адресами по умолчанию, вызывающими ошибки.

TL:DR Как сделать поля "Имя" и "Фамилия" необязательными при вводе адресов доставки и выставления счетов? Это также следует делать в любых других местах, где вводится адрес, например, при регистрации.

Спасибо

Author: Sabiancym, 2017-06-14

1 answers

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

Сначала создайте плагин для Magento\Checkout\Block\Checkout\LayoutProcessor. Определите класс следующим образом:

<?php


namespace Vendor\Module\Plugin;

class LayoutProcessor
{

    public function afterProcess(
        \Magento\Checkout\Block\Checkout\LayoutProcessor $subject,
        $jsLayout
    ) {
        // Make fields not required
        
        $nameLayout = [
            'validation' => [
                'required_entry' => false
            ]
        ];

        // Change in shipping address

        $firstnameField = &$jsLayout['components']['checkout']['children']['steps']['children']['shipping-step']
                          ['children']['shippingAddress']['children']['shipping-address-fieldset']['children']['firstname'];
        $lastnameField = &$jsLayout['components']['checkout']['children']['steps']['children']['shipping-step']
                         ['children']['shippingAddress']['children']['shipping-address-fieldset']['children']['lastname'];

        $firstnameField = array_merge($firstnameField, $nameLayout);

        $lastnameField = array_merge($lastnameField, $nameLayout);

        // Change in billing address

        foreach ($jsLayout['components']['checkout']['children']['steps']['children']['billing-step']['children']
                 ['payment']['children']['payments-list']['children'] as &$child)
        {
            if (isset($child['children']['form-fields'])) {
                $child['children']['form-fields']['children']['firstname'] =
                    array_merge($child['children']['form-fields']['children']['firstname'], $nameLayout);
                $child['children']['form-fields']['children']['lastname'] =
                    array_merge($child['children']['form-fields']['children']['lastname'], $nameLayout);
            }
        }

        return $jsLayout;
    }
}

Все, что для этого нужно, - это изменить поля имени и фамилии на необязательные в формах адреса оформления заказа. Однако, если поля оставлены пустыми, различные проверки адресов, выполняемые на стороне сервера, завершатся неудачей, поэтому есть еще один шаг, чтобы обойти проверку.

Мы сделаем плагин для getFirstname и getLastname методы Magento\Quote\Model\Quote\Address следующим образом:

<?php


namespace Vendor\Module\Plugin;

class Address
{
    public function afterGetFirstname(
        \Magento\Quote\Model\Quote\Address $subject,
        $result
    ) {
        if (empty(trim($result))) {
            return "N/A";
        }

        return $result;
    }

    public function afterGetLastname(
        \Magento\Quote\Model\Quote\Address $subject,
        $result
    ) {
        if (empty(trim($result))) {
            return "N/A";
        }

        return $result;
    }
}

В этом плагине мы проверяем, есть ли у адреса имя и фамилия, связанные с ним. Если нет, то мы выдаем значение-заполнитель, чтобы выполнить проверку. Это намного проще, чем переопределять все классы, участвующие в проверке адресов.

При наличии этих двух плагинов поля имени и фамилии при оформлении заказа будут необязательными.

 5
Author: Aaron Allen, 2020-06-15 08:30:17