diff --git a/app/Functions/Blade.php b/app/Functions/Blade.php index 39d06ef..2a4e883 100644 --- a/app/Functions/Blade.php +++ b/app/Functions/Blade.php @@ -117,3 +117,29 @@ function assetsUrl(string $id, array $options = NULL) return $_ENV['DIRECTUS_API_URL'].'/assets/'.$id.$query; } + +/** + * + * + * + */ +function isCurrentPage($slug, $class = 'current') +{ + // parse current url + $url = parse_url($_SERVER['REQUEST_URI']); + + // getting path, remove first "/"" + $path = ltrim($url['path'], '/'); + + // parse empty in NULL + // @TODO bad solution, check for using parent + if (empty($path)) { + $path = NULL; + } + + if ($path !== $slug) { + $class = NULL; + } + + return $class; +} diff --git a/app/Repositories/MenuRepository.php b/app/Repositories/MenuRepository.php index 1c002fa..5f3756f 100644 --- a/app/Repositories/MenuRepository.php +++ b/app/Repositories/MenuRepository.php @@ -25,7 +25,7 @@ class MenuRepository extends RepositoryAbstract * @param string $slug * @return array */ - public function findOneByName($name) + public function findByName($name) { $results = $this->queryBuilder ->fields([ @@ -42,14 +42,35 @@ class MenuRepository extends RepositoryAbstract ->aliases('page[status]', 'page_status') ->aliases('page[slug]', 'page_slug') ->filter([ - 'page' => [ - 'status' => 'published' - ], - 'menus' => [ - 'menus_id' => [ - 'name' => $name, - 'status' => 'published' - ] + '_or' => [ + [ + '_and' => [ + [ 'page' => [ + 'id' => [ + '_null' => 'true' + ] + ]], + [ 'menus' => [ + 'menus_id' => [ + 'name' => $name, + 'status' => 'published' + ] + ]] + ] + ], + [ + '_and' => [ + [ 'page' => [ + 'status' => 'published' + ]], + [ 'menus' => [ + 'menus_id' => [ + 'name' => $name, + 'status' => 'published' + ] + ]] + ] + ], ] ]) ->find(); diff --git a/resources/views/layout.blade.php b/resources/views/layout.blade.php index b3384de..fa434d9 100644 --- a/resources/views/layout.blade.php +++ b/resources/views/layout.blade.php @@ -1,10 +1,12 @@ @inject('pageRepository', 'App\Repositories\PageRepository') @inject('siteRepository', 'App\Repositories\SiteRepository') +@inject('menuRepository', 'App\Repositories\MenuRepository') @inject('markdownHelper', 'App\Helpers\MarkdownHelper') @php $site = $siteRepository->findOne(); + $menuItems = $menuRepository->findByName('test'); @endphp @@ -32,6 +34,7 @@ Super Gear Directus + @include('partials.menu', [ 'menuItems' => $menuItems ])
diff --git a/resources/views/partials/menu.blade.php b/resources/views/partials/menu.blade.php new file mode 100644 index 0000000..a9c6186 --- /dev/null +++ b/resources/views/partials/menu.blade.php @@ -0,0 +1,46 @@ +@foreach($menuItems['data'] as $item) + @php + + // class if url is same as page + $current = NULL; + + // attribute target + $target = NULL; + + // if page is not null + if ($item['page']) { + $title = $item['page']['title']; + $url = '/'.$item['page']['slug']; + + // if page is current page + $current = isCurrentPage($item['page']['slug'], ' current'); + + // if title is set overwrite + if ($item['title']) { + $title = $item['title']; + } + + // if page empty and only title and url is set + } elseif ($item['title'] && $item['url']) { + $title = $item['title']; + $url = $item['url']; + + // if target set + if (isset($item['target'])) { + $target = 'target='.$item['target']; + + if ($item['target'] === '_blank') { + $target .= ' rel=noreferrer'; + } + } + + } else { + continue; + } + + @endphp + + + {{ $title }} + +@endforeach \ No newline at end of file