Magento 2:チェックアウトのストリートフィールドにプレースホルダーテキストを追加する方法


10

バックエンドでは、住所を3行に設定しました。

各フィールドに異なるプレースホルダーを配置したいと思います。

  • 通り
  • 建物/アパート
  • 範囲

このようにして、ユーザーはより構造化された方法でデータを入力できます。

同様の質問はここにあります:

Magento 2-レイアウトxml / ui引数を使用してチェックアウトフォームの住所に影響を与える方法

ただし、回答は、住所フィールドにプレースホルダーを含めるためのソリューションを提供しません

私が達成したいのは、各住所フィールドに異なるプレースホルダーを設定することです。

私のコード:

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 / code / Jsp / Placeholder / registration.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 / 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;
  }
}

このモジュールを追加したら、次の手順を実行しました。1.有効化モジュール:sudo bin / magento module:enable Jsp_Placeholder 2.アップグレード設定:sudo bin / magento setup:upgrade 3.コンパイル設定:sudo bin / magento setup:di:compile Haveあなたはこれらすべてをしましたか?
Ashish Jagnani

これらのコードは完全にMagentoの2にデフォルトのチェックアウトアドレス形式で作業している
アシシュJagnani

回答:


14

これらのファイルをカスタムモジュールのいずれかに追加します。

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.xmlファイルはどこに追加すればよいですか?私はカスタムモジュールを何も持っていません
ルイスガルシア

更新された回答を確認してください。
Ashish Jagnani 2016

おかげで、私はあなたの指示に従ってモジュールを作成しましたが、プレースホルダーはまだ表示されていません。モジュールが有効になり、キャッシュを消去して、setup:upgradeを実行します。何が悪いのか考えがありますか?
Luis Garcia

質問のモジュールのすべてのファイルの正確なコードを書いて、何を試したかを書いてください。
Ashish Jagnani 2016

私が試したコードを使用して質問を更新しました
Luis Garcia
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.