Files
website/rendering/View/NavigationView.php

112 lines
2.7 KiB
PHP

<?php
/**
* Created by CS medien- & kommunikationssysteme.
* @author Christian Steinle
* @date 03.08.2016
*
* @copyright CS medien- & kommunikationssysteme (http://www.steinle-computer.de)
*/
namespace View;
class NavigationView
{
/**
* Die flache Navigation
* @var array
*/
protected $navigationParts = array();
/**
* Array der aktiven Navigations-Elemente
* @var array
*/
protected $navigationPath = array();
/**
* Die strukturierte Navigation nach navStart
* @var array
*/
protected $orderedNavigation = array();
/**
* Das Html der kompletten Navigation
* @var string
*/
protected $navigationHtml = '';
public function __construct(array $navigationParts, array $navigationPath)
{
$this->navigationParts = $navigationParts;
$this->navigationPath = $navigationPath;
$this->buildOrderedNavigation();
$this->buildNavigation(0);
}
private function buildOrderedNavigation()
{
$orderedNavigation = array();
foreach ($this->navigationParts as $navID => $navItem)
{
$orderedNavigation[$navItem['navStart']][$navID] = $navItem;
}
$this->orderedNavigation = $orderedNavigation;
}
private function buildNavigation($navStart, $linkPrefix = PATH_PREFIX, $depth = 0)
{
$tmpNavigation = $this->orderedNavigation[$navStart];
$activePath = PATH_PREFIX . '/' . implode('/', $this->navigationPath);
if ($depth === 0)
{
$this->navigationHtml .= '<div class="" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav">';
}
else
{
$this->navigationHtml .= '<ul class="dropdown-menu' . (($depth > 1) ? ' pull-left' : '') . '">';
}
foreach ($tmpNavigation as $navID => $navItem)
{
$liClasses = array();
$aClass = '';
$span = '';
if (strpos($activePath, $linkPrefix . '/' . $navItem['navLink']) === 0)
{
$liClasses[] = 'active';
}
if (isset($this->orderedNavigation[$navItem['navID']]))
{
$liClasses[] = 'dropdown-submenu';
$aClass = 'class="dropdown-toggle" ';
$span = ' <span class="caret' . (($depth > 0) ? ' rotate-left' : '') . '"></span>';
}
$liClass = (empty($liClasses)) ? '' : ' class="' . implode(' ', $liClasses) . '"';
$this->navigationHtml .= '<li' . $liClass . '><a ' . $aClass . 'href="' . $linkPrefix . '/' . $navItem['navLink'] . '">' . $navItem['navName'] . $span . '</a>';
if (isset($this->orderedNavigation[$navItem['navID']]))
{
$this->buildNavigation($navItem['navID'], $linkPrefix . '/' . $navItem['navLink'], ($depth + 1));
}
$this->navigationHtml .= '</li>';
}
$this->navigationHtml .= '</ul>';
if ($depth === 0)
{
$this->navigationHtml .= '</div>';
}
}
public function getHtml()
{
return $this->navigationHtml;
}
}