Magento 2: Bagaimana cara menambahkan teks placeholder ke bidang jalan di checkout?

10

Di back-end saya telah menetapkan alamat jalan untuk memiliki 3 baris.

Saya ingin menempatkan placeholder berbeda di setiap bidang:

  • jalan
  • Bangunan / Apartemen
  • Daerah

Dengan cara ini pengguna dapat memasukkan data dengan cara yang lebih terstruktur.

Pertanyaan serupa dapat ditemukan di sini:

Magento 2 - Bagaimana memengaruhi alamat jalan dalam formulir checkout dengan argumen tata letak xml / ui

Namun, jawabannya tidak memberikan solusi untuk menyertakan placeholder di bidang alamat jalan.

Yang ingin saya capai adalah menetapkan placeholder yang berbeda untuk setiap bidang alamat jalan .

Kode saya:

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 / kode / Jsp / Placeholder / registrasi.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 / Blok / 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
sumber
Setelah menambahkan modul ini, apakah Anda sudah melakukan langkah-langkah ini: 1. aktifkan modul: modul sudo bin / magento: aktifkan Jsp_Placeholder 2. pengaturan upgrade: pengaturan sudo bin / magento: upgrade 3. setup kompilasi: pengaturan sudo bin / magento: di: compile Have kamu melakukan semua ini?
Ashish Jagnani
Kode ini berfungsi sempurna dengan formulir alamat checkout default di
magento

Jawaban:

14

Tambahkan file ini di salah satu modul khusus Anda:

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
sumber
Di mana saya harus menambahkan di.xmlfile? Saya tidak punya modul khusus
Luis Garcia
Tolong periksa jawaban saya yang diperbarui.
Ashish Jagnani
Terima kasih, saya telah membuat modul mengikuti instruksi Anda tetapi placeholder belum muncul. Modul ini diaktifkan, saya membersihkan cache, dan menjalankan pengaturan: peningkatan. Punya ide apa yang salah?
Luis Garcia
Tulis kode pasti Anda dari semua file modul dalam pertanyaan Anda apa yang telah Anda coba.
Ashish Jagnani
Saya baru saja memperbarui pertanyaan saya dengan kode yang saya coba
Luis Garcia