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

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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.