Erweiterung der Funktionalität, erste Anbindung an Editoren, Einbinden von JS-Bibliotheken
This commit is contained in:
@@ -78,6 +78,8 @@ define('PATH_TPL', PATH_ROOT . 'templates/');
|
||||
*/
|
||||
define('HTML_IMG', PATH_PREFIX . '/images/');
|
||||
define('HTML_CSS', PATH_PREFIX . '/css/');
|
||||
define('HTML_JS', PATH_PREFIX . '/js/');
|
||||
define('HTML_MED', PATH_PREFIX . '/media/');
|
||||
|
||||
|
||||
/**
|
||||
@@ -95,3 +97,6 @@ define('DB_PASS', '2YcEOiFRUhk5ELeT9gZ3');
|
||||
*/
|
||||
define('TBL_FRONT_NAVIGATION', 'ahd_navigation');
|
||||
define('TBL_IMAGE_TEXT', 'ahd_image_text');
|
||||
define('TBL_IMAGE', 'ahd_image');
|
||||
|
||||
require_once(PATH_CNF . 'config_version.php');
|
||||
@@ -1,9 +1,9 @@
|
||||
<?php
|
||||
|
||||
/* Portal - Definitionen */
|
||||
$vC['portal']['name'] = 'Bühler Kaffee';
|
||||
$vC['portal']['hostUrl'] = 'http://www.bühler-kaffee/admin';
|
||||
$vC['portal']['arrHost'] = parse_url($vC['portal']['hostUrl']);
|
||||
/**
|
||||
* Portal - Definitionen
|
||||
*/
|
||||
$vC['portal']['name'] = 'AHD Allradhaus GmbH';
|
||||
$vC['portal']['adminUserId'] = 3;
|
||||
$vC['portal']['languages'] = array('de');
|
||||
$vC['portal']['address'] = 'informal'; /* formal || informal */
|
||||
@@ -11,26 +11,16 @@ $vC['portal']['layout'] = 'buehler';
|
||||
$vC['portal']['tplElements'] = array('login', 'navi_main', 'content');
|
||||
$vC['portal']['imgQuality'] = 90;
|
||||
|
||||
/* Website-Bearbeitung - Definitionen */
|
||||
|
||||
$vC['portal']['website']['navId'] = array();
|
||||
$vC['portal']['website']['prefix'] = array();
|
||||
|
||||
foreach ($vC['portal']['website']['prefix'] as $config)
|
||||
{
|
||||
include_once(PATH_CNF . 'config_' . $config . '.php');
|
||||
|
||||
foreach ($$config as $key => $value)
|
||||
{
|
||||
$vC['portal']['website'][$key][] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
/* E-Mail Versand */
|
||||
/**
|
||||
* E-Mail Versand
|
||||
*/
|
||||
$vC['portal']['mail']['type'] = 'smtp'; /* sendmail || smtp || mail */
|
||||
|
||||
|
||||
/* Nur ausfüllen, falls 'type' === 'smtp' */
|
||||
/**
|
||||
* Nur ausfüllen, falls 'type' === 'smtp'
|
||||
*/
|
||||
$vC['portal']['mail']['smtpAuth'] = true; /* true || false */
|
||||
$vC['portal']['mail']['smtpHost'] = 'mail.arcor.de';
|
||||
$vC['portal']['mail']['smtpUser'] = 'christiansteinle';
|
||||
@@ -41,9 +31,7 @@ $vC['portal']['mail']['fromName'] = 'Bühler Kaffee';
|
||||
$vC['portal']['mail']['html'] = false; /* true || false */
|
||||
$vC['portal']['mail']['charset'] = 'UTF-8';
|
||||
|
||||
/* Wartezeiten in Sekunden */
|
||||
/**
|
||||
* Wartezeiten in Sekunden
|
||||
*/
|
||||
$vC['timeout']['error'] = 5;
|
||||
|
||||
/* Bereich Kundenverwaltung */
|
||||
$vC['customer']['results'] = array(50, 100, 200, 500, 1000);
|
||||
$vC['customer']['pagerBefore'] = 3;
|
||||
30
backend/editor/.config/editor_config.php
Normal file
30
backend/editor/.config/editor_config.php
Normal file
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by CS medien- & kommunikationssysteme.
|
||||
* @author Christian Steinle
|
||||
* @date 29.09.2016
|
||||
*
|
||||
* @copyright CS medien- & kommunikationssysteme (http://www.steinle-computer.de)
|
||||
*/
|
||||
|
||||
$editor['name'] = 'AHD Allradhaus GmbH';
|
||||
if (ENVIRONMENT === 'local')
|
||||
{
|
||||
$editor['editorUrl'] = SCHEME . '://csteinle.ddns.net/rist-editors/';
|
||||
$editor['editorVersion'] = '2.0.0';
|
||||
}
|
||||
elseif (ENVIRONMENT === 'production')
|
||||
{
|
||||
$editor['editorUrl'] = SCHEME . '://rist-editors.ri-st.de/';
|
||||
$editor['editorVersion'] = '1.0.2';
|
||||
}
|
||||
$editor['webserviceUrl'] = HOST_URL . str_replace(PATH_ROOT, '', dirname(__DIR__)) . '/remote_data.php';
|
||||
|
||||
$editor['imageTypes'] = array('image/png', 'image/jpeg', 'image/gif');
|
||||
$editor['imageDimension']['small'] = array('width' => 480, 'height' => 360, 'quality' => 95);
|
||||
$editor['imageDimension']['keyVisual'] = array('width' => 1368, 'height' => 342, 'quality' => 95);
|
||||
$editor['imageDimension']['orig'] = array('width' => 2560, 'height' => 2560, 'quality' => 99);
|
||||
|
||||
$editor['contentElements'] = array('subline', 'text', 'textimage');
|
||||
$editor['backendPrefix'] = PATH_PREFIX . '/' . str_replace(PATH_ROOT, '', dirname(__DIR__));
|
||||
$editor['backendUrl'] = HOST_URL . str_replace(PATH_ROOT, '', dirname(__DIR__)) . '/webservice/requestData.php';
|
||||
24
backend/editor/index.php
Normal file
24
backend/editor/index.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by CS medien- & kommunikationssysteme.
|
||||
* @author Christian Steinle
|
||||
* @date 29.09.2016
|
||||
*
|
||||
* @copyright CS medien- & kommunikationssysteme (http://www.steinle-computer.de)
|
||||
*/
|
||||
|
||||
session_start();
|
||||
$_SESSION['lang'] = 'de';
|
||||
|
||||
$siteID = (!isset($_GET['siteID']) || empty($_GET['siteID'])) ? '1' : $_GET['siteID'];
|
||||
$pathRoot = dirname(dirname(__DIR__)) . '/';
|
||||
|
||||
require_once($pathRoot . '.config/config_global.php');
|
||||
require_once(__DIR__ . '/.config/editor_config.php');
|
||||
$loader = require PATH_ROOT . '/vendor/autoload.php';
|
||||
|
||||
$registry = \Helper\Registry::getInstance();
|
||||
$registry->editorConfig = $editor;
|
||||
$registry->editorConfig['token'] = session_id();
|
||||
|
||||
$route = new \Route\FrontendRoute($siteID, true);
|
||||
11
backend/editor/webservice/requestData.php
Normal file
11
backend/editor/webservice/requestData.php
Normal file
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by CS medien- & kommunikationssysteme.
|
||||
* @author Christian Steinle
|
||||
* @date 05.10.2016
|
||||
*
|
||||
* @copyright CS medien- & kommunikationssysteme (http://www.steinle-computer.de)
|
||||
*/
|
||||
|
||||
file_put_contents(__DIR__ . '/request.log', var_export($_POST, true) . "\n\n", FILE_APPEND);
|
||||
echo json_encode(1);
|
||||
81
css/ahd.css
81
css/ahd.css
@@ -1,22 +1,22 @@
|
||||
body {
|
||||
padding: 50px 0;
|
||||
font-family: Verdana;
|
||||
font-family: Verdana, Arial, sans-serif;
|
||||
text-align: justify;
|
||||
}
|
||||
|
||||
li.dropdown-submenu {
|
||||
position:relative;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
li.dropdown-submenu:hover >ul.dropdown-menu {
|
||||
li.dropdown-submenu:hover > ul.dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
|
||||
li.dropdown:hover >ul.dropdown-menu {
|
||||
li.dropdown:hover > ul.dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
|
||||
ul.dropdown-menu.pull-left
|
||||
{
|
||||
ul.dropdown-menu.pull-left {
|
||||
margin-top: -6px;
|
||||
border-top-left-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
@@ -38,6 +38,14 @@ h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
#footer .navbar-brand {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
#footer .navbar-brand p {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.container-fluid {
|
||||
max-width: 1600px;
|
||||
}
|
||||
@@ -54,3 +62,64 @@ h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 {
|
||||
margin-top: 15px;
|
||||
margin-left: 30px;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 768px) {
|
||||
.subaru_logo {
|
||||
margin-top: 12px;
|
||||
width: 149px;
|
||||
height: 25px;
|
||||
background-image: url('../images/subaru/subaru_logo.png');
|
||||
}
|
||||
|
||||
.daihatsu_logo {
|
||||
width: 150px;
|
||||
height: 25px;
|
||||
margin-left: 15px;
|
||||
margin-top: 12px;
|
||||
background-image: url('../images/daihatsu/daihatsu_logo.png');
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
#main-navbar {
|
||||
position: absolute;
|
||||
left: 80px;
|
||||
}
|
||||
|
||||
.navbar-collapse.in {
|
||||
overflow-y: visible;
|
||||
}
|
||||
|
||||
#main-navbar a.dropdown-toggle {
|
||||
display: block;
|
||||
}
|
||||
|
||||
#main-navbar ul.dropdown-menu {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.container > .navbar-header {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.subaru_logo {
|
||||
margin-top: 12px;
|
||||
width: 48px;
|
||||
height: 25px;
|
||||
background-image: url('../images/subaru/subaru_logo.png');
|
||||
}
|
||||
|
||||
.daihatsu_logo {
|
||||
width: 42px;
|
||||
height: 25px;
|
||||
margin-left: 15px;
|
||||
margin-top: 12px;
|
||||
background-image: url('../images/daihatsu/daihatsu_logo.png');
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 642px) {
|
||||
#footer .ahd {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
1
css/ahd.min.css
vendored
Normal file
1
css/ahd.min.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
body{padding:50px 0;font-family:Verdana,Arial,sans-serif;text-align:justify}li.dropdown-submenu{position:relative}li.dropdown-submenu:hover>ul.dropdown-menu{display:block}li.dropdown:hover>ul.dropdown-menu{display:block}ul.dropdown-menu.pull-left{margin-top:-6px;border-top-left-radius:0;border-bottom-left-radius:0;border-left:0;top:0;left:100%}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-weight:bold}#footer h3{text-decoration:underline}#footer:hover .navbar-brand{height:auto}#footer .navbar-brand{margin-left:0}#footer .navbar-brand p{font-size:14px}.container-fluid{max-width:1600px}.container-fluid .img-responsive{margin:0 auto}.caret.rotate-left{transform:rotate(270deg)}.navbar-fixed-top .pull-right img{margin-top:15px;margin-left:30px}@media screen and (min-width:768px){.subaru_logo{margin-top:12px;width:149px;height:25px;background-image:url('../images/subaru/subaru_logo.png')}.daihatsu_logo{width:150px;height:25px;margin-left:15px;margin-top:12px;background-image:url('../images/daihatsu/daihatsu_logo.png')}}@media(max-width:767px){#main-navbar{position:absolute;left:80px}.navbar-collapse.in{overflow-y:visible}#main-navbar a.dropdown-toggle{display:block}#main-navbar ul.dropdown-menu{float:left}.container>.navbar-header{margin:0}.subaru_logo{margin-top:12px;width:48px;height:25px;background-image:url('../images/subaru/subaru_logo.png')}.daihatsu_logo{width:42px;height:25px;margin-left:15px;margin-top:12px;background-image:url('../images/daihatsu/daihatsu_logo.png')}}@media(max-width:642px){#footer .ahd{display:none}}
|
||||
@@ -7,7 +7,7 @@
|
||||
* @copyright CS medien- & kommunikationssysteme (http://www.steinle-computer.de)
|
||||
*/
|
||||
|
||||
$url = (!isset($_GET['url']) || empty($_GET['url'])) ? 'allradhaus' : '/' . $_GET['url'] . ' ';
|
||||
$url = (!isset($_GET['url']) || empty($_GET['url'])) ? 'allradhaus' : '/' . $_GET['url'];
|
||||
$pathRoot = __DIR__ . '/';
|
||||
|
||||
require_once($pathRoot . '.config/config_global.php');
|
||||
|
||||
2377
js/bootstrap.js
vendored
Normal file
2377
js/bootstrap.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
7
js/bootstrap.min.js
vendored
Normal file
7
js/bootstrap.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
10220
js/jquery-3.1.1.js
vendored
Normal file
10220
js/jquery-3.1.1.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
4
js/jquery-3.1.1.min.js
vendored
Normal file
4
js/jquery-3.1.1.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
js/jquery-3.1.1.min.map
Normal file
1
js/jquery-3.1.1.min.map
Normal file
File diff suppressed because one or more lines are too long
18706
js/jquery-ui-1.12.1.js
vendored
Normal file
18706
js/jquery-ui-1.12.1.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
13
js/jquery-ui-1.12.1.min.js
vendored
Normal file
13
js/jquery-ui-1.12.1.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
13
js/npm.js
Normal file
13
js/npm.js
Normal file
@@ -0,0 +1,13 @@
|
||||
// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
|
||||
require('../../js/transition.js')
|
||||
require('../../js/alert.js')
|
||||
require('../../js/button.js')
|
||||
require('../../js/carousel.js')
|
||||
require('../../js/collapse.js')
|
||||
require('../../js/dropdown.js')
|
||||
require('../../js/modal.js')
|
||||
require('../../js/tooltip.js')
|
||||
require('../../js/popover.js')
|
||||
require('../../js/scrollspy.js')
|
||||
require('../../js/tab.js')
|
||||
require('../../js/affix.js')
|
||||
@@ -11,13 +11,15 @@ namespace Controller;
|
||||
|
||||
use Helper\Database;
|
||||
use Model\NavigationModel;
|
||||
use View\StandardView;
|
||||
use View\NavigationView;
|
||||
use View\StandardView;
|
||||
|
||||
class FrontendController
|
||||
{
|
||||
protected $route = '';
|
||||
|
||||
protected $isEditable = false;
|
||||
|
||||
protected $request = array();
|
||||
|
||||
protected $contents = array();
|
||||
@@ -27,52 +29,96 @@ class FrontendController
|
||||
$this->route = $route;
|
||||
$this->routeParts = explode('/', $route);
|
||||
$this->request = $request;
|
||||
$this->init();
|
||||
}
|
||||
|
||||
|
||||
private function init()
|
||||
public function setEditable($isEditable)
|
||||
{
|
||||
NavigationModel::init($this->routeParts);
|
||||
$navigation = new NavigationView(NavigationModel::getData(), $this->routeParts);
|
||||
$this->isEditable = $isEditable;
|
||||
}
|
||||
|
||||
$this->contents['title'] = 'AHD Allradhaus';
|
||||
$this->contents['navigation'] = $navigation->getHtml();
|
||||
|
||||
public function init()
|
||||
{
|
||||
NavigationModel::init($this->routeParts, $this->isEditable);
|
||||
$navigation = new NavigationView(NavigationModel::getData(), NavigationModel::getNavigationPath());
|
||||
$navigation->setEditable($this->isEditable);
|
||||
$navigation->init();
|
||||
|
||||
$this->contents['title'] = NavigationModel::getTitle();
|
||||
$this->contents['navigation'] = $navigation->render();
|
||||
|
||||
$this->contents['headline'] = NavigationModel::getHeadline();
|
||||
$this->contents['navID'] = NavigationModel::getActiveNavID();
|
||||
$this->contents['content'] = '';
|
||||
$tmpContents = NavigationModel::getContents();
|
||||
$this->contents['keyVisual'] = '';
|
||||
|
||||
$tmpKeyVisual = NavigationModel::getKeyVisual();
|
||||
foreach ($tmpKeyVisual as $data)
|
||||
{
|
||||
$this->contents['keyVisual'] .= $this->buildContents($data);
|
||||
}
|
||||
|
||||
$tmpContents = NavigationModel::getContents();
|
||||
/**
|
||||
* @var Database $modelClass
|
||||
*/
|
||||
foreach ($tmpContents as $key => $data)
|
||||
foreach ($tmpContents as $data)
|
||||
{
|
||||
$modelClass = 'Model\\' . $data['Controller'] . 'Model';
|
||||
$viewClass = 'View\\' . $data['Controller'] . 'View';
|
||||
if (class_exists($modelClass, true))
|
||||
{
|
||||
$modelData = $modelClass::getItem($data['ID']);
|
||||
}
|
||||
else
|
||||
{
|
||||
/**
|
||||
* TODO: ErrorHandler bauen
|
||||
*/
|
||||
return;
|
||||
}
|
||||
if (class_exists($viewClass, true))
|
||||
{
|
||||
$dataView = new $viewClass($modelData, $data['Controller']);
|
||||
}
|
||||
else
|
||||
{
|
||||
$dataView = new StandardView($modelData, $data['Controller']);
|
||||
}
|
||||
$this->contents['content'] .= $dataView->render();
|
||||
$this->contents['content'] .= $this->buildContents($data);
|
||||
}
|
||||
|
||||
$pageView = new StandardView($this->contents, 'index');
|
||||
$pageView->setEditable($this->isEditable);
|
||||
echo $pageView->render();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param array $data
|
||||
* @return string
|
||||
*/
|
||||
protected function buildContents(array $data)
|
||||
{
|
||||
/**
|
||||
* @var Database $modelClass
|
||||
*/
|
||||
$modelClass = 'Model\\' . $data['Controller'] . 'Model';
|
||||
$viewClass = 'View\\' . $data['Controller'] . 'View';
|
||||
if (class_exists($modelClass, true))
|
||||
{
|
||||
if (isset($data['ID']))
|
||||
{
|
||||
$modelData = $modelClass::getItem($data['ID']);
|
||||
}
|
||||
if (isset($data['IDs']))
|
||||
{
|
||||
$tmpModelData = $data;
|
||||
unset($tmpModelData['Controller']);
|
||||
unset($tmpModelData['IDs']);
|
||||
$modelClass::setFilter($data['IDs']);
|
||||
$modelData = $modelClass::getIndex();
|
||||
$modelData = array_merge($modelData, $tmpModelData);
|
||||
$modelData['navID'] = $this->contents['navID'];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/**
|
||||
* TODO: ErrorHandler bauen
|
||||
*/
|
||||
return '';
|
||||
}
|
||||
if (class_exists($viewClass, true))
|
||||
{
|
||||
$dataView = new $viewClass($modelData, $data['Controller']);
|
||||
}
|
||||
else
|
||||
{
|
||||
$dataView = new StandardView($modelData, $data['Controller']);
|
||||
}
|
||||
$dataView->setEditable($this->isEditable);
|
||||
|
||||
return $dataView->render();
|
||||
}
|
||||
}
|
||||
23
rendering/Model/ImageModel.php
Normal file
23
rendering/Model/ImageModel.php
Normal file
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by CS medien- & kommunikationssysteme.
|
||||
* @author Christian Steinle
|
||||
* @date 05.10.2016
|
||||
*
|
||||
* @copyright CS medien- & kommunikationssysteme (http://www.steinle-computer.de)
|
||||
*/
|
||||
|
||||
namespace Model;
|
||||
|
||||
|
||||
use Helper\Database;
|
||||
|
||||
class ImageModel extends Database
|
||||
{
|
||||
const TBL_NAME = TBL_IMAGE;
|
||||
|
||||
const PRIMARY_KEY = 'ID';
|
||||
|
||||
const ORDER_BY = '';
|
||||
|
||||
}
|
||||
20
rendering/Model/KeyVisualModel.php
Normal file
20
rendering/Model/KeyVisualModel.php
Normal file
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by CS medien- & kommunikationssysteme.
|
||||
* @author Christian Steinle
|
||||
* @date 05.10.2016
|
||||
*
|
||||
* @copyright CS medien- & kommunikationssysteme (http://www.steinle-computer.de)
|
||||
*/
|
||||
|
||||
namespace Model;
|
||||
|
||||
|
||||
class KeyVisualModel extends ImageModel
|
||||
{
|
||||
public static function setFilter(array $IDs)
|
||||
{
|
||||
$filter = static::PRIMARY_KEY . ' = ' . implode(' OR ' . static::PRIMARY_KEY . ' = ', $IDs);
|
||||
static::$filter = $filter;
|
||||
}
|
||||
}
|
||||
@@ -28,7 +28,9 @@ class NavigationModel extends Database
|
||||
|
||||
protected static $activeNavID = 0;
|
||||
|
||||
protected static $header = '';
|
||||
protected static $title = '';
|
||||
|
||||
protected static $keyVisual = array();
|
||||
|
||||
protected static $headline = '';
|
||||
|
||||
@@ -38,28 +40,53 @@ class NavigationModel extends Database
|
||||
/**
|
||||
* Setzt später benötigte Variablen für den FrontendController, so dass die Datenmodelle und die Views instanziiert werden können
|
||||
* @param array $routeParts
|
||||
* @param bool $isEditable
|
||||
*/
|
||||
public static function init(array $routeParts)
|
||||
public static function init(array $routeParts, $isEditable = false)
|
||||
{
|
||||
self::getIndex();
|
||||
$nav = self::$data;
|
||||
$navStart = 0;
|
||||
foreach ($routeParts as $navLink)
|
||||
if ($isEditable)
|
||||
{
|
||||
foreach ($nav as $navID => $navItem)
|
||||
self::initBackend($routeParts[0], false);
|
||||
}
|
||||
else
|
||||
{
|
||||
self::initFrontend($routeParts);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected static function initBackend($siteID, $depth)
|
||||
{
|
||||
foreach (self::$data as $navID => $navItem)
|
||||
{
|
||||
if ($navID == $siteID && $depth === false)
|
||||
{
|
||||
if ($navItem['navStart'] == $navStart && $navItem['navLink'] == $navLink)
|
||||
{
|
||||
$navStart = $navItem['navID'];
|
||||
self::$navigationPath[] = self::$activeNavID = $navItem['navID'];
|
||||
self::$header = $navItem['navHeader'];
|
||||
self::$headline = $navItem['navHeadline'];
|
||||
self::initContent($navItem['navContent']);
|
||||
}
|
||||
self::$activeNavID = $navItem['navID'];
|
||||
self::$title = $navItem['navTitle'];
|
||||
self::$headline = $navItem['navHeadline'];
|
||||
self::initKeyVisual($navItem['navKeyVisual']);
|
||||
self::initContent($navItem['navContent']);
|
||||
self::buildNavigationPath();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $navKeyVisual
|
||||
*/
|
||||
protected static function initKeyVisual($navKeyVisual)
|
||||
{
|
||||
if (is_null($navKeyVisual))
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (is_array(json_decode($navKeyVisual, true)))
|
||||
{
|
||||
self::$keyVisual = json_decode($navKeyVisual, true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $navContents
|
||||
@@ -76,6 +103,36 @@ class NavigationModel extends Database
|
||||
}
|
||||
}
|
||||
|
||||
protected static function buildNavigationPath()
|
||||
{
|
||||
$navStart = $navStartPath[] = self::$activeNavID;
|
||||
while ($navStart !== '0' && !is_null($navStart))
|
||||
{
|
||||
$navStart = $navStartPath[] = self::$data[$navStart]['navStart'];
|
||||
}
|
||||
array_pop($navStartPath);
|
||||
self::$navigationPath = array_reverse($navStartPath);
|
||||
}
|
||||
|
||||
protected static function initFrontend(array $routeParts)
|
||||
{
|
||||
$navStart = 0;
|
||||
foreach ($routeParts as $navLink)
|
||||
{
|
||||
foreach (self::$data as $navID => $navItem)
|
||||
{
|
||||
if ($navItem['navStart'] == $navStart && $navItem['navLink'] == $navLink)
|
||||
{
|
||||
$navStart = $navItem['navID'];
|
||||
self::$navigationPath[] = self::$activeNavID = $navItem['navID'];
|
||||
self::$title = $navItem['navTitle'];
|
||||
self::initKeyVisual($navItem['navKeyVisual']);
|
||||
self::$headline = $navItem['navHeadline'];
|
||||
self::initContent($navItem['navContent']);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
@@ -98,9 +155,18 @@ class NavigationModel extends Database
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public static function getHeader()
|
||||
public static function getTitle()
|
||||
{
|
||||
return self::$header;
|
||||
return self::$title;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public static function getKeyVisual()
|
||||
{
|
||||
return self::$keyVisual;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -30,21 +30,25 @@ class FrontendRoute
|
||||
*/
|
||||
protected $request = array();
|
||||
|
||||
/**
|
||||
* @var FrontendController|null
|
||||
*/
|
||||
protected $controller = null;
|
||||
|
||||
protected $action = '';
|
||||
|
||||
|
||||
/**
|
||||
* FrontendRoute constructor.
|
||||
* @param string $route
|
||||
* @param bool $editable
|
||||
* @param array $request
|
||||
*/
|
||||
public function __construct($route, array $request = array())
|
||||
public function __construct($route, $editable = false, array $request = array())
|
||||
{
|
||||
$this->setRoute($route);
|
||||
$this->request = $request;
|
||||
$this->controller = new FrontendController($this->route, $request);
|
||||
$this->controller->setEditable($editable);
|
||||
$this->controller->init();
|
||||
}
|
||||
|
||||
|
||||
@@ -56,7 +60,4 @@ class FrontendRoute
|
||||
$this->route = trim($route, " \t\n\r\0\x0B/");
|
||||
$this->routeParts = explode('/', $this->route);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -10,6 +10,8 @@
|
||||
namespace View;
|
||||
|
||||
|
||||
use Helper\Registry;
|
||||
|
||||
class NavigationView
|
||||
{
|
||||
/**
|
||||
@@ -30,6 +32,12 @@ class NavigationView
|
||||
*/
|
||||
protected $orderedNavigation = array();
|
||||
|
||||
/**
|
||||
* Ist die Navigation editierbar oder nicht
|
||||
* @var bool
|
||||
*/
|
||||
protected $isEditable = false;
|
||||
|
||||
/**
|
||||
* Das Html der kompletten Navigation
|
||||
* @var string
|
||||
@@ -37,12 +45,42 @@ class NavigationView
|
||||
protected $navigationHtml = '';
|
||||
|
||||
|
||||
/**
|
||||
* NavigationView constructor.
|
||||
*
|
||||
* @param array $navigationParts
|
||||
* @param array $navigationPath
|
||||
*/
|
||||
public function __construct(array $navigationParts, array $navigationPath)
|
||||
{
|
||||
$this->navigationParts = $navigationParts;
|
||||
$this->navigationPath = $navigationPath;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Setter für die Editierbarkeit des Inhalts
|
||||
*
|
||||
* @param bool $isEditable
|
||||
*/
|
||||
public function setEditable($isEditable)
|
||||
{
|
||||
$this->isEditable = $isEditable;
|
||||
}
|
||||
|
||||
|
||||
public function init()
|
||||
{
|
||||
$this->buildOrderedNavigation();
|
||||
$this->buildNavigation(0);
|
||||
if ($this->isEditable)
|
||||
{
|
||||
$registry = Registry::getInstance();
|
||||
$this->buildNavigation(0, $registry->editorConfig['backendPrefix']);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->buildNavigation(0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -60,11 +98,12 @@ class NavigationView
|
||||
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">';
|
||||
$editableHtml = ($this->isEditable) ? ' data-editor="navigation" data-id="' . end($this->navigationPath) . '" data-element="navigation_' . end($this->navigationPath) . '"' : '';
|
||||
//$this->navigationHtml .= '<nav class="navbar-collapse collapse" id="main-navbar" aria-expanded="false">';
|
||||
$this->navigationHtml .= '<ul class="nav navbar-nav navbar-inverse navbar-collapse collapse" id="main-navbar" aria-expanded="false"' . $editableHtml . '>';
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -77,7 +116,7 @@ class NavigationView
|
||||
$aClass = '';
|
||||
$span = '';
|
||||
|
||||
if (strpos($activePath, $linkPrefix . '/' . $navItem['navLink']) === 0)
|
||||
if (in_array($navItem['navID'], $this->navigationPath))
|
||||
{
|
||||
$liClasses[] = 'active';
|
||||
}
|
||||
@@ -89,10 +128,24 @@ class NavigationView
|
||||
}
|
||||
$liClass = (empty($liClasses)) ? '' : ' class="' . implode(' ', $liClasses) . '"';
|
||||
|
||||
$this->navigationHtml .= '<li' . $liClass . '><a ' . $aClass . 'href="' . $linkPrefix . '/' . $navItem['navLink'] . '">' . $navItem['navName'] . $span . '</a>';
|
||||
if ($this->isEditable)
|
||||
{
|
||||
$this->navigationHtml .= '<li' . $liClass . '><a ' . $aClass . 'href="' . $linkPrefix . '/index.php?siteID=' . $navItem['navID'] . '">' . $navItem['navName'] . $span . '</a>';
|
||||
}
|
||||
else
|
||||
{
|
||||
$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));
|
||||
if ($this->isEditable)
|
||||
{
|
||||
$this->buildNavigation($navItem['navID'], $linkPrefix, ($depth + 1));
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->buildNavigation($navItem['navID'], $linkPrefix . '/' . $navItem['navLink'], ($depth + 1));
|
||||
}
|
||||
}
|
||||
$this->navigationHtml .= '</li>';
|
||||
}
|
||||
@@ -100,12 +153,12 @@ class NavigationView
|
||||
$this->navigationHtml .= '</ul>';
|
||||
if ($depth === 0)
|
||||
{
|
||||
$this->navigationHtml .= '</div>';
|
||||
//$this->navigationHtml .= '</nav>';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function getHtml()
|
||||
public function render()
|
||||
{
|
||||
return $this->navigationHtml;
|
||||
}
|
||||
|
||||
@@ -9,15 +9,37 @@
|
||||
|
||||
namespace View;
|
||||
|
||||
use \Helper\Registry;
|
||||
|
||||
|
||||
class StandardView
|
||||
{
|
||||
const TPL_PATH = PATH_TPL;
|
||||
|
||||
/**
|
||||
* Pfad zur Template Datei
|
||||
* @var string
|
||||
*/
|
||||
protected $template = '';
|
||||
|
||||
/**
|
||||
* Das Daten-Array, das in die Inhaltsbereiche des Templates gerendert wird
|
||||
* @var array
|
||||
*/
|
||||
protected $data = array();
|
||||
|
||||
/**
|
||||
* Ist der Inhalt bearbeitbar
|
||||
* @var bool
|
||||
*/
|
||||
protected $isEditable = false;
|
||||
|
||||
|
||||
/**
|
||||
* StandardView constructor.
|
||||
* Setzt den Pfad zum Template und die Daten
|
||||
*
|
||||
* @param array $data
|
||||
* @param $template
|
||||
*/
|
||||
public function __construct(array $data, $template)
|
||||
{
|
||||
$this->setTemplate($template);
|
||||
@@ -25,22 +47,46 @@ class StandardView
|
||||
}
|
||||
|
||||
|
||||
private function setTemplate($template)
|
||||
/**
|
||||
* @param $isEditable
|
||||
*/
|
||||
public function setEditable($isEditable)
|
||||
{
|
||||
if (file_exists(static::TPL_PATH . mb_strtolower($template) . '.phtml'))
|
||||
{
|
||||
$this->template = static::TPL_PATH . mb_strtolower($template) . '.phtml';
|
||||
}
|
||||
$this->isEditable = $isEditable;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Setzt den Pfad zum Template
|
||||
*
|
||||
* @param $template
|
||||
* @throws \Exception
|
||||
*/
|
||||
private function setTemplate($template)
|
||||
{
|
||||
$templateFile = PATH_TPL . mb_strtolower($template) . '.phtml';
|
||||
if (!file_exists($templateFile))
|
||||
{
|
||||
throw new \Exception('Template file "' . $templateFile . '" does not exist!');
|
||||
}
|
||||
$this->template = $templateFile;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gibt das befüllte Template als HTML zurück
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function render()
|
||||
{
|
||||
ob_start();
|
||||
include($this->template);
|
||||
$pageContent = ob_get_contents();
|
||||
include_once($this->template);
|
||||
|
||||
$templateContent = ob_get_contents();
|
||||
ob_end_clean();
|
||||
|
||||
return $pageContent;
|
||||
return $templateContent;
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
if ($this->data['type'] === 'imageSmall')
|
||||
if ($this->data['type'] === 'small')
|
||||
{
|
||||
$imageClass = 'col-md-4';
|
||||
$textClass = 'col-md-8';
|
||||
@@ -9,10 +9,18 @@
|
||||
$imageClass = 'col-md-8';
|
||||
$textClass = 'col-md-4';
|
||||
}
|
||||
|
||||
$editorData = '';
|
||||
if ($this->isEditable === true)
|
||||
{
|
||||
$editorData = ' data-editor="imageText" data-id="' . $this->data['ID'] . '" data-element="imageText_' . $this->data['ID'] . '"';
|
||||
}
|
||||
?>
|
||||
<div class="row">
|
||||
<div class="<?php echo $imageClass; ?>"><img class="img-responsive" src="<?php echo HTML_IMG . $this->data['image']; ?>"/></div>
|
||||
<div class="<?php echo $textClass; ?>"><?php echo nl2br($this->data['text']); ?></div>
|
||||
|
||||
<div class="row"<?php echo $editorData; ?>>
|
||||
<div class="col-md-4 col-sm-6 col-xs-8 col-xs-offset-2 col-sm-offset-0"><img class="img-responsive" src="<?php echo HTML_IMG . $this->data['image']; ?>"/></div>
|
||||
<div class="col-md-8 col-sm-6 col-xs-12">
|
||||
<p><?php echo nl2br($this->data['text']); ?></p>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
<div class="row"> </div>
|
||||
@@ -1,57 +1,81 @@
|
||||
<?php
|
||||
if (strpos($this->data['headline'], "\n") !== false)
|
||||
{
|
||||
$headline = explode("\n", $this->data['headline']);
|
||||
$headline[1] = '</h1><h3 class="col-md-offset-4 col-md-8">' . $headline[1] . '';
|
||||
$this->data['headline'] = implode('', $headline);
|
||||
}
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title><?php echo $this->data['title']; ?></title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="stylesheet" href="<?php echo HTML_CSS; ?>bootstrap.min.css">
|
||||
<link rel="stylesheet" href="<?php echo HTML_CSS; ?>bootstrap.min.css">
|
||||
<link rel="stylesheet" href="<?php echo HTML_CSS; ?>bootstrap-theme.min.css">
|
||||
<link rel="stylesheet" href="<?php echo HTML_CSS; ?>ahd.css">
|
||||
<link rel="stylesheet" href="<?php echo HTML_CSS; ?>ahd.min.css">
|
||||
<script type="text/javascript" src="<?php echo HTML_JS; ?>jquery-3.1.1.min.js"></script>
|
||||
<script type="text/javascript" src="<?php echo HTML_JS; ?>jquery-ui-1.12.1.min.js"></script>
|
||||
<script type="text/javascript" src="<?php echo HTML_JS; ?>bootstrap.min.js"></script>
|
||||
<?php
|
||||
|
||||
if ($this->isEditable)
|
||||
{
|
||||
$registry = \Helper\Registry::getInstance();
|
||||
$registry->editorConfig['navID'] = $this->data['navID'];
|
||||
?>
|
||||
<link rel="stylesheet" href="<?php echo $registry->editorConfig['editorUrl'] . $registry->editorConfig['editorVersion']; ?>/css/editor.min.css">
|
||||
<script type="text/javascript">var csEditorParams = <?php echo json_encode($registry->editorConfig, JSON_UNESCAPED_UNICODE); ?>;</script>
|
||||
<script type="text/javascript" src="<?php echo $registry->editorConfig['editorUrl'] . $registry->editorConfig['editorVersion']; ?>/editor.js.php?lang=<?php echo $_SESSION['lang']; ?>"></script>
|
||||
<?php
|
||||
}
|
||||
|
||||
?>
|
||||
</head>
|
||||
<body>
|
||||
<nav class="navbar navbar-inverse navbar-fixed-top">
|
||||
<header class="navbar navbar-fixed-top navbar-inverse">
|
||||
<div class="container">
|
||||
<div class="navbar-header pull-left">
|
||||
<button aria-controls="main-navbar" aria-expanded="false" class="navbar-toggle collapsed" data-target="#main-navbar" data-toggle="collapse" type="button">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
</div>
|
||||
<?php echo $this->data['navigation']; ?>
|
||||
<div class="pull-right">
|
||||
<img src="<?php echo HTML_IMG; ?>subaru/subaru_logo.png"/>
|
||||
<img src="<?php echo HTML_IMG; ?>daihatsu/daihatsu_logo.png"/>
|
||||
<div class="navbar-header pull-right">
|
||||
<div class="pull-right">
|
||||
<div class="subaru_logo pull-left"></div>
|
||||
<div class="daihatsu_logo pull-right"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<img class="img-responsive" src="<?php echo HTML_IMG; ?>allradhaus/header/allradhaus_01.jpg"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<div class="container" id="content">
|
||||
<div class="row"><h1><span class="col-md-12"><?php echo nl2br($this->data['headline']); ?></span></h1></div>
|
||||
<div class="row"> </div>
|
||||
<?php echo $this->data['content']; ?>
|
||||
<?php
|
||||
echo $this->data['keyVisual'];
|
||||
$editorData = '';
|
||||
if ($this->isEditable === true)
|
||||
{
|
||||
$editorData = ' data-editor="headline" data-id="' . $this->data['navID'] . '" data-element="headline_' . $this->data['navID'] . '"';
|
||||
}
|
||||
?>
|
||||
<div class="row"<?php echo $editorData; ?>><h1 class="col-md-12"><?php echo $this->data['headline']; ?></h1></div>
|
||||
<div class="sortable">
|
||||
<?php echo $this->data['content']; ?>
|
||||
</div>
|
||||
</div>
|
||||
<nav class="navbar navbar-inverse navbar-fixed-bottom">
|
||||
<div class="container" id="footer">
|
||||
<div class="row col-md-12">
|
||||
<div class="row">
|
||||
<div class="navbar-brand">
|
||||
Kontakt <span class="caret"></span><br/> <br/>
|
||||
<p>
|
||||
Kontakt <span class="caret"></span><br/> <br/>AHD Allradhaus GmbH<br/>Hauptstraße 45<br/>87466 Oy-Mittelberg<br/>Telefon 08366 / 232<br/>Telefax 08366 / 286
|
||||
AHD Allradhaus GmbH<br/>Hauptstraße 45<br/>87466 Oy-Mittelberg<br/>Telefon 08366 / 232<br/>Telefax 08366 / 286
|
||||
</p>
|
||||
</div>
|
||||
<div class="navbar-brand">
|
||||
Öffnungszeiten <span class="caret"></span><br/> <br/>
|
||||
<p>
|
||||
Öffnungszeiten <span class="caret"></span><br/> <br/>Montag - Freitag:<br/>8-12 Uhr und 13-17 Uhr<br/>Samstag:<br/>9-12 Uhr
|
||||
Montag - Freitag:<br/>8-12 Uhr und 13-17 Uhr<br/> <br/>Samstag:<br/>9-12 Uhr
|
||||
</p>
|
||||
</div>
|
||||
<div class="navbar-brand pull-right">
|
||||
<div class="navbar-brand ahd pull-right">
|
||||
<img src="<?php echo HTML_IMG; ?>allradhaus/ahd_allradhaus_logo.png"><br/>
|
||||
<img class="center-block" src="<?php echo HTML_IMG; ?>allradhaus/ahd_allradhaus_raeder_gross.png"/>
|
||||
</div>
|
||||
|
||||
73
templates/keyvisual.phtml
Normal file
73
templates/keyvisual.phtml
Normal file
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
|
||||
if (isset($this->data['Type']))
|
||||
{
|
||||
$editorData = '';
|
||||
if ($this->isEditable === true)
|
||||
{
|
||||
$editorData = ' data-editor="' . $this->data['Type'] . '" data-id="' . $this->data['navID'] . '" data-element="' . $this->data['Type'] . '_' . $this->data['navID'] . '"';
|
||||
}
|
||||
|
||||
if ($this->data['Type'] === 'slider')
|
||||
{
|
||||
?>
|
||||
<div class="row slider"<?php echo $editorData; ?>>
|
||||
<div class="col-md-12">
|
||||
<?php
|
||||
|
||||
foreach ($this->data as $key => $data)
|
||||
{
|
||||
if (!is_numeric($key))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
?>
|
||||
<img class="img-responsive" src="<?php echo HTML_MED . $this->data['navID'] . '/' . $data['imageName'] . '.' . $data['imageExtension']; ?>"/>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
elseif ($this->data['Type'] === 'kenburns')
|
||||
{
|
||||
?>
|
||||
<div class="row kenburns"<?php echo $editorData; ?>>
|
||||
<div class="col-md-12">
|
||||
<?php
|
||||
|
||||
foreach ($this->data as $key => $data)
|
||||
{
|
||||
if (!is_numeric($key))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
?>
|
||||
<img class="img-responsive" src="<?php echo HTML_MED . $this->data['navID'] . '/' . $data['imageName'] . '.' . $data['imageExtension']; ?>" data-zoom="<?php echo $data['imageZoom']; ?>" data-direction="<?php echo $data['imageZoomDirection']; ?>"/>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
elseif ($this->data['Type'] === 'single')
|
||||
{
|
||||
?>
|
||||
<div class="row"<?php echo $editorData; ?>>
|
||||
<div class="col-md-12">
|
||||
<img class="img-responsive" src="<?php echo HTML_MED . $this->data['navID'] . '/' . $this->data[0]['imageName'] . '.' . $this->data[0]['imageExtension']; ?>"/>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user