Menustructuur via intranet te beheren

This commit is contained in:
NH Gooi
2025-07-17 14:01:44 +02:00
parent e3564b524f
commit 643efdb404
3 changed files with 85 additions and 142 deletions

View File

@@ -19,7 +19,7 @@ class Controller extends BaseController
private function getDataFromFileAndConvert($file, $path, $class, $maxItems = 0) private function getDataFromFileAndConvert($file, $path, $class, $maxItems = 0)
{ {
$data = json_decode(Storage::disk('local')->get($file)); $data = json_decode(Storage::get($file));
foreach ($path as $subobject) { foreach ($path as $subobject) {
$data = $data->$subobject ?? []; $data = $data->$subobject ?? [];
} }
@@ -47,7 +47,7 @@ class Controller extends BaseController
$view->with('data', $this->getDataFromFileAndConvert('populair_nieuws.json', ['news'], '\Model\NewsItem')); $view->with('data', $this->getDataFromFileAndConvert('populair_nieuws.json', ['news'], '\Model\NewsItem'));
}); });
View::composer('widgets.nustraks', function ($view) { View::composer('widgets.nustraks', function ($view) {
$data = json_decode(Storage::disk('local')->get('nu_straks.json'))->schedule; $data = json_decode(Storage::get('nu_straks.json'))->schedule;
$programs = []; $programs = [];
foreach ($data as $item_data) { foreach ($data as $item_data) {
$programs[] = $program = new \Model\Program($item_data->program); $programs[] = $program = new \Model\Program($item_data->program);
@@ -57,7 +57,7 @@ class Controller extends BaseController
// Need a bit of slack here, otherwise the current program may show up // Need a bit of slack here, otherwise the current program may show up
$now = new \DateTimeImmutable('2 minutes ago'); $now = new \DateTimeImmutable('2 minutes ago');
$data = json_decode(Storage::disk('local')->get('zojuist.json'))->schedule; $data = json_decode(Storage::get('zojuist.json'))->schedule;
$i = 0; $i = 0;
foreach (array_reverse($data) as $item_data) { foreach (array_reverse($data) as $item_data) {
$recent = $program = new \Model\Program($item_data->program); $recent = $program = new \Model\Program($item_data->program);
@@ -91,6 +91,9 @@ class Controller extends BaseController
$this->getDataFromFileAndConvert('laatste_podcasts.json', ['podcasts'], '\Model\Podcast') $this->getDataFromFileAndConvert('laatste_podcasts.json', ['podcasts'], '\Model\Podcast')
); );
}); });
View::composer('widgets.menu', function($view) {
$view->with('items', json_decode(Storage::get('static/menu.json')));
});
View::share('disableBanners', env('DISABLE_BANNERS', false)); View::share('disableBanners', env('DISABLE_BANNERS', false));
} }

View File

@@ -48,12 +48,12 @@ return [
'root' => storage_path('app'), 'root' => storage_path('app'),
], ],
'public' => [ //'public' => [
'driver' => 'local', // 'driver' => 'local',
'root' => storage_path('app/public'), // 'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage', // 'url' => env('APP_URL').'/storage',
'visibility' => 'public', // 'visibility' => 'public',
], //],
's3' => [ 's3' => [
'driver' => 's3', 'driver' => 's3',

View File

@@ -1,149 +1,89 @@
<?php $menu = array(
"Radio" => array(
"" => "/gids",
"Luister live" => "/luister/live",
"Kijk in de studio" => "/kijk/studio",
"Regionieuws" => "/luister/regionieuws",
"Programmagids" => "/gids",
"Programma gemist" => "/gemist/programma",
"Fragment gemist" => "/gemist/fragment"
),
// "Zondagsdienst" => "/kerkdienst"),
"TV" => array(
"" => "/kijk/live",
"Kijk live" => "/kijk/live",
"TV-programmering" => "/kijk/gids",
),
// "NHGOOI TV @ YouTube" => "https://www.youtube.com/channel/UC0qLwqmXiLoL5PrLlgB6B4Q"),
// "Evenementen" => array(
// "Debatten gemeenteraad" => "/debat"),
// "24 uur Scherp de Zeis (4 december)" => "/programma/1030/scherp-zeis",
// "Winterse 50 (25 december)" => "/programma/1080/winterse-50",
// "Vroeger of Later Luisterlijst (2 januari)" => "/vol-luisterlijst"),
"Podcasts" => array(
"" => "/podcast",
"NH Gooi Spreekuur" => "/podcast/1091/nh-gooi-spreekuur",
"Gooise Mythes Ontrafeld" => "/podcast/1106/gooise-mythes-ontrafeld",
"NH Gooi Wijsneuzen" => "/podcast/1098/nh-gooi-wijsneuzen",
"Hilversum in de oorlog" => "/podcast/1097/hilversum-in-de-oorlog",
),
"Gemist" => "/gemist/programma",
"Streekagenda" => "/agenda",
"Over NH Gooi" => array(
"" => "/contact",
"Contact" => "/contact",
"Redactie" => "/redactie",
"Vacatures" => "/vacatures",
"Klachtenregeling" => "/klachten",
// "Rol en ambities lokale nieuwsvoorziening" => "/uploads/Eigen rol en ambities NH Gooi binnen de lokale nieuwsvoorziening.pdf",
"Frequenties" => "/frequenties",
"NH Gooi-app" => "/app"
),
"Adverteren" => "/adverteren"
);
?>
<?php <?php
function isActive($link, $checksubmenus) function isActive($link, $checksubmenus)
{ {
if (is_array($link)) { return false;
if (!$checksubmenus) {
return false;
}
foreach ($link as $item => $link) {
if (isActive($link, $checksubmenus)) {
return true;
}
}
return false;
}
if ($link == "/") {
return $_SERVER["REQUEST_URI"] == "/" || $_SERVER["REQUEST_URI"] == "";
}
return (substr($_SERVER["REQUEST_URI"], 0, strlen($link)) == $link);
} }
function buildMenu($menu, $ismobile) function buildMenu($menu, $ismobile)
{ {
$result = ""; $result = "";
foreach ($menu as $title => $link) { foreach ($menu as $item) {
if ($title == "") { if ($item->titel == "") {
continue; continue;
} }
$submenu = is_array($link);
$isactive = isActive($link, !$ismobile); $submenu = count($item->submenu) > 0;
$icon = ""; $isactive = isActive($item->link, !$ismobile);
$isplayer = false; $icon = "";
$isplayer = false;
$isFile = false; $isFile = false;
$liClass = ""; $liClass = "";
if (!$submenu && substr($link, 0, 8) == '/luister') { if (!$submenu && substr($item->link, 0, 8) == '/luister') {
$icon = "fas fa-headphones"; $icon = "fas fa-headphones";
$isplayer = true; $isplayer = true;
} }
if (!$submenu && $link == '/kijk/live') { if (!$submenu && $item->link == '/kijk/live') {
$icon = "fas fa-tv"; $icon = "fas fa-tv";
} }
if (!$submenu && $link == '/kijk/studio') { if (!$submenu && $item->link == '/kijk/studio') {
$liClass = "watch-studio"; $liClass = "watch-studio";
$icon = "fas fa-video"; $icon = "fas fa-video";
} }
if (!$submenu && substr($link, 0, 23) == 'https://www.youtube.com') { if (!$submenu && substr($item->link, 0, 23) == 'https://www.youtube.com') {
$icon = "fab fa-youtube"; $icon = "fab fa-youtube";
} }
if (!$submenu && substr($link, strlen($link) - 4, 4) == '.pdf') { if (!$submenu && substr($item->link, strlen($item->link) - 4, 4) == '.pdf') {
$icon = "fas fa-file-pdf"; $icon = "fas fa-file-pdf";
$isFile = true; $isFile = true;
} }
$submenulink = $submenu && isset($link[""]) ? $link[""] : "#"; $submenulink = $submenu && isset($item->link[""]) ? $item->link[""] : "#";
$target = substr($submenu ? $submenulink : $link, 0, 4) == "http" || $isFile ? "target='_blank'" : ""; $target = substr($submenu ? $submenulink : $item->link, 0, 4) == "http" || $isFile ? "target='_blank'" : "";
if ($icon) { if ($icon) {
$icon = "<span class='$icon'></span>&nbsp;"; $icon = "<span class='$icon'></span>&nbsp;";
} else { } else {
$icon = ""; $icon = "";
} }
$result .= $result .=
"<li class=\"" . ($submenu ? "has_submenu" : "") . ($isactive ? " selected" : "") . ($liClass ? " $liClass" : "") . "\"> "<li class=\"" . ($submenu ? "has_submenu" : "") . ($isactive ? " selected" : "") . ($liClass ? " $liClass" : "") . "\">
<a href=\"" . ($submenu ? $submenulink : $link) . "\" class=\"" . ($isplayer ? "player" : "") . "\" title=\"{$title}\" {$target}>{$icon}{$title}</a>"; <a href=\"" . ($submenu ? $submenulink : $item->link) . "\" class=\"" . ($isplayer ? "player" : "") . "\" title=\"{$item->titel}\" {$target}>{$icon}{$item->titel}</a>";
if ($submenu) { if ($submenu) {
$result .= "\t\t\t<ul class=\"submenu\">\n" $result .= "\t\t\t<ul class=\"submenu\">\n"
. buildMenu($link, $ismobile) . buildMenu($item->submenu, $ismobile)
. "\t\t\t</ul>\n"; . "\t\t\t</ul>\n";
} }
$result .= "\t\t</li>\n"; $result .= "\t\t</li>\n";
} }
return $result; return $result;
} }
?> ?>
<nav class="d-none d-md-flex"> <nav class="d-none d-md-flex">
<div></div> <div></div>
<ul class="menu d-none d-lg-block"> <ul class="menu d-none d-lg-block">
<li class="{{isActive('/', false) || isActive('/nieuws', false) ? "selected" : ""}}"> <li class="{{isActive('/', false) || isActive('/nieuws', false) ? "selected" : ""}}">
<a href="/" title="Nieuws">Nieuws</a> <a href="/" title="Nieuws">Nieuws</a>
</li> </li>
{!! buildMenu($menu, false) !!} {!! buildMenu($items, false) !!}
<li></li> <li></li>
</ul> </ul>
<div></div> <div></div>
</nav> </nav>
<div class="mobile_menu_container"> <div class="mobile_menu_container">
<nav id="mobile_menu_nav"> <nav id="mobile_menu_nav">
<ul class="mobile-menu"> <ul class="mobile-menu">
<li class="logo_close_button"> <li class="logo_close_button">
<div class="logo"> <div class="logo">
<a href="{{url('/')}}"><img src="/images/logo-NHGooi.svg"/></a> <a href="{{url('/')}}"><img src="/images/logo-NHGooi.svg"/></a>
</div> </div>
<div class="mobile_close_menu_button"> <div class="mobile_close_menu_button">
<a href="javascript:void(0)"><i class="fa-solid fa-xmark"></i></a> <a href="javascript:void(0)"><i class="fa-solid fa-xmark"></i></a>
</div> </div>
</li> </li>
<li class="{{isActive('/', false) || isActive('/nieuws', false) ? "selected" : ""}}"> <li class="{{isActive('/', false) || isActive('/nieuws', false) ? "selected" : ""}}">
<a href="/" title="Nieuws">Nieuws</a> <a href="/" title="Nieuws">Nieuws</a>
</li> </li>
{!! buildMenu($menu, true) !!} {!! buildMenu($items, true) !!}
</ul> </ul>
</nav> </nav>
</div> </div>