Answers:
创建块文件,
public function __construct(
\Magento\Directory\Model\CountryFactory $countryFactory
) {
$this->_countryFactory = $countryFactory;
}
public function getCountryname($countryCode){
$country = $this->_countryFactory->create()->loadByCode($countryCode);
return $country->getName();
}
从phtml文件调用,
echo $block->getCountryname($countryCode);
我们可以Magento\Directory\Api\CountryInformationAcquirerInterface
用来获取国家信息:
/** @var \Magento\Directory\Api\CountryInformationAcquirerInterface $country */
/** @var \Magento\Directory\Api\Data\CountryInformationInterface $data */
$data = $country->getCountryInfo($data['country_id']);
$data->getFullNameEnglish();
$data->getFullNameLocale();
在此处查看有关返回值的更多信息: Magento\Directory\Api\Data\CountryInformationInterface
检查给定的国家模型及其方法:
/**
*
* @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;
}
它提供的一种方法是$this->countryFactory->create()->getName();
。您可以根据需要使用模型工厂。
在下面的示例中,在一项任务中,我需要以自定义方式打印pdf,这就是为什么我需要帐单地址国家/地区和送货地址国家/地区的原因,但是从销售订单数据中,我将其作为国家ID(例如“ SE”)打开(对于瑞典)
在方法中,可以使用英语或本地方法对getCountryName()方法进行两种方式的赋值。
这里使用CountryInformationAcquirerInterface。
这是完整的代码
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);
}
}
$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();
}
}