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;
  }
}

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;
  }
}

¿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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.