6 Commits

Author SHA1 Message Date
NH Gooi
8c22515397 Merge remote-tracking branch 'dev/dev' 2025-11-20 13:47:40 +01:00
NH Gooi
30bfd34ee3 Support for image block in own article 2025-11-19 22:09:49 +01:00
NH Gooi
d46dc081ef Remove tvgids -> statisch 2025-07-17 21:42:12 +02:00
NH Gooi
acc2260745 Menu styling tweak 2025-07-17 15:57:39 +02:00
NH Gooi
11e1a3ea54 Menu active links 2025-07-17 15:40:31 +02:00
NH Gooi
643efdb404 Menustructuur via intranet te beheren 2025-07-17 14:01:44 +02:00
6 changed files with 117 additions and 178 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',

12
public/css/style.css vendored
View File

@@ -303,6 +303,18 @@ div.pp_default .pp_close:hover {
margin-left: -10px; margin-left: -10px;
} }
.submenu li.selected a {
color: #0f259d !important;
}
.mobile-menu .submenu li.selected a,
.mobile-menu .submenu li:hover a,
.mobile-menu .submenu li.hover a {
color: white !important;
background: linear-gradient(to right, #0f259d, #5ba8f4);
}
.top_menu_container, .menu_mobile_container { .top_menu_container, .menu_mobile_container {
height: 50px; height: 50px;
max-width: 1170px; max-width: 1170px;

View File

@@ -30,39 +30,24 @@
<div class="author">{{$block->data->caption}}</div> <div class="author">{{$block->data->caption}}</div>
</blockquote> </blockquote>
@elseif($block->type == "image") @elseif($block->type == "image")
<?php <a class="post_image page_margin_top prettyPhoto" rel="prettyPhoto" href="/{{$block->data->url}}"
if(isset($block->data->image->imageWide)) title="{{$block->data->title}} &copy; {{$block->data->title}}">
$image = $block->data->image->imageWide; <img src="/{{$block->data->url}}" class="attachment-small-slider-thumb size-small-slider-thumb wp-post-image"
else if(isset($block->data->image->crop)) alt="{{$block->data->title}}" title="" style="display: block;">
$image = $block->data->image->crop;
else if(isset($block->data->image->crops) && isset($block->data->image->crops->{'16:9'}))
foreach($block->data->image->crops->{'16:9'} as $image) break;
else if(isset($block->data->image->imageHigh))
$image = $block->data->image->imageHigh;
else $image = null;
?>
@if($image)
<a class="post_image page_margin_top prettyPhoto" rel="prettyPhoto" href="{{$image}}"
title="{{$block->data->image->title}} &copy; {{$block->data->image->author}}">
<img src="{{$image}}" class="attachment-small-slider-thumb size-small-slider-thumb wp-post-image"
alt="{{$block->data->image->title}}" title="" style="display: block;">
</a> </a>
<div class="sentence"> <div class="sentence">
<?php <?php
$sentence = []; $sentence = [];
if (isset($block->data->image->caption) && $block->data->image->caption) { if (isset($block->data->title) && $block->data->title) {
$sentence[] = '<span class="text">' . $block->data->image->caption . '</span>'; $sentence[] = '<span class="text">' . $block->data->title . '</span>';
} elseif (isset($block->data->image->title) && $block->data->image->title) {
$sentence[] = '<span class="text">' . $block->data->image->title . '</span>';
} }
if (isset($block->data->image->author) && $block->data->image->author) { if (isset($block->data->author) && $block->data->author) {
$sentence[] = '<span class="author">' . $block->data->image->author . '</span>'; $sentence[] = '<span class="author">' . $block->data->author . '</span>';
} }
$sentence = join('<span class="separator">|</span>', $sentence); $sentence = join('<span class="separator">|</span>', $sentence);
?> ?>
{!!$sentence!!} {!!$sentence!!}
</div> </div>
@endif
@elseif($block->type == "video" || $block->type == "headerVideo") @elseif($block->type == "video" || $block->type == "headerVideo")
@include('widgets/mediaplayer') @include('widgets/mediaplayer')
<?php <?php

View File

@@ -1,17 +0,0 @@
@extends('layouts/full')
@section('title')
Televisieprogrammering
@endsection
@section('content')
<div class="page_body">
<p>NHGooi TV zendt iedere dag de NH Gooi Nieuwscarrousel uit. De nieuwscarrousel start steeds op het hele uur en bestaat uit reportages uit Gooi en Vechtstreek, gericht op de kijkers van NH Gooi. Daarnaast vind je op NHGooi TV achtergronden, lokale reportages, cultuur, sport en politiek. NHGooi TV brengt verhalen uit alle hoeken van Gooi &amp; Vechtstreek, met programmas die zijn gemaakt door onze redactie of in samenwerking met regionale partners. De programmering sluit aan bij onze publieke opdracht en is gericht op herkenning, betrokkenheid en actualiteit.</p>
<p>De programmering van NH Gooi TV wordt af en toe aangevuld met speciale programmas, zoals bijvoorbeeld een talkshow of een registratie van een plaatselijk muziekfestijn. Deze programmas worden aangekondigd op onze website.</p>
<p><a href="/kijk/live">Kijk hier online naar NHGooi TV</a>.</p>
</div>
@endsection

View File

@@ -1,149 +1,105 @@
<?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, $submenus)
{ {
if (is_array($link)) { if(count($submenus) > 0) {
if (!$checksubmenus) { foreach ($submenus as $subitem) {
return false; if (isActive($subitem->link, $subitem->submenu)) {
} return true;
foreach ($link as $item => $link) { }
if (isActive($link, $checksubmenus)) { }
return true; }
}
}
return false; if($link == "#") {
} return false;
}
if ($link == "/") { if ($link == "/") {
return $_SERVER["REQUEST_URI"] == "/" || $_SERVER["REQUEST_URI"] == ""; return $_SERVER["REQUEST_URI"] == "/" || $_SERVER["REQUEST_URI"] == "";
} }
return (substr($_SERVER["REQUEST_URI"], 0, strlen($link)) == $link); 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, $item->submenu);
$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('/', []) || isActive('/nieuws', []) ? "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('/', []) || isActive('/nieuws', []) ? "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>