I'm trying to get a list of the EU countries in my checkout (the list that is available in the backend).
I found this PHP code to get the list but i'm not sure on how I would get it into the JS my checkout. I need to show a field depending on if the selected country is in Europe.
Thanks in advance.
I currently have this:
<item name="vat-country-code" xsi:type="array"> <item name="component" xsi:type="string"> BB_Checkout/js/view/vat-country-code </item> </item>
But of course this leads to a JS file.
Solved! Go to Solution.
I found a solution.
I added the following PHP file to my module:
Vendor/Module/Block/EuCountries.php
<?php
namespace BB\Checkout\Block;
use Magento\Directory\Model\ResourceModel\Country\CollectionFactory as CountryCollectionFactory;
use Magento\Framework\App\Config\ScopeConfigInterface;
use Magento\Framework\View\Element\Template;
class EuCountries extends Template
{
protected $_countryCollectionFactory;
protected $scopeConfig;
public function __construct(
CountryCollectionFactory $countryCollectionFactory,
Template\Context $context,
ScopeConfigInterface $scopeConfig,
array $data = []
)
{
$this->_countryCollectionFactory = $countryCollectionFactory;
$this->scopeConfig = $scopeConfig;
parent::__construct($context, $data);
}
public function getEuCountries()
{
$euCountries = $this
->scopeConfig
->getValue(
'general/country/eu_countries'
);
return $euCountries;
}
}And the corresponding phtml file:
<script>
window.euCountries = "<?php echo $block->getEuCountries(); ?>".split(',');
</script>And I added a new referenceContainer to checkout_index_index.xml under body.
<referenceContainer name="content">
<block class="BB\Checkout\Block\EuCountries" template="BB_Checkout::eu-countries.phtml" name="eu-countries" />
</referenceContainer>
I found a solution.
I added the following PHP file to my module:
Vendor/Module/Block/EuCountries.php
<?php
namespace BB\Checkout\Block;
use Magento\Directory\Model\ResourceModel\Country\CollectionFactory as CountryCollectionFactory;
use Magento\Framework\App\Config\ScopeConfigInterface;
use Magento\Framework\View\Element\Template;
class EuCountries extends Template
{
protected $_countryCollectionFactory;
protected $scopeConfig;
public function __construct(
CountryCollectionFactory $countryCollectionFactory,
Template\Context $context,
ScopeConfigInterface $scopeConfig,
array $data = []
)
{
$this->_countryCollectionFactory = $countryCollectionFactory;
$this->scopeConfig = $scopeConfig;
parent::__construct($context, $data);
}
public function getEuCountries()
{
$euCountries = $this
->scopeConfig
->getValue(
'general/country/eu_countries'
);
return $euCountries;
}
}And the corresponding phtml file:
<script>
window.euCountries = "<?php echo $block->getEuCountries(); ?>".split(',');
</script>And I added a new referenceContainer to checkout_index_index.xml under body.
<referenceContainer name="content">
<block class="BB\Checkout\Block\EuCountries" template="BB_Checkout::eu-countries.phtml" name="eu-countries" />
</referenceContainer>