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.