File: D:/HostingSpaces/SBogers10/beat-the-barn.komma.nl/app/Pages/PageController.php
<?php
namespace App\Pages;
use App\Base\Controller;
use App\Meals\Models\Meal;
use App\Pages\Models\Page;
use Illuminate\Database\Eloquent\Collection;
use Komma\KMS\Components\ComponentService;
final class PageController extends Controller
{
const DEFAULT_VIEW = 'templates.default';
/**
* @param Page $page
* @return \Illuminate\Contracts\View\View
*/
public function show(Page $page)
{
// Get the page through the set links if translation isn't defined
if(!isset($page->translation)) $page = $this->links->{$page->code_name}->node;
/** @var ComponentService $componentService */
$componentService = app(ComponentService::class);
$components = $componentService->getViewComponents($page->translation);
// Make language menu for given page
$languageMenu = $this->pageService->makeLanguageSwitchForPage($this->links->{$page->code_name}, $this->links->home);
$view = 'templates.' . $page->code_name;
if( ! view()->exists($view)) {
$view = self::DEFAULT_VIEW;
}
if($page->getDepth() > 1) {
$page->parent = $this->links->{$page->getParent()->code_name}->node;
if($view === self::DEFAULT_VIEW) {
$page->load('images');
$view = 'templates.' . $page->parent->code_name . '_detail';
}
}
// Pre view object
$viewData = [
'components' => $components,
'links' => $this->links,
'languageMenu' => $languageMenu,
'page' => $page,
];
$view = view($view, $viewData);
// Inject sub menu if page has children, or has a parent
if($page->rgt != $page->lft + 1) $view = $view->with(['subMenu' => $this->loadSubmenu($page)]);
elseif(isset($page->parent)) $view = $view->with(['subMenu' => $this->loadSubmenu($page->parent)]);
return $view;
}
private function loadSubmenu(Page $page)
{
$children = $page->findChildren();
$subMenu = [];
foreach ($children as $child) {
if(empty($this->links->{$child->code_name})) continue;
$subMenu[] = $this->links->{$child->code_name}->node;
}
$subMenu = Collection::make($subMenu);
$subMenu->load('images');
return $subMenu;
}
}