Magento 2: Как добавить текст заполнителя в поля улиц при оформлении заказа?

10

В бэк-энде я установил уличный адрес на 3 строки.

Я хотел бы поставить разные заполнители в каждом поле:

  • улица
  • Здание / Квартира
  • Площадь

Таким образом, пользователь может вводить данные более структурированным способом.

Подобный вопрос можно найти здесь:

Magento 2 - Как повлиять на адрес улицы в формах оформления заказа с помощью аргументов макета xml / ui

Однако ответы не обеспечивают решение для включения местозаполнителей в поля адресов улиц.

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

Мой код:

app / code / Jsp / Placeholder / etc / module.xml:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
  <module name="Jsp_Placeholder" setup_version="2.0.0" />
</config>

app / code / Jsp / Placeholder / registration.php:

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
  \Magento\Framework\Component\ComponentRegistrar::MODULE,
  'Jsp_Placeholder',
  __DIR__
);

app / code / Jsp / Placeholder / 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\AttributeMerger">
    <plugin name="shippingAddress" type="Jsp\Placeholder\Plugin\Checkout\Block\Checkout\AttributeMerger\Plugin"/>
  </type>
</config>

app / code / Jsp / Placeholder / Plugin / Checkout / Block / Checkout / AttributeMerger / Plugin.php:

<?php
namespace Jsp\Placeholder\Plugin\Checkout\Block\Checkout\AttributeMerger;
class Plugin {
  public function afterMerge(\Magento\Checkout\Block\Checkout\AttributeMerger $subject, $result)
  {
    if (array_key_exists('street', $result)) {
      $result['street']['children'][0]['placeholder'] = __('Calle y número exterior');
      $result['street']['children'][1]['placeholder'] = __('Interior / Edificio / Depto.');
      $result['street']['children'][2]['placeholder'] = __('Colonia');
    }
    return $result;
  }
}
Луис Гарсия
источник
После добавления этого модуля вы сделали следующие шаги: 1. включить модуль: sudo bin / magento module: включить Jsp_Placeholder 2. обновить настройки: sudo bin / magento setup: обновить 3. скомпилировать настройки: sudo bin / magento setup: di: compile ты сделал все это?
Ашиш Джагнани
Этот код отлично работает с формой адреса проверки по умолчанию в magento 2.
Ашиш Джагнани,

Ответы:

14

Добавьте эти файлы в любой из ваших пользовательских модулей:

Приложение / код / ​​Vendor / ModuleName / и т.д. / module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
  <module name="Vendor_ModuleName" setup_version="2.0.0" />
</config>

Приложение / код / ​​Vendor / ModuleName / registration.php

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
  \Magento\Framework\Component\ComponentRegistrar::MODULE,
  'Vendor_ModuleName',
  __DIR__
);

Приложение / код / ​​Vendor / ModuleName / и т.д. / 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\AttributeMerger">
    <plugin name="shippingAddress" type="Vendor\ModuleName\Plugin\Checkout\Block\Checkout\AttributeMerger\Plugin"/>
  </type>
</config>

Производитель \ ModuleName \ Plugin \ Checkout \ Block \ Checkout \ AttributeMerger \ plugin.php

<?php
namespace Vendor\ModuleName\Plugin\Checkout\Block\Checkout\AttributeMerger;

class Plugin
{
  public function afterMerge(\Magento\Checkout\Block\Checkout\AttributeMerger $subject, $result)
  {
    if (array_key_exists('street', $result)) {
      $result['street']['children'][0]['placeholder'] = __('Flat No/House No/Building No');
      $result['street']['children'][1]['placeholder'] = __('Street Address');
      $result['street']['children'][2]['placeholder'] = __('Landmark');
    }

    return $result;
  }
}
Ашиш Джагнани
источник
Куда мне добавить di.xmlфайл? У меня нет пользовательских модулей
Луис Гарсия
Пожалуйста, проверьте мой обновленный ответ.
Ашиш Джагнани
Спасибо, я создал модуль, следуя вашим инструкциям, но заполнители пока не отображаются. Модуль включен, я очищаю кеш и запускаю программу установки: обновление. Есть идеи, что может быть не так?
Луис Гарсия
Напишите свой точный код всех файлов модуля в вашем вопросе, что вы пытались.
Ашиш Джагнани
Я только что обновил свой вопрос с кодом, который я попробовал
Луис Гарсия