/**
  * Generate an list of items that will be loaded into the custom menu
  *
  * @param $menu template slug for retriving a menu
  * @return ArrayList
  */
 public function CustomMenu($menu = "")
 {
     $menu_items = new ArrayList();
     if (isset($menu)) {
         // Ensure argument is safe for database
         $menu = Convert::raw2sql($menu);
         $filter = array('Slug' => $menu);
         if ($menu = CustomMenuHolder::get()->filter($filter)->first()) {
             // If a custom order is set, use it
             if ($menu->Order) {
                 $order = explode(',', $menu->Order);
             }
             if (isset($order) && is_array($order) && count($order) > 0) {
                 foreach ($order as $item) {
                     $menu_items->push($menu->Pages()->find('ID', $item));
                 }
             } else {
                 foreach ($menu->Pages() as $item) {
                     $menu_items->push($item);
                 }
             }
         }
     }
     return $menu_items;
 }
 /**
  * Create default menu items if no items exist
  *
  * @see sapphire/core/model/DataObject#requireDefaultRecords()
  */
 function requireDefaultRecords()
 {
     parent::requireDefaultRecords();
     // Main Menu
     if ($this->class == 'CustomMenuHolder') {
         if (!DataObject::get_one($this->class)) {
             $menu = new CustomMenuHolder();
             $menu->Title = 'Main Menu';
             $menu->Slug = "main-menu";
             $menu->write();
             $menu->flushCache();
             if (method_exists('Database', 'alteration_message')) {
                 Database::alteration_message("Main menu created", "created");
             } else {
                 DB::alteration_message("Main menu created", "created");
             }
             $menu = new CustomMenuHolder();
             $menu->Title = 'Header Menu';
             $menu->Slug = "header-menu";
             $menu->write();
             $menu->flushCache();
             if (method_exists('Database', 'alteration_message')) {
                 Database::alteration_message("Header menu created", "created");
             } else {
                 DB::alteration_message("Header menu created", "created");
             }
             $menu = new CustomMenuHolder();
             $menu->Title = 'Footer Menu';
             $menu->Slug = "footer-menu";
             $menu->write();
             $menu->flushCache();
             if (method_exists('Database', 'alteration_message')) {
                 Database::alteration_message("Footer menu created", "created");
             } else {
                 DB::alteration_message("Footer menu created", "created");
             }
         }
     }
 }
<?php

// Enable Subsite Support if needed
if (class_exists('Subsite')) {
    CustomMenuHolder::add_extension('CustomMenuHolder_SubsiteExtension');
    CustomMenuAdmin::add_extension('SubsiteMenuExtension');
}