Como adicionar um novo país ao Adobe Commerce

Este artigo explica como adicionar um país que não está presente no Adobe Commerce e na Biblioteca local Zend. Isso requer alterações de código e banco de dados que constituem Personalizações do cliente de acordo com os termos aplicáveis do contrato. Observe que os materiais de exemplo incluídos neste artigo são fornecidos "NO ESTADO EM QUE SE ENCONTRAM", sem qualquer garantia. Nem a Adobe nem qualquer entidade afiliada é obrigada a manter, corrigir, atualizar, alterar, modificar ou dar suporte a esses materiais. Aqui vamos descrever os princípios básicos do que precisa ser feito para conseguir isso.

Neste exemplo, criamos um novo módulo do Adobe Commerce com um patch de dados que é aplicado na instalação do Adobe Commerce ou no processo de atualização e adicionamos um País abstrato com o código de país XX ao Adobe Commerce. A variável Diretório do Adobe Commerce O cria uma lista inicial de países e, em seguida, usa a opção Configurar patches para anexar territórios a essa lista. Este artigo explica como criar um novo módulo que anexará um novo país à lista. Você pode revisar o código do módulo existente do Adobe Commerce Diretory para referência. Isso ocorre porque o seguinte módulo de exemplo continua o trabalho do módulo Diretório de criação de uma lista de países e regiões e reutiliza partes do código dos Patches de Configuração do módulo Adobe Commerce Diretory.

Documentação recomendada

Você deve estar familiarizado com o desenvolvimento do módulo Adobe Commerce para criar um novo.

Consulte os seguintes tópicos em nossa documentação do desenvolvedor antes de tentar criar um novo módulo:

Informações necessárias

Um novo país deve ter um nome exclusivo, ID do país, ISO2 e códigos ISO3 em toda a Adobe Commerce.

Estrutura do módulo

Neste exemplo, vamos criar um novo módulo chamado `ExtraCountry` com a seguinte estrutura de diretório:

(Para saber mais sobre a estrutura do módulo, consulte Visão geral do módulo na documentação do desenvolvedor).

<ExtraCountries>
 |
 <etc>
 | | | config.xml | di.xml | module.xml |
 <Plugin>
 | | | <Framework>
 | | |   <Locale>
 | | | TranslatedListsPlugin.php |
 <Setup>
 | | | <Patch>
 | | |   <Data>
 | | | AddDataForAbstractCountry.php | composer.json registration.php
NOTE
Cada seção de cabeçalho deste artigo descreve os arquivos da seção de estrutura do módulo.

ExtraCountries/etc/config.xml

Uma nova configuração de módulo é definida neste arquivo XML. As configurações e tags a seguir podem ser editadas para ajustar as configurações padrão do novo país.

  • allow - Para adicionar o país recém-adicionado à lista "Países permitidos" por padrão, anexe o novo Código do país ao final da allow conteúdo da tag. Os códigos de país são separados por vírgulas. Observe que essa tag substituirá os dados do Directory arquivo de configuração do módulo (Directory/etc/config.xml) allow tag, é por isso que repetimos todos os códigos aqui, além de adicionar o novo.
  • optional_zip_countries - Se o CEP do país recém-adicionado for opcional, anexe o código do país ao final do conteúdo do optional_zip_countries tag. Os códigos de país são separados por vírgulas. Observe que essa tag substituirá os dados do Directory arquivo de configuração do módulo (Directory/etc/config.xml) optional_zip_countries tag, é por isso que repetimos todos os códigos aqui, além de adicionar o novo.
  • eu_countries - Se o país recém-adicionado precisar fazer parte da lista de Países da União Europeia por padrão, anexe o código do país ao final do conteúdo do eu_countries tag. Os códigos de país são separados por vírgulas. Observe que essa tag substituirá os dados do Store arquivo de configuração do módulo (_Store/etc/config.xml_) eu_countries tag, é por isso que repetimos todos os códigos aqui, além de adicionar o novo.
  • config.xml exemplo de arquivo
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
    <default>
        <general>
            <country>
                <!-- append a new country codes to the end of this list -->
                <allow>AF,AL,DZ,AS,AD,AO,AI,AQ,AG,AR,AM,AW,AU,AT,AX,AZ,BS,BH,BD,BB,BY,BE,BZ,BJ,BM,BL,BT,BO,BQ,BA,BW,BV,BR,IO,VG,BN,BG,BF,BI,KH,CM,CA,CD,CV,KY,CF,TD,CL,CN,CX,CW,CC,CO,KM,CG,CK,CR,HR,CU,CY,CZ,DK,DJ,DM,DO,EC,EG,SV,GQ,ER,EE,ET,FK,FO,FJ,FI,FR,GF,PF,TF,GA,GM,GE,DE,GG,GH,GI,GR,GL,GD,GP,GU,GT,GN,GW,GY,HT,HM,HN,HK,HU,IS,IM,IN,ID,IR,IQ,IE,IL,IT,CI,JE,JM,JP,JO,KZ,KE,KI,KW,KG,LA,LV,LB,LS,LR,LY,LI,LT,LU,ME,MF,MO,MK,MG,MW,MY,MV,ML,MT,MH,MQ,MR,MU,YT,FX,MX,FM,MD,MC,MN,MS,MA,MZ,MM,NA,NR,NP,NL,AN,NC,NZ,NI,NE,NG,NU,NF,KP,MP,NO,OM,PK,PW,PA,PG,PY,PE,PH,PN,PL,PS,PT,PR,QA,RE,RO,RS,RU,RW,SH,KN,LC,PM,VC,WS,SM,ST,SA,SN,SC,SL,SG,SK,SI,SB,SO,ZA,GS,KR,ES,LK,SD,SR,SJ,SZ,SE,CH,SX,SY,TL,TW,TJ,TZ,TH,TG,TK,TO,TT,TN,TR,TM,TC,TV,VI,UG,UA,AE,GB,US,UM,UY,UZ,VU,VA,VE,VN,WF,EH,XK,YE,ZM,ZW,XX</allow>
​
                <!-- if added countries need to belong to the European Union Countries list by default, append their codes to the end of this list -->
                <eu_countries>AT,BE,BG,CY,CZ,DK,EE,FI,FR,DE,GR,HR,HU,IE,IT,LV,LT,LU,MT,NL,PL,PT,RO,SK,SI,ES,SE,GB,XX</eu_countries>
​
                <!-- if added countries are not require zip code, append it's code to the end of this list -->
                <optional_zip_countries>HK,IE,MO,PA,GB,XX</optional_zip_countries>
            </country>
        </general>
    </default>
</config>

Para obter mais informações sobre os arquivos de configuração do módulo, consulte Guia do desenvolvedor de PHP > Definir arquivos de configurações na documentação do desenvolvedor.

Observe que essas alterações são opcionais e afetarão somente o padrão pertencente ao novo país nas listas "Permitir países", "CEP/Código postal é opcional para" e "Países da União Europeia". Se esse arquivo for ignorado na estrutura do módulo, um novo país ainda será adicionado, mas terá que ser configurado manualmente no Admin > Lojas > Configurações > Configuração > Geral > Opções de país página de configurações.

ExtraCountries/etc/di.xml

A variável di.xml o arquivo configura quais dependências são inseridas pelo gerenciador de objetos. Consulte Guia do desenvolvedor de PHP > The di.xml na documentação do desenvolvedor para obter mais detalhes sobre di.xml.

Em nosso exemplo, devemos registrar um _TranslatedListsPlugin_ que traduzirá Códigos de país recém-introduzidos em Nomes de país completos, se os códigos não estiverem presentes nos dados de localização da Biblioteca de local Zend.

di.xml exemplo

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Framework\Locale\TranslatedLists">
        <plugin name="Magento_Directory" type="VendorName\ExtraCountries\Plugin\Framework\Locale\TranslatedListsPlugin"/>
    </type>
</config>

ExtraCountries/etc/module.xml

No arquivo de registro do módulo, devemos especificar a dependência do módulo "Diretório do Adobe Commerce", certificando-nos de que o módulo "Países extras" será registrado e executado após o módulo Diretório.

Consulte Gerenciamento de dependências do módulo na documentação do desenvolvedor, para obter mais informações sobre dependências de módulo.

module.xml exemplo

<?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="VendorName_ExtraCountries" >
        <sequence>
            <module name="Magento_Directory"/>
        </sequence>
    </module>
</config>

ExtraCountries/Plugin/Framework/Locale/TranslatedListsPlugin.php

No aroundGetCountryTranslation() método de plug-in, devemos traduzir um código de país em um nome de país completo. Essa é uma etapa obrigatória para países que não têm um nome completo associado a um novo código de país na Biblioteca local Zend.

<?php
namespace VendorName\ExtraCountries\Plugin\Framework\Locale;
​
use Magento\Framework\Locale\ListsInterface;
​
/**
 * Plugin to add full names of added countries that are not included in Zend Locale Data
 */
class TranslatedListsPlugin
{
    /**
     * Get the full name of added countries
     *
     * Since the locale data for the added country may not be present in the Zend Locale Library,
     * we need to provide full country name matching the added code
     *
     * @param ListsInterface $subject
     * @param callable $proceed
     * @param $value
     * @param null $locale
     * @return string
     */
    public function aroundGetCountryTranslation(
        ListsInterface $subject,
        callable $proceed,
        $value,
        $locale = null
    )
    {
        if ($value == 'XX') {
            return 'Abstract Country';
        }
​
        return $proceed($value, $locale);
    }
}

ExtraCountries/Setup/Patch/Data/AddDataForAbstractCountry.php

Esse patch de dados será executado durante o processo de instalação/atualização do Adobe Commerce e adicionará um novo registro de país ao banco de dados.

Consulte Desenvolver dados e patches de esquema na documentação do desenvolvedor, para obter mais informações sobre patches de dados.

No exemplo abaixo, você pode ver que a variável $data matriz do método apply() Contém os códigos de ID do país, ISO2 e ISO3 do novo país, e esses dados estão sendo inseridos no banco de dados.

<?php
namespace Magento\ExtraCountries\Setup\Patch\Data;
​
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Framework\Setup\Patch\DataPatchInterface;
use Magento\Framework\Setup\Patch\PatchVersionInterface;
​
/**
 * Add Abstract Country data to the country list
 *
 * @package Magento\ExtraCountries\Setup\Patch
 */
class AddDataForAbstractCountry implements DataPatchInterface, PatchVersionInterface
{
    /**
     * @var ModuleDataSetupInterface
     */
    private $moduleDataSetup;
​
    /**
     * @param ModuleDataSetupInterface $moduleDataSetup
     */
    public function __construct(
        ModuleDataSetupInterface $moduleDataSetup
    ) {
        $this->moduleDataSetup = $moduleDataSetup;
    }
​
    /**
     * @inheritdoc
     */
    public function apply()
    {
        /**
         * Fill table directory/country
         */
        $data = [
            ['XX', 'XX', 'XX']
        ];
​
        $columns = ['country_id', 'iso2_code', 'iso3_code'];
        $this->moduleDataSetup->getConnection()->insertArray(
            $this->moduleDataSetup->getTable('directory_country'),
            $columns,
            $data
        );
    }
​
    /**
     * @inheritdoc
     */
    public static function getDependencies()
    {
        return [];
    }
​
    /**
     * @inheritdoc
     */
    public static function getVersion()
    {
        return '0.0.1';
    }
​
    /**
     * @inheritdoc
     */
    public function getAliases()
    {
        return [];
    }
}

ExtraCountries/registration.php

Este é um exemplo do arquivo registration.php. Para saber mais sobre o registro do módulo, consulte Guia do desenvolvedor de PHP > Registrar seu componente na documentação do desenvolvedor.

<?php
use Magento\Framework\Component\ComponentRegistrar;
​
ComponentRegistrar::register(ComponentRegistrar::MODULE, 'VendorName_ExtraCountries', __DIR__);

ExtraCountries/composer.json

Este é um exemplo do arquivo composer.json.

Para saber mais sobre composer.json, consulte Guia do desenvolvedor de PHP > O arquivo composer.json na documentação do desenvolvedor.

{
    "name": "vendor_name/module-extra-countries",
    "description": "A module that adds extra countries to magento directory",
    "type": "magento2-module",
    "license": [
    ],
    "require": {
        "php": "~7.3.0||~7.4.0",
        "lib-libxml": "*",
        "magento/framework": "*",
        "magento/module-directory": "*"
    },
    "autoload": {
        "files": [
            "registration.php"
        ],
        "psr-4": {
            "VendorName\\ExtraCountries\\": ""
        }
    },
    "config": {
        "sort-packages": true
    }
}

Instalação do módulo

Para saber como instalar o módulo, consulte Localizações do módulo na documentação do desenvolvedor.

Depois que o diretório do módulo for colocado em um local correto, execute bin/magento setup:upgrade para aplicar os patches de dados e registrar o plug-in de tradução.

Talvez seja necessário limpar o cache do navegador para que as novas alterações funcionem.

recommendation-more-help
8bd06ef0-b3d5-4137-b74e-d7b00485808a