Erster Stand des mvc-Frameworks
This commit is contained in:
112
rendering/View/NavigationView.php
Normal file
112
rendering/View/NavigationView.php
Normal file
@@ -0,0 +1,112 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user