SuperSort
...a super-duper sorting function for your Craft CMS templates., (*1)
A Top Shelf Craft creation
Michael Rog, Proprietor, (*2)
What is SuperSort?
The SuperSort plugin provides a powerful Twig filter that helps with ordering an array of values — either using one of PHP's built-in methods to sort the actual values, or using custom "sort as" methods to arrange the array based on the rendered results of processing each member as a Twig object template., (*3)
Using SuperSort's "sort as" methods, you can sort an array of elements by any accessible object value — including values from Matrix blocks, attributes of related elements, math calculations, etc., (*4)
Usage
Installation
Visit the Plugin Store in your Craft control panel, search for SuperSort, and click to Install the plugin., (*5)
Or, if you're feeling frisky, you can install SuperSort via Composer:, (*6)
composer require topshelfcraft/supersort
General usage
Use the supersort
filter to sort an array of objects., (*7)
(You can apply supersort
to any array or ElementQuery. A non-array-like source will be converted into a single-item array... which probably isn't very useful for sorting.), (*8)
Basic Sorting
The first parameter of the filter specifies the sort method., (*9)
{% set sortedSource = source | supersort('asort') %}
You can use any of PHP's built-in sort methods:, (*10)
If you don't supply this first parameter, a plain vanilla asort
will be applied:, (*11)
{% set sortedSource = source | supersort %}
In many common cases — such as when you're sorting names, numbers, or filenames — the default 'asort'
algorithm may produce unwanted results. In those cases, consider using the case-insensitive natural sorting algorithm ('natcasesort'
)., (*12)
Advanced ("As") Sorting
You can also sort by one of SuperSort's custom methods:, (*13)
'sortAs'
'rsortAs'
'natsortAs'
'natcasesortAs'
To use these methods, you will provide a second parameter, which is a Twig object template to render using each object in the array:, (*14)
{% set upcomingEvents = upcomingEvents | supersort('sortAs', '{eventDates.first.date}') %}
{% set upcomingEvents = upcomingEvents | supersort('sortAs', '{{ object.eventDates.first.date }}') %}
(This "object template" syntax is the same as you might use to define a Dynamic Subfolder Path for an Assets field., (*15)
Sort Flags
You can optionally provide a third parameter — one of PHP's sort flags., (*16)
{% set source = source | supersort('sortAs', '{foo}', SORT_NUMERIC) %}
{% set source = source | supersort('asort', null, SORT_NUMERIC) %}
If you don't supply this third parameter, the default (SORT_REGULAR
) flag is used., (*17)
Using SuperSort as a PHP helper
If you'd like to use the superSort()
method as a helper in another Craft plugin or component, you can access it in PHP directly from the Sorter service:, (*18)
$result = Sorter::superSort($array, $method, $as, $sortFlag, $comp);
(Note: PHP's built-in sort methods sort an array in place and return a boolean representing success. The superSort()
method, by contrast, returns the result array.), (*19)
Support
What are the system requirements?
Craft 4.0+ and PHP 8.0+, (*20)
I found a bug.
Nah..., (*21)
I triple-checked. It's a bug.
Well, alright. Please open a GitHub Issue, or submit a PR to the 4.x.dev
branch., (*22)
Contributors: