FieldtypeAddressGeonames Module for ProcessWire
This module is in an early stage of development. Use at your own risk
I use this on a production site since 2017 but with modified JS.
This Fieldtype for ProcessWire holds an address consisting of country, countrycode, postcode and city, latitude and longitude. Country, postcode and city data are pulled from http://www.geonames.org using a slightly modified version of jeoQuery.
Optionally this fieldtype can store latitude and longitude to interact with FieldtypeLeafletMapMarker. When this option is chosen the geocoding of the address to latitude/longitude is made with help of the Google Maps API. The resulting values may be used to populate any kind of map (whether Leaflet Maps or another).
- Copy all of the files for this module into /site/modules/FieldtypeAddressGeonames/
- In your admin, go to the Modules screen and "check for new modules." Under the 'Fieldtype' section, install the 'Geonames Address' module (FieldtypeAddressGeonames). This will also install the InputfieldAddressGeonames module which provides the address inputs.
- In your admin, go to Setup > Fields > Add New Field. Choose "AddressGeonames" as the type. If you are not sure what to name your field, simply "address" is a good one! Once created, configure the settings on the input tab.
- Add your new "map" field to one or more templates, as you would any other field.
- "Enable editing of City field": Manual editing of the city field is disabled by default. If you want to enable it, check this box.
- "Interact with InputfieldLeafletMapMarker for geocoding": This will enable storage of latitude/longitude in hidden fields. The module automatically detects the name of your InputfieldLeafletMapMarker on that page template and will write latitude/longitude to and from that field to its own data. When enabled, the Adress/Latitude/Longitude and Zoom inputs of InputfieldLeafletMapMarker will be hidden. If you want to use this option, I recommend placing your address field and your location (InputfieldLeafletMapMarker) field next to each other. But this is not mandatory to make the fields work together.
How to use from the page editor
- Create or edit a page using one of the templates you added the "address" field to.
- Choose a country from the list (postcode and city fields are only editable after a country has been chosen)
- Enter a postcode. When you leave the postcode field the corresponding city will be pulled from geonames.org
- By default you can not change/edit the city field. You can allow edit with the corresponding field setting, though.
- Fill in Address fields (optional)
- Save the page. The country code will be saved in the background. If you have enabled "Interact with InputfieldLeafletMapMarker for geocoding" in the field settings, the available address details will be used to geocode latitude/longitude in the background. Those will be saved to hidden fields and are available through the API. If the exact address cannot be found for geocoding, the lat/lng for the city will be saved and you will get a warning that you need to set the marker in your map field manually.
If the geocoding does not work, please ensure that your browser is not blocking the execution of any scripts.
How to use from the API, in your template files
In your template files, you can utilize this data.
Lets assume that your field is called 'address'. Here is how you would access the components of it from the API:
echo $page->address->country; // outputs the country echo $page->address->countrycode; // outputs the country code echo $page->address->postcode; // outputs the postcode echo $page->address->city; // outputs the city echo $page->address->adress1; // outputs the adress1 echo $page->address->adress2; // outputs the adress2 echo $page->address->lat; // outputs the latitude (only available if set in the field settings otherwise 0) echo $page->address->lng; // outputs the longitude (only available if set in the field settings otherwise 0) ````````` ------------- ### Contributors * [gebeer](https://processwire.com/talk/profile/1920-gebeer/) created this module and extended Mats' work on the FieldtypeLeafletMapMarker, adding the Inline Scripts module and leaflet-providers for choice of map tiles. * [Ryan Cramer](https://processwire.com/talk/profile/2-ryan/) provided the original Google Maps module. * [Mats](https://processwire.com/talk/profile/67-mats/) produces the original Leaflet version. * [netcarver](https://processwire.com/talk/profile/465-netcarver/) added callback formatters for marker and popover content generation. He also added AwesomeMarker support.