With the Maps Locator module your can convert your entries in searchable locations. The Module comes with a default 1 location fieldtype, but when you have installed the Maps Fieldtype, the module save the locations automatically from out your Maps fieltype. This way you can have multiple locations per enty.
Using the Maps Locator module is very easy and very powerfull to create for example a store locator. There are 2 options to do that;
What those 2 options does, is just saving your locations to a readable format (latlng) in your database. Later we can just use any method, that comes with the Gmaps Data module to get your result out of the database with the assigned entry.
Because we are using geocoding to get the right latlng, there is a limitation. The Maps Module will try to handle this very good, but it is not always working due some strict rules from Google. So keep in mind, that when you have 100 addresses or more, there is a change that not all addresses are saved correctly. (https://developers.google.com/maps/documentation/geocoding/usage-limits)
When you add a latlng coordinate to your field, of if that is coming from the maps fieldtype
, Maps locator will try to reverse
geocode this latlng. Meaning that is searching for an address for this latlng. Most of the time this address is not on this location
and there for you will get a different latlng coordinate. If you are working with strict coordinates and you are sure that you have
entered a valid coordinate, you can disable this behaviour in the Maps Locator CP --> Reverse Geocode latlng
setting.
Make sure your system meets the minimum requirements:
This module is using a license field to check if the license for the module is valid or not. On addons.reinos.nl you can check your license and add your valid domains.
In the Module CP you can enter then your license
When you enter a wrong license, the module will not work and it shows you an warning
On a local environment, like *.dev
*.local
*.localhost
*.test
the license will be valid for the testing and building new sites.
Migrate from the old Gmaps Data
to maps_locator
is very easy. In the maps_locator
CP section there is a page that called Migration
.
Here you can migrate the Database and the fieldtype data to the maps_locator
. After the migration you need to disable the Gmaps Data
module manual.
Converting the template tags is very easy, just search the name gmaps_data
and rename it to maps_locator
.
For example:
{exp:gmaps_data:search_form}
becomes
{exp:reinos_maps_locator:search_form}
important: before starting, make sure you make a backup of your old data, in case of failure.
To get the location values from your entry.
{exp:channel:entries dynamic="no" entry_id="2"}
{your_field_type_name}
address: {your_field_type_name:address}<br>
postal_code: {your_field_type_name:postal_code}<br>
city: {your_field_type_name:city}<br>
country: {your_field_type_name:country}<br>
lat: {your_field_type_name:lat}<br>
lng: {your_field_type_name:lng}<br>
{/your_field_type_name}
{/exp:channel:entries}
Below are the Tag Variables. Those Variables can be used inside the tag described above.
{your_field_type_name:address}
{your_field_type_name:postal_code}
{your_field_type_name:city}
{your_field_type_name:country}
{your_field_type_name:state}
{your_field_type_name:lat}
{your_field_type_name:lng}
Get the current searched location. (used with search_result
tag)
{exp:reinos_maps_locator:current_search_location}
Below are the Tag Parameters. Those parameters can be used in the tag described above
set the search_id hash. This way the module will get this hash instead of using the hash from the url.
sort="search_id"
{lat}
{lng}
{city}
{street_name}
{street_number}
{country}
{country_code}
Simply query your entry locations
{exp:reinos_maps_locator:query}
Below are the Tag Parameters. Those parameters can be used in the tag described above
the Langitude
lat=""
lng=""
city=""
street_name=""
postal_code=""
country=""
country_code=""
Below are the Tag Variables. Those Variables can be used inside the tag described above.
{entry_id}
{lat}
{lng}
{city}
{street_name}
{street_number}
{postal_code}
{country}
{country_code}
{exp:reinos_maps_locator:query country_code="nl"}
{if no_results}
No result
{/if}
entry_id: {entry_id}<br>
lat: {lat}<br>
lng: {lng}<br>
city: {city}<br>
street_name: {street_name}<br>
street_number: {street_number}<br>
postal_code: {postal_code}<br>
country: {country}<br>
country_code: {country_code}<br>
{/exp:reinos_maps_locator:query}
Show locations based on a radius
{exp:gmaps_data:radius}
Below are the Tag Parameters. Those parameters can be used in the tag described above
locations=""
radius=""
Order by is by radius
sort="asc"
For use with the paging tags https://docs.expressionengine.com/latest/templates/pagination.html
limit=""
Below are the Tag Variables. Those Variables can be used inside the tag described above.
{entry_id}
{lat}
{lng}
{city}
{street_name}
{street_number}
{postal_code}
{country}
{country_code}
{exp:reinos_maps_locator:radius location="amsterdam" radius="50"}
{if no_results}
No result
{/if}
entry_id: {entry_id}<br>
distance: {distance}<br>
lat: {lat}<br>
lng: {lng}<br>
city: {city}<br>
street_name: {street_name}<br>
street_number: {street_number}<br>
postal_code: {postal_code}<br>
country: {country}<br>
country_code: {country_code}<br>
{/exp:reinos_maps_locator:radius}
Search your location via user form
{exp:reinos_maps_locator:search_form}
Below are the Tag Parameters. Those parameters can be used in the tag described above
set the search_id hash. This way the module will get this hash instead of using the hash from the url.
sort="search_id"
set the type of metrics km
or mile
metric="km"
Give the channel(s) to search. seperate with a pipeline (|) for mulitple channels.
channel=""
Set the location field name of your input field of your form. This will be used to search against the entries.
location_field=""
Set the radius max field name of your input field of your form.
radius_field_max=""
Set the search type field, that hold the values. radius
locality
admin_level
sub_locality
search_type_field=""
the category field that holds the categories (names or ID) to select.
search_category_field=""
set the url of your result page
result_url=""
Set the entry status search.
When you want to search for more then one status, use a pipeline |
as separator
status="open"
Below are the Tag Variables. Those Variables can be used inside the tag described above.
the location value
{location}
the radius value
{radius}
the search_type value
{radius}
The Category id you are searching
{search_category:id}
If searching multiple categories, this holds a loop of data
{search_category}
{search_category:search_category:id}
{/search_category}
{exp:reinos_maps_locator:search_form
metric="km"
channel="channel_1|channel_2"
location_field="location_field"
radius_field_max="radius_field_max"
search_type_field="search_type_field"
result_url="locations/result"
}
<label>Location to search with (this location will be geocoded</label><br>
<input type="text" name="location_field" value="{location}"/>
<br><br>
<label>Radius (only uses when the search_type is set to 'radius')</label><br>
<select name="radius_field_max">
<option {if radius == 20}selected{/if} value="20">20</option>
<option {if radius == 50}selected{/if} value="50">50</option>
<option {if radius == 100}selected{/if} value="100">100</option>
<option {if radius == 5000}selected{/if} value="5000">5000</option>
</select>
<br><br>
<label>Search type</label><br>
<select name="search_type_field">
<option {if search_type == 'radius'}selected{/if} value="radius">Radius</option>
<option {if search_type == 'locality'}selected{/if} value="locality">Within a City</option>
<option {if search_type == 'admin_level'}selected{/if} value="admin_level">Within a state or province</option>
<option {if search_type == 'sub_locality'}selected{/if} value="sub_locality">Within a city_district</option>
</select>
<br><br>
<input type="submit"/>
{/exp:reinos_maps_locator:search_form}
Show your result from the search_form
method.
{exp:reinos_maps_locator:search_result}
Below are the Tag Parameters. Those parameters can be used in the tag described above
set the search_id hash. This way the module will get this hash instead of using the hash from the url.
sort="search_id"
Order by is by radius
sort="asc"
For use with the paging tags https://docs.expressionengine.com/latest/templates/pagination.html
limit=""
Set the entry status search. This will override the default that has been set in the {exp:reinos_maps_locator:search_form}
tag.
When you want to search for more then one status, use a pipeline |
as separator
status="open"
Below are the Tag Variables. Those Variables can be used inside the tag described above.
{entry_id}
{lat}
{lng}
{radius}
{post_radius}
indicates the number of order civil entity below the country level. Within the United States, these administrative levels are states. Not all nations exhibit these administrative levels.
{admin_level_1:name} // prints the first admin level, for us this is the state
{admin_level_2:name} // prints the second admin level, for us this is the state
{city}
{street_name}
{street_number}
{postal_code}
{country}
{country_code}
{absolute_results}
{!-- include the Gmaps module and show a default map with the center on holland and a max zoom of 15 --}
{!-- (otherwise the zoom would be max when placing the markers)--}
{exp:gmaps:init}
{exp:gmaps:geocoding address:center="holland" max_zoom="15"}
{exp:reinos_maps_locator:search_result}
{if no_results}
No result
{/if}
entry_id: {entry_id}<br>
radius: {radius}<br>
lat: {lat}<br>
lng: {lng}<br>
city: {city}<br>
street_name: {street_name}<br>
street_number: {street_number}<br>
postal_code: {postal_code}<br>
country: {country}<br>
country_code: {country_code}<br>
{!-- Data from the native maps_locator fieldtype --}
{exp:channel:entries dynamic="no" entry_id="{entry_id}"}
{maps_locator_test}
address: {maps_locator_test:address}<br>
postal_code: {maps_locator_test:postal_code}<br>
city: {maps_locator_test:city}<br>
country: {maps_locator_test:country}<br>
{/maps_locator_test}
{/exp:channel:entries}
{!-- place markers with the Gmaps module --}
{exp:gmaps:add_marker map:id="1" latlng="{lat},{lng}" fit_map="yes"}
{/exp:reinos_maps_locator:search_result}
status="open"
for the {exp:reinos_maps_locator:search_result}
and the {exp:reinos_maps_locator:search_form}
tags (*Does an full reindex on update){absolute_results}
variable to the {exp:reinos_maps_locator:search_result}
{exp:reinos_maps_locator:current_search_location}
to fetch the current searched location reinos_
due the release of the EE store (\Breaking changes)***Note: There is a change you will have to validate the license again
\Note:** Because the module has been renamed with a prefix reinos_
there is an update path
by simply add the new update to your site and install it. By installing the module, you are disabling the old module
that can be deleted afterward. Also note that you have to rename the module calls and hooks with a prefix reinos_
See this article about the rename https://addons.reinos.nl/news/modules-renamed
{lat}
and {lng}
to the fieldtag