Magento 2: Como adicionar texto de espaço reservado aos campos de rua no checkout?

10

No back-end, configurei o endereço para ter três linhas.

Eu gostaria de colocar um espaço reservado diferente em cada campo:

  • Rua
  • Edifício / Apartamento
  • Área

Dessa forma, o usuário pode inserir dados de uma maneira mais estruturada.

Uma pergunta semelhante pode ser encontrada aqui:

Magento 2 - Como afetar o endereço em formulários de check-out com argumentos de layout xml / ui

No entanto, as respostas não fornecem uma solução para incluir espaços reservados nos campos de endereço.

O que eu quero alcançar é definir um espaço reservado diferente para cada campo de endereço .

Meu código:

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;
  }
}
Luis Garcia
fonte
Depois de adicionar este módulo, você fez as seguintes etapas: 1. enable module: sudo bin / magento module: enable Jsp_Placeholder 2. upgrade setup: sudo bin / magento setup: upgrade 3. compile setup: sudo bin / magento setup: di: compile Have você fez tudo isso?
Ashish Jagnani 28/09
Estes código é perfeitamente trabalhar com formulário de endereço de pagamento padrão no Magento 2.
Ashish Jagnani

Respostas:

14

Adicione estes arquivos em qualquer um dos seus módulos personalizados:

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>

Fornecedor \ Nome do módulo \ Plugin \ Checkout \ Bloco \ 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
fonte
Onde devo adicionar o di.xmlarquivo? Eu não tenho quaisquer módulos personalizados
Luis Garcia
Pl verifique minha resposta atualizada.
Ashish Jagnani
Obrigado, eu criei o módulo seguindo suas instruções, mas os espaços reservados ainda não aparecem. O módulo está ativado, limpo o cache e executo setup: upgrade. Tem alguma idéia do que pode estar errado?
Luis Garcia
Escreva o código exato de todos os arquivos do módulo na sua pergunta sobre o que você tentou.
Ashish Jagnani 27/09/16
Acabei de atualizar minha pergunta com o código que tentei
Luis Garcia