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.