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)
{
$data = json_decode(Storage::disk('local')->get($file));
$data = json_decode(Storage::get($file));
foreach ($path as $subobject) {
$data = $data->$subobject ?? [];
}
@@ -47,7 +47,7 @@ class Controller extends BaseController
$view->with('data', $this->getDataFromFileAndConvert('populair_nieuws.json', ['news'], '\Model\NewsItem'));
});
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 = [];
foreach ($data as $item_data) {
$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
$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;
foreach (array_reverse($data) as $item_data) {
$recent = $program = new \Model\Program($item_data->program);
@@ -91,6 +91,9 @@ class Controller extends BaseController
$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 File

@@ -48,12 +48,12 @@ return [
'root' => storage_path('app'),
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
//'public' => [
// 'driver' => 'local',
// 'root' => storage_path('app/public'),
// 'url' => env('APP_URL').'/storage',
// 'visibility' => 'public',
//],
'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
function isActive($link, $checksubmenus)
{
if (is_array($link)) {
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);
return false;
}
function buildMenu($menu, $ismobile)
{
$result = "";
foreach ($menu as $title => $link) {
if ($title == "") {
continue;
}
$submenu = is_array($link);
$isactive = isActive($link, !$ismobile);
$icon = "";
$isplayer = false;
$result = "";
foreach ($menu as $item) {
if ($item->titel == "") {
continue;
}
$submenu = count($item->submenu) > 0;
$isactive = isActive($item->link, !$ismobile);
$icon = "";
$isplayer = false;
$isFile = false;
$liClass = "";
if (!$submenu && substr($link, 0, 8) == '/luister') {
$icon = "fas fa-headphones";
$isplayer = true;
}
if (!$submenu && $link == '/kijk/live') {
$icon = "fas fa-tv";
}
if (!$submenu && $link == '/kijk/studio') {
$liClass = "watch-studio";
$icon = "fas fa-video";
}
if (!$submenu && substr($link, 0, 23) == 'https://www.youtube.com') {
$icon = "fab fa-youtube";
}
if (!$submenu && substr($link, strlen($link) - 4, 4) == '.pdf') {
$icon = "fas fa-file-pdf";
$isFile = true;
}
$liClass = "";
if (!$submenu && substr($item->link, 0, 8) == '/luister') {
$icon = "fas fa-headphones";
$isplayer = true;
}
if (!$submenu && $item->link == '/kijk/live') {
$icon = "fas fa-tv";
}
if (!$submenu && $item->link == '/kijk/studio') {
$liClass = "watch-studio";
$icon = "fas fa-video";
}
if (!$submenu && substr($item->link, 0, 23) == 'https://www.youtube.com') {
$icon = "fab fa-youtube";
}
if (!$submenu && substr($item->link, strlen($item->link) - 4, 4) == '.pdf') {
$icon = "fas fa-file-pdf";
$isFile = true;
}
$submenulink = $submenu && isset($link[""]) ? $link[""] : "#";
$target = substr($submenu ? $submenulink : $link, 0, 4) == "http" || $isFile ? "target='_blank'" : "";
if ($icon) {
$icon = "<span class='$icon'></span>&nbsp;";
} else {
$icon = "";
}
$result .=
"<li class=\"" . ($submenu ? "has_submenu" : "") . ($isactive ? " selected" : "") . ($liClass ? " $liClass" : "") . "\">
<a href=\"" . ($submenu ? $submenulink : $link) . "\" class=\"" . ($isplayer ? "player" : "") . "\" title=\"{$title}\" {$target}>{$icon}{$title}</a>";
if ($submenu) {
$result .= "\t\t\t<ul class=\"submenu\">\n"
. buildMenu($link, $ismobile)
. "\t\t\t</ul>\n";
}
$result .= "\t\t</li>\n";
}
$submenulink = $submenu && isset($item->link[""]) ? $item->link[""] : "#";
$target = substr($submenu ? $submenulink : $item->link, 0, 4) == "http" || $isFile ? "target='_blank'" : "";
if ($icon) {
$icon = "<span class='$icon'></span>&nbsp;";
} else {
$icon = "";
}
$result .=
"<li class=\"" . ($submenu ? "has_submenu" : "") . ($isactive ? " selected" : "") . ($liClass ? " $liClass" : "") . "\">
<a href=\"" . ($submenu ? $submenulink : $item->link) . "\" class=\"" . ($isplayer ? "player" : "") . "\" title=\"{$item->titel}\" {$target}>{$icon}{$item->titel}</a>";
if ($submenu) {
$result .= "\t\t\t<ul class=\"submenu\">\n"
. buildMenu($item->submenu, $ismobile)
. "\t\t\t</ul>\n";
}
$result .= "\t\t</li>\n";
}
return $result;
return $result;
}
?>
<nav class="d-none d-md-flex">
<div></div>
<ul class="menu d-none d-lg-block">
<li class="{{isActive('/', false) || isActive('/nieuws', false) ? "selected" : ""}}">
<a href="/" title="Nieuws">Nieuws</a>
</li>
{!! buildMenu($menu, false) !!}
<li></li>
</ul>
<div></div>
<div></div>
<ul class="menu d-none d-lg-block">
<li class="{{isActive('/', false) || isActive('/nieuws', false) ? "selected" : ""}}">
<a href="/" title="Nieuws">Nieuws</a>
</li>
{!! buildMenu($items, false) !!}
<li></li>
</ul>
<div></div>
</nav>
<div class="mobile_menu_container">
<nav id="mobile_menu_nav">
<ul class="mobile-menu">
<li class="logo_close_button">
<div class="logo">
<a href="{{url('/')}}"><img src="/images/logo-NHGooi.svg"/></a>
</div>
<div class="mobile_close_menu_button">
<a href="javascript:void(0)"><i class="fa-solid fa-xmark"></i></a>
</div>
</li>
<li class="{{isActive('/', false) || isActive('/nieuws', false) ? "selected" : ""}}">
<a href="/" title="Nieuws">Nieuws</a>
</li>
{!! buildMenu($menu, true) !!}
</ul>
</nav>
<nav id="mobile_menu_nav">
<ul class="mobile-menu">
<li class="logo_close_button">
<div class="logo">
<a href="{{url('/')}}"><img src="/images/logo-NHGooi.svg"/></a>
</div>
<div class="mobile_close_menu_button">
<a href="javascript:void(0)"><i class="fa-solid fa-xmark"></i></a>
</div>
</li>
<li class="{{isActive('/', false) || isActive('/nieuws', false) ? "selected" : ""}}">
<a href="/" title="Nieuws">Nieuws</a>
</li>
{!! buildMenu($items, true) !!}
</ul>
</nav>
</div>