Så här lägger du till ett nytt land i Adobe Commerce

I den här artikeln beskrivs hur du lägger till ett land som inte finns i Adobe Commerce och Zend Locale Library. Detta kräver kod- och databasändringar som utgör kundanpassningar enligt dina tillämpliga avtalsvillkor. Observera att exempelmaterialet i den här artikeln tillhandahålls i befintligt skick utan någon garanti av något slag. Varken Adobe eller någon anknuten enhet är skyldig att underhålla, korrigera, uppdatera, ändra, modifiera eller på annat sätt stödja dessa material. Här kommer vi att beskriva de grundläggande principerna för vad som behöver göras för att uppnå detta.

I det här exemplet skapar vi en ny Adobe Commerce-modul med en datakorrigering som tillämpas vid installation eller uppgradering av Adobe Commerce och lägger till ett abstrakt land med landskoden XX i Adobe Commerce. The Adobe Commerce Directory skapar en inledande landslista och sedan använder den Konfigurera korrigeringar för att lägga till områden i listan. I den här artikeln beskrivs hur du skapar en ny modul som lägger till ett nytt land i listan. Du kan läsa koden för den befintliga Adobe Commerce Directory-modulen för referens. Detta beror på att följande exempelmodul fortsätter med katalogmodulens jobb att skapa en lista över länder och regioner och återanvänder delar av koden i Adobe Commerce Directory Module Setup Patches.

Rekommenderad dokumentation

Du måste känna till Adobe Commerce modulutveckling för att kunna skapa en ny.

Läs följande avsnitt i utvecklardokumentationen innan du försöker skapa en ny modul:

Nödvändig information

Ett nytt land måste ha ett unikt namn, lands-ID, ISO2- och ISO3-koder i hela Adobe Commerce.

Modulstruktur

I det här exemplet ska vi skapa en ny modul med namnet `Extracountries` med följande katalogstruktur:

(Mer information om modulstrukturen finns i Modulöversikt i vår dokumentation för utvecklare).

<ExtraCountries>
 |
 <etc>
 | | | config.xml | di.xml | module.xml |
 <Plugin>
 | | | <Framework>
 | | |   <Locale>
 | | | TranslatedListsPlugin.php |
 <Setup>
 | | | <Patch>
 | | |   <Data>
 | | | AddDataForAbstractCountry.php | Composer.json registration.php
NOTE
Varje rubrikavsnitt i den här artikeln beskriver filer från modulstrukturavsnittet.

ExtraCountries/etc/config.xml

En ny modulkonfiguration definieras i XML-filen. Följande konfigurationer och taggar kan redigeras för att justera de nya standardinställningarna för länder.

  • allow - Om du vill lägga till det nyligen tillagda landet i listan"Tillåt länder" som standard lägger du till den nya landskoden i slutet av allow tagginnehåll. Landskoder avgränsas med kommatecken. Observera att den här taggen skriver över data från Directory modulkonfigurationsfil (Directory/etc/config.xml) allow -taggen, det är därför vi upprepar alla koder här plus lägger till den nya.
  • optional_zip_countries - Om postnumret för det nya landet ska vara valfritt lägger du till landskoden i slutet av innehållet i optional_zip_countries -tagg. Landskoder avgränsas med kommatecken. Observera att den här taggen skriver över data från Directory modulkonfigurationsfil (Directory/etc/config.xml) optional_zip_countries -taggen, det är därför vi upprepar alla koder här plus lägger till den nya.
  • eu_countries - Om det nyligen tillagda landet måste vara en del av listan över EU-länder som standard, ska landskoden läggas till i slutet av innehållet i eu_countries -tagg. Landskoder avgränsas med kommatecken. Observera att den här taggen skriver över data från Store modulkonfigurationsfil (_Store/etc/config.xml_) eu_countries -taggen, det är därför vi upprepar alla koder här plus lägger till den nya.
  • config.xml filexempel
<?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>

Mer information om modulkonfigurationsfilerna finns i Utvecklarhandbok för PHP > Definiera konfigurationsfiler i vår dokumentation för utvecklare.

Observera att dessa ändringar är valfria och endast kommer att påverka standardinställningen i det nya landet i listorna"Tillåt länder","Postnummer är valfritt" och"EU-länder". Om den här filen hoppas över från modulstrukturen läggs ett nytt land till, men det måste konfigureras manuellt på panelen Administratör > Lager > Inställningar > Konfiguration > Allmänt > Alternativ för land inställningssida.

ExtraCountries/etc/di.xml

The di.xml filen konfigurerar vilka beroenden som matas in av objekthanteraren. Se PHP Developer Guide > The di.xml i vår utvecklardokumentation för mer information om di.xml.

I vårt exempel måste vi registrera en _TranslatedListsPlugin_ som översätter nyligen införda landskoder till fullständiga landsnamn, om koder inte finns i Zend Locale Library-lokaliseringsdata.

di.xml exempel

<?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

I modulregistreringsfilen måste vi ange beroendet för modulen"Adobe Commerce-katalog" så att modulen"Extra countries" registreras och körs efter modulen Katalog.

Se Hantera modulberoenden i vår utvecklardokumentation för mer information om modulberoenden.

module.xml exempel

<?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

I aroundGetCountryTranslation() plugin-metoden måste vi översätta en landskod till ett fullständigt landsnamn. Detta är ett obligatoriskt steg för länder som inte har ett fullständigt namn kopplat till en ny landskod i Zend Locale Library.

<?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

Den här datakorrigeringen utförs under Adobe Commerce installations-/uppgraderingsprocess och en ny landspost läggs till i databasen.

Se Utveckla data och schemapatchar i vår utvecklardokumentation för mer information om patchar.

I exemplet nedan ser du att $data array med metoden apply() innehåller lands-ID, ISO2- och ISO3-koder för det nya landet, och dessa data infogas i databasen.

<?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

Detta är ett exempel på filen registration.php. Mer information om modulregistrering finns i PHP Developer Guide > Register your component i vår dokumentation för utvecklare.

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

ExtraCountries/composer.json

Det här är ett exempel på filen Composer.json.

Mer information om Composer.json finns i PHP Developer Guide > The Composer.json file i vår dokumentation för utvecklare.

{
    "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
    }
}

Modulinstallation

Information om hur du installerar modulen finns i Modulplatser i vår dokumentation för utvecklare.

Kör när modulkatalogen har placerats på rätt plats bin/magento setup:upgrade om du vill använda datakorrigeringarna och registrera översättnings-plugin-programmet.

Du kan behöva rensa webbläsarens cache för att de nya ändringarna ska fungera.

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