Magento 2: Comment ajouter du texte d'espace réservé aux champs de rue lors du paiement?

10

En back-end, j'ai défini l'adresse municipale pour qu'elle ait 3 lignes.

Je voudrais mettre un espace réservé différent dans chaque champ:

  • rue
  • Immeuble / Appartement
  • Région

De cette façon, l'utilisateur peut saisir des données de manière plus structurée.

Une question similaire peut être trouvée ici:

Magento 2 - Comment affecter l'adresse de rue dans les formulaires de paiement avec des arguments de mise en page xml / ui

Cependant, les réponses ne fournissent pas de solution pour inclure des espaces réservés dans les champs d'adresse de rue.

Ce que je veux réaliser, c'est définir un espace réservé différent pour chaque champ d'adresse de rue .

Mon code:

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
la source
Après avoir ajouté ce module, avez-vous effectué les étapes suivantes: 1. activer le module: sudo bin / magento module: activer Jsp_Placeholder 2. mettre à niveau la configuration: sudo bin / magento: mettre à niveau 3. compiler la configuration: sudo bin / magento: di: compiler tu as fait tout ça?
Ashish Jagnani
Ce code fonctionne parfaitement avec le formulaire d'adresse de paiement par défaut dans magento 2.
Ashish Jagnani

Réponses:

14

Ajoutez ces fichiers dans l'un de vos modules personnalisés:

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>

Vendor \ 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
la source
Où dois-je ajouter le di.xmlfichier? Je n'ai pas de modules personnalisés
Luis Garcia
Veuillez vérifier ma réponse mise à jour.
Ashish Jagnani
Merci, j'ai créé le module en suivant vos instructions, mais les espaces réservés ne s'affichent pas encore. Le module est activé, je nettoie le cache et exécute setup: upgrade. Avez-vous une idée de ce qui pourrait mal se passer?
Luis Garcia
Écrivez votre code exact de tous les fichiers du module dans votre question ce que vous avez essayé.
Ashish Jagnani
Je viens de mettre à jour ma question avec le code que j'ai essayé
Luis Garcia