Custom Grouping Order

Or, the whole thing as a pages method (using some other conditions, but can be adapted as needed):

pages::$methods['groupByDatePeriod'] = function($pages) {
  return $pages
    ->map(function($p) {
        if($p->date() > time()) { $p->order = 1; $p->group = 'future';}
        else if($p->date('Y-m-d') == date('Y-m-d')) {$p->order = 2; $p->group = 'today';}
        else if($p->date() >= strtotime('-7 day'))   {$p->order = 3; $p->group = 'this week';}
        else if($p->date() >= strtotime('-1 month')) {$p->order = 4; $p->group = 'this month';}
        else {$p->order = 5; $p->group = 'older';}
        return $p;
      })
    ->sortBy('order')
    ->group(function($p){
       return $p->group();
	  });
	};
$groups = $site->find('projects','blog')->children()->visible()->groupByDatePeriod();

foreach($groups as $key => $items):?>
  <h2><?=  $key ?></h2>
  <ul>
    <?php foreach($items as $item): ?>
      <li><?= $item->title() . '--' . $item->date('Y-m-d') ?></li>
    <?php endforeach ?>
  </ul>
<?php endforeach ?>
2 Likes