Magento 2: Wie füge ich Straßenfeldern an der Kasse Platzhaltertext hinzu?

10

Im Backend habe ich die Adresse auf 3 Zeilen festgelegt.

Ich möchte in jedes Feld einen anderen Platzhalter einfügen:

  • Straße
  • Gebäude / Wohnung
  • Bereich

Auf diese Weise kann der Benutzer Daten strukturierter eingeben.

Eine ähnliche Frage finden Sie hier:

Magento 2 - Auswirkungen auf die Adresse in Checkout-Formularen mit Layout-XML / UI-Argumenten

Die Antworten bieten jedoch keine Lösung, um Platzhalter in Adressfelder aufzunehmen.

Was ich erreichen möchte, ist das Festlegen eines anderen Platzhalters für jedes Adressfeld .

Mein Code:

app / code / Jsp / Platzhalter / 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 / Platzhalter / Registrierung.php:

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

app / code / Jsp / Platzhalter / 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 / Platzhalter / 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
quelle
Nach dem Hinzufügen dieses Moduls haben Sie folgende Schritte ausgeführt: 1. Modul aktivieren: sudo bin / magento Modul: Jsp_Placeholder aktivieren 2. Upgrade-Setup: sudo bin / magento-Setup: Upgrade 3. Setup kompilieren: sudo bin / magento-Setup: di: compile Have hast du das alles gemacht?
Ashish Jagnani
Dieser Code funktioniert perfekt mit dem Standard-Checkout-Adressformular in Magento 2.
Ashish Jagnani

Antworten:

14

Fügen Sie diese Datei in einem Ihrer benutzerdefinierten Module hinzu:

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>

Hersteller \ Modulname \ 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
quelle
Wo soll ich die di.xmlDatei hinzufügen ? Ich habe keine benutzerdefinierten Module
Luis Garcia
Bitte überprüfen Sie meine aktualisierte Antwort.
Ashish Jagnani
Vielen Dank, ich habe das Modul gemäß Ihren Anweisungen erstellt, aber die Platzhalter werden noch nicht angezeigt. Das Modul ist aktiviert, ich bereinige den Cache und führe setup: upgrade aus. Haben Sie eine Idee, was falsch sein könnte?
Luis Garcia
Schreiben Sie Ihren genauen Code für alle Dateien des Moduls in Ihre Frage, was Sie versucht haben.
Ashish Jagnani
Ich habe gerade meine Frage mit dem Code aktualisiert, den ich versucht habe
Luis Garcia