Geolocation (optional)
GitHub - magesuite/geolocation
The extension allows getting the current country ISO code based on the user's IP address.
Â
Installation
This module is optional.
composer require "creativestyle/magesuite-geolocation" ^1.0.0
This extension requires a custom second extension that contains MaxMind GeoIP2 Country Database file.
We’re not able to provide such an extension because of the file licensing.
Such extension must implement \MageSuite\Geolocation\Model\Asset\DatabasePathResolverInterface
interface that returns absolute file path to mmdb file, an example implementation below:
etc/di.xml
:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="MageSuite\Geolocation\Model\Asset\DatabasePathResolverInterface"
type="MageSuite\GeolocationDatabase\Model\Asset\DatabasePathResolver" />
</config>
<?php
namespace MageSuite\GeolocationDatabase\Model\Asset;
class DatabasePathResolver implements \MageSuite\Geolocation\Model\Asset\DatabasePathResolverInterface
{
/**
* @inheritDoc
*/
public function getPath() {
return realpath(__DIR__ . '/GeoLite2-Country.mmdb');
}
}
Admin settings
There are no admin settings, the module is active when installed.
Backend
If geolocation is needed inside BE logic then \MageSuite\Geolocation\Service\CountryResolverInterface
should be injected into class constructor.
It contains resolve
method that will return two letter ISO country code of the current user. An empty string will be returned if it is not possible to GeoLocate a user based on his IP address.
A custom IP address can be passed to resolve
method, otherwise, IP from server headers will be taken into account.
Frontend
Two-letter ISO country code of a user (or empty string when IP address location was not detected) can be fetched by javascript in the following way:
The frontend script first checks if ISO code is stored in sessionStorage
under cachedCountryIso
key. if not it makes the following request to graphql:
Â
Testing
If you'd like to test integration with 3rd party code you can fake the country returned by the endpoint.
To do so create a cookie named COUNTRY_CODE
with ISO code of the expected country as a value.
Keep in mind that javascript library caches returned country code, after each change to the cookie value browser's session storage must be cleared.