/**
  * Получение карты сайта.
  *
  * @param bool $includeHidden Включить скрытые страницы
  *
  * @return TreeCollection
  */
 public static function get($includeHidden = false)
 {
     $status = (bool) $includeHidden ? 1 : 0;
     if (!array_key_exists($status, static::$sitemap)) {
         $query = Page::orderBy('parent_id', 'asc')->orderBy('position', 'asc');
         if ((bool) $includeHidden === false) {
             $query->whereIn('status', [FrontendPage::STATUS_PUBLISHED]);
         }
         $pages = [];
         foreach ($query->get() as $page) {
             $pages[$page->id] = $page->toArray();
             $pages[$page->id]['uri'] = '';
             $pages[$page->id]['url'] = '';
             $pages[$page->id]['slug'] = $page->slug;
             $pages[$page->id]['level'] = 0;
             $pages[$page->id]['is_active'] = true;
         }
         $structuredPages = [];
         foreach ($pages as &$page) {
             $structuredPages[$page['parent_id']][] =& $page;
         }
         foreach ($pages as &$page) {
             if (isset($structuredPages[$page['id']])) {
                 foreach ($structuredPages[$page['id']] as &$_page) {
                     $_page['level'] = $page['level'] + 1;
                     $_page['parent'] = $page;
                     $_page['uri'] = $page['uri'] . '/' . $_page['slug'];
                     $_page['url'] = url($_page['uri']);
                     $_page['is_active'] = URL::match($_page['uri']);
                     if (empty($_page['layout_file'])) {
                         $_page['layout_file'] = $page['layout_file'];
                     }
                     if ($_page['is_active']) {
                         $page['is_active'] = true;
                     }
                 }
                 $page['childs'] = $structuredPages[$page['id']];
             }
         }
         static::$sitemap[$status] = new TreeCollection(reset($structuredPages));
     }
     return clone static::$sitemap[$status];
 }
Exemple #2
0
 /**
  * @return string
  */
 public function getFrontendUrl()
 {
     return URL::frontend($this->getUri());
 }