diff --git a/src/Renderer/TwigExtensionSorts.php b/src/Renderer/TwigExtensionSorts.php index d2414bb..957988b 100644 --- a/src/Renderer/TwigExtensionSorts.php +++ b/src/Renderer/TwigExtensionSorts.php @@ -31,6 +31,7 @@ public function getName() public function getFilters() { $filters = [ + new \Twig_SimpleFilter('sortByTitle', [$this, 'sortByTitle']), new \Twig_SimpleFilter('sortByWeight', [$this, 'sortByWeight']), new \Twig_SimpleFilter('sortByDate', [$this, 'sortByDate']), ]; @@ -38,6 +39,39 @@ public function getFilters() return $filters; } + /** + * Sort by title. + * + * @param $array|\PHPoole\Collection\CollectionInterface + * + * @return mixed + */ + public function sortByTitle($array) + { + $callback = function ($a, $b) { + if (!isset($a['title'])) { + return 1; + } + if (!isset($b['title'])) { + return -1; + } + if ($a['title'] == $b['title']) { + return 0; + } + + return ($a['title'] < $b['title']) ? -1 : 1; + }; + + if ($array instanceof \PHPoole\Collection\AbstractCollection) { + $array = $array->toArray(); + } + if (is_array($array)) { + usort($array, $callback); + } + + return $array; + } + /** * Sort by weight. *