Sorting entries by closest locations
Smart Map has been replaced by Google Maps
Please install the Google Maps plugin instead. ➡️
As of February 2021, the Smart Map plugin has been completely rebuilt and replaced with the new Google Maps plugin for Craft CMS. For more details, see here...
The documentation below is for historical reference only.
# Twig template
Include this in your craft.entries
call:
.myFieldHandle(params).orderBy('distance')
This will tell Craft to:
- Filter your Address field with the parameters you specify.
- Order the results by closest distance from your specified target.
{# example.com/search?near=90210 #}
{% set target = craft.request.getParam('near') %}
{% set params = {
target: target,
range: 100
} %}
{% set entries = craft.entries.myFieldHandle(params).orderBy('distance').all() %}
<h1>Showing results for "{{ target }}"...</h1>
{% for entry in entries %}
<h2>{{ entry.title }}</h2>
<div>
{{ entry.myFieldHandle.street1 }}<br />
{{ entry.myFieldHandle.street2 }}<br />
{{ entry.myFieldHandle.city }}, {{ entry.myFieldHandle.state }} {{ entry.myFieldHandle.zip }}<br>
<strong>{{ entry.myFieldHandle.distance | number_format(1) }} miles away</strong>
</div>
{% else %}
<h2>No results found</h2>
{% endfor %}
Your target can be anything that translates into a full or partial address...
- 90210
- Aurora, IL
- 742 Evergreen Terrace
Or you can even use specific coordinates (lat,lng) as your target...
- 38.897659,-77.036587
All parameters are optional.
Parameter | Default | Description |
---|---|---|
target | (autodetects) | Starting point for proximity search |
range | 25 | Search radius, measured in units |
units | miles | Units of measurement (miles or kilometers ) |
# PHP in a separate plugin or module
This operates very similarly to how it's done in Twig:
$entries = Entry::find()
->myFieldHandle([
'target' => 90210,
'range' => 100
])
->orderBy('distance')
->all();