Comment obtenir le nom du pays à partir du code de pays dans Magento 2?

10

je veux obtenir le nom du pays à partir du code pays, j'ai obtenu le code pays de la commande de données comme ceci:

$data = $order->getShippingAddress()->getData();
$countryCode = $data['country_id'];
echo $countryCode;

il imprimera 'US' ou tout autre code de pays, existe-t-il un moyen d'obtenir le nom du pays à partir de ce code de pays?

gars simple
la source
Avez-vous vérifié le code pour obtenir le nom du pays?
Rakesh Jesadiya

Réponses:

31

Créer un fichier de blocage,

   public function __construct(
            \Magento\Directory\Model\CountryFactory $countryFactory
        ) {
            $this->_countryFactory = $countryFactory;
        }

    public function getCountryname($countryCode){    
        $country = $this->_countryFactory->create()->loadByCode($countryCode);
        return $country->getName();
    }

Appelez depuis un fichier phtml,

echo $block->getCountryname($countryCode);
Rakesh Jesadiya
la source
1
Correct sauf qu'il vous manque un point-virgule après $ country = $ this -> _ countryFactory-> create () -> loadByCode ($ countryCode) il doit être $ country = $ this -> _ countryFactory-> create () -> loadByCode ($ code postal);
Eirik
Est-il possible d'obtenir le code du pays à partir du nom du pays?
Vindhuja
@Vindhuja Check rakeshjesadiya.com/…
Rakesh Jesadiya
8

Nous pouvons utiliser Magento\Directory\Api\CountryInformationAcquirerInterfacepour obtenir les informations sur le pays:

/** @var \Magento\Directory\Api\CountryInformationAcquirerInterface $country */

/** @var \Magento\Directory\Api\Data\CountryInformationInterface $data */
    $data = $country->getCountryInfo($data['country_id']);
    $data->getFullNameEnglish();
    $data->getFullNameLocale();

En savoir plus ici sur les valeurs renvoyées: Magento\Directory\Api\Data\CountryInformationInterface

Khoa TruongDinh
la source
Salut, pouvez-vous s'il vous plaît me dire comment l'utiliser pour obtenir le nom du pays en anglais dans magento 2
Ask Bytes
C'est tout simplement parfait. j'écris un article basé sur cette solution pour plus de détails blog.equaltrue.com/… cela peut vous aider @AskBytes
Shuvankar Paul
0

Vérifiez le modèle de pays donné et ses méthodes:

/**
     * 
     * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
     * @param \Magento\Directory\Model\CountryFactory $countryFactory
     */
    public function __construct(
        \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, 
        \Magento\Directory\Model\CountryFactory $countryFactory    
    ) {  
        $this->scopeConfig = $scopeConfig;
        $this->countryFactory = $countryFactory;
    }

L'une des méthodes qu'il propose est. $this->countryFactory->create()->getName();Vous pouvez utiliser l'usine de modèles en fonction de vos besoins.

Sanjay Chaudhary
la source
0

Dans l'exemple ci-dessous, dans l'une des tâches dont j'ai besoin pour imprimer un pdf de manière personnalisée, c'est pourquoi j'ai besoin du pays de l'adresse de facturation et du pays de l'adresse de livraison, mais, à partir des données de la commande client, je l'obtiens comme identifiant de pays comme "SE" (pour la Suède)

dans la méthode, vous pouvez évaluer de deux manières la méthode getCountryName (), en anglais ou en local.

CountryInformationAcquirerInterface est utilisé ici.

voici le code complet

namespace Equaltrue\Orderprint\Block\Order;

use Magento\Backend\Block\Template\Context;
use Magento\Framework\Exception\NoSuchEntityException;
use Magento\Framework\Registry;
use Magento\Framework\View\Element\Template;
use Magento\Sales\Api\OrderRepositoryInterface;
use Magento\Directory\Api\CountryInformationAcquirerInterface;

class Print extends Template
{
    protected $_coreRegistry;
    protected $orderRepository;
    protected $countryInformationAcquirerInterface;

    /**
     * Constructor
     *
     * @param CountryInformationAcquirerInterface $countryInformationAcquirerInterface
     * @param OrderRepositoryInterface $orderRepository
     * @param Context $context
     * @param Registry $coreRegistry
     * @param array $data
     */
    public function __construct(
        CountryInformationAcquirerInterface $countryInformationAcquirerInterface,
        OrderRepositoryInterface $orderRepository,
        Context $context,
        Registry $coreRegistry,
        array $data = []
    ) {
        $this->orderRepository = $orderRepository;
        $this->countryInformationAcquirerInterface = $countryInformationAcquirerInterface;
        $this->_coreRegistry = $coreRegistry;
        parent::__construct($context, $data);
    }

    /**
     * Retrieve Current Data
     */
    public function getOrderData()
    {
        $orderId = $this->getRequest()->getParam('order_id', 0);
        $order =  $this->getOrder($orderId);

        /*
         * Get billing Address
         * */
        $billingAddress = $order->getBillingAddress();
        $firstNameBilling = $billingAddress->getFirstName();
        $lastNameBilling = $billingAddress->getLastName();
        $streetBilling = implode( ", ", $billingAddress->getStreet());
        $cityBilling = $billingAddress->getCity();
        $postCodeBilling = $billingAddress->getPostCode();
        $countryIdBilling = $billingAddress->getCountryId();
        $countryNameBilling = $this->getCountryName($countryIdBilling);
        $telephoneBilling = "T: ".$billingAddress->getTelephone();
        $formattedBillingAddress = $firstNameBilling." ".$lastNameBilling."<br>". $streetBilling."<br>". $cityBilling.",".$postCodeBilling."<br>".$countryNameBilling."<br>".$telephoneBilling;

        /*
         * Get billing Address
         * */
        $shippingAddress = $order->getShippingAddress();
        $firstNameShipping = $shippingAddress->getFirstName();
        $lastNameShipping = $shippingAddress->getLastName();
        $streetShipping = implode( ", ", $shippingAddress->getStreet());
        $cityShipping = $shippingAddress->getCity();
        $postCodeShipping = $shippingAddress->getPostCode();
        $countryIdShipping = $billingAddress->getCountryId();
        $countryNameShipping = $this->getCountryName($countryIdShipping);
        $telephoneShipping = "T: ".$shippingAddress->getTelephone();
        $formattedShippingAddress = $firstNameShipping." ".$lastNameShipping."<br>". $streetShipping."<br>". $cityShipping.",".$postCodeShipping."<br>".$countryNameShipping."<br>".$telephoneShipping;

        return array(
            "formatted_billing_address" => $formattedBillingAddress,
            "formatted_shipping_address" => $formattedShippingAddress
        );
    }

    /**
     * Getting Country Name
     * @param string $countryCode
     * @param string $type
     *
     * @return null|string
     * */
    public function getCountryName($countryCode, $type="local"){
        $countryName = null;
        try {
            $data = $this->countryInformationAcquirerInterface->getCountryInfo($countryCode);
            if($type == "local"){
                $countryName = $data->getFullNameLocale();
            }else {
                $countryName = $data->getFullNameLocale();
            }
        } catch (NoSuchEntityException $e) {}
        return $countryName;
    }

    protected function getOrder($id)
    {
        return $this->orderRepository->get($id);
    }
}
Shuvankar Paul
la source
0

Obtenez le nom du pays par code de pays à l'aide de objectManager.

<?php
    $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
    $countryCode = 'US'; // Enter country code here
    $country = $objectManager->create('\Magento\Directory\Model\Country')->load($countryCode)->getName();
    echo $country;
?>

Merci

Sohel Khan
la source
-3
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
            $allowerdContries = $objectManager->get('Magento\Directory\Model\AllowedCountries')->getAllowedCountries() ;
            $countryFactory = $objectManager->get('\Magento\Directory\Model\CountryFactory');
            //echo "<pre>"; print_r($allowerdContries);

            $countries = array();
            foreach($allowerdContries as $countryCode)
            {
                    if($countryCode)
                    {

                        $data = $countryFactory->create()->loadByCode($countryCode);
                        $countries[$countryCode] =  $data->getName();
                    }
            }
Jaykumar R
la source