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

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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.