Magento 2: ¿Cómo agregar texto de marcador de posición a los campos de la calle en el pago?

10

En el back-end, configuré la dirección de la calle para que tenga 3 líneas.

Me gustaría poner un marcador de posición diferente en cada campo:

  • Calle
  • Edificio / Apartamento
  • Zona

De esta manera, el usuario puede ingresar datos de una manera más estructurada.

Una pregunta similar se puede encontrar aquí:

Magento 2: cómo afectar la dirección de la calle en los formularios de pago con argumentos de diseño xml / ui

Sin embargo, las respuestas no proporcionan una solución para incluir marcadores de posición en los campos de las direcciones de calles.

Lo que quiero lograr es establecer un marcador de posición diferente para cada campo de dirección .

Mi código:

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;
  }
}
Luis garcia
fuente
Después de agregar este módulo, realizó estos pasos: 1. habilite el módulo: sudo bin / magento module: habilite Jsp_Placeholder 2. actualice la configuración: sudo bin / magento configure: actualice 3. compile la configuración: sudo bin / magento configure: di: compile Have hiciste todo esto?
Ashish Jagnani
Este código funciona perfectamente con el formulario de dirección de pago predeterminado en magento 2.
Ashish Jagnani

Respuestas:

14

Agregue estos archivos en cualquiera de sus módulos personalizados:

app / code / Vendor / ModuleName / 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="Vendor_ModuleName" setup_version="2.0.0" />
</config>

app / code / Vendor / ModuleName / Registration.php

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

app / code / Vendor / ModuleName / 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="Vendor\ModuleName\Plugin\Checkout\Block\Checkout\AttributeMerger\Plugin"/>
  </type>
</config>

Proveedor \ 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;
  }
}
Ashish Jagnani
fuente
¿Dónde debo agregar el di.xmlarchivo? No tengo ningún módulo personalizado
Luis Garcia
Por favor revise mi respuesta actualizada.
Ashish Jagnani
Gracias, he creado el módulo siguiendo sus instrucciones, pero los marcadores de posición aún no aparecen. El módulo está habilitado, limpio el caché y ejecuto la configuración: actualizar. ¿Tienes alguna idea de lo que podría estar mal?
Luis Garcia
Escriba su código exacto de todos los archivos del módulo en su pregunta lo que ha intentado.
Ashish Jagnani
Acabo de actualizar mi pregunta con el código que probé
Luis Garcia