replaced template_render with dynamic renderer class
This commit is contained in:
parent
d4ad70804b
commit
e1762e7764
|
@ -4,6 +4,8 @@ use Engelsystem\Config\Config;
|
||||||
use Engelsystem\Database\Db;
|
use Engelsystem\Database\Db;
|
||||||
use Engelsystem\Exceptions\Handler as ExceptionHandler;
|
use Engelsystem\Exceptions\Handler as ExceptionHandler;
|
||||||
use Engelsystem\Http\Request;
|
use Engelsystem\Http\Request;
|
||||||
|
use Engelsystem\Renderer\HtmlEngine;
|
||||||
|
use Engelsystem\Renderer\Renderer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This file includes all needed functions, connects to the db etc.
|
* This file includes all needed functions, connects to the db etc.
|
||||||
|
@ -43,11 +45,19 @@ $request::setInstance($request);
|
||||||
* Check for maintenance
|
* Check for maintenance
|
||||||
*/
|
*/
|
||||||
if ($config->get('maintenance')) {
|
if ($config->get('maintenance')) {
|
||||||
echo file_get_contents(__DIR__ . '/../public/maintenance.html');
|
echo file_get_contents(__DIR__ . '/../templates/maintenance.html');
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize renderer
|
||||||
|
*/
|
||||||
|
$renderer = new Renderer();
|
||||||
|
$renderer->addRenderer(new HtmlEngine());
|
||||||
|
Renderer::setInstance($renderer);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register error handler
|
* Register error handler
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -13,5 +13,5 @@ function credits_title()
|
||||||
*/
|
*/
|
||||||
function guest_credits()
|
function guest_credits()
|
||||||
{
|
{
|
||||||
return template_render(__DIR__ . '/../../templates/guest_credits.html', []);
|
return view(__DIR__ . '/../../templates/guest_credits.html');
|
||||||
}
|
}
|
||||||
|
|
|
@ -206,7 +206,7 @@ function view_user_shifts()
|
||||||
return page([
|
return page([
|
||||||
div('col-md-12', [
|
div('col-md-12', [
|
||||||
msg(),
|
msg(),
|
||||||
template_render(__DIR__ . '/../../templates/user_shifts.html', [
|
view(__DIR__ . '/../../templates/user_shifts.html', [
|
||||||
'title' => shifts_title(),
|
'title' => shifts_title(),
|
||||||
'room_select' => make_select($rooms, $shiftsFilter->getRooms(), 'rooms', _('Rooms')),
|
'room_select' => make_select($rooms, $shiftsFilter->getRooms(), 'rooms', _('Rooms')),
|
||||||
'start_select' => html_select_key('start_day', 'start_day', array_combine($days, $days), $start_day),
|
'start_select' => html_select_key('start_day', 'start_day', array_combine($days, $days), $start_day),
|
||||||
|
|
|
@ -321,28 +321,6 @@ function table_buttons($buttons = [])
|
||||||
return '<div class="btn-group">' . join(' ', $buttons) . '</div>';
|
return '<div class="btn-group">' . join(' ', $buttons) . '</div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Load and render template
|
|
||||||
*
|
|
||||||
* @param string $file
|
|
||||||
* @param string[] $data
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function template_render($file, $data = [])
|
|
||||||
{
|
|
||||||
if (file_exists($file)) {
|
|
||||||
$template = file_get_contents($file);
|
|
||||||
if (is_array($data)) {
|
|
||||||
foreach ($data as $name => $content) {
|
|
||||||
$template = str_replace('%' . $name . '%', $content, $template);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $template;
|
|
||||||
}
|
|
||||||
engelsystem_error('Cannot find template file «' . $file . '».');
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $str
|
* @param string $str
|
||||||
* @param int $length
|
* @param int $length
|
||||||
|
|
|
@ -166,7 +166,7 @@ if (
|
||||||
|
|
||||||
$event_config = EventConfig();
|
$event_config = EventConfig();
|
||||||
|
|
||||||
echo template_render(__DIR__ . '/../templates/layout.html', [
|
echo view(__DIR__ . '/../templates/layout.html', [
|
||||||
'theme' => isset($user) ? $user['color'] : config('theme'),
|
'theme' => isset($user) ? $user['color'] : config('theme'),
|
||||||
'title' => $title,
|
'title' => $title,
|
||||||
'atom_link' => ($page == 'news' || $page == 'user_meetings')
|
'atom_link' => ($page == 'news' || $page == 'user_meetings')
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Engelsystem\Renderer;
|
||||||
|
|
||||||
|
interface EngineInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Render a template
|
||||||
|
*
|
||||||
|
* @param string $path
|
||||||
|
* @param mixed[] $data
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function get($path, $data = []);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $path
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function canRender($path);
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Engelsystem\Renderer;
|
||||||
|
|
||||||
|
class HtmlEngine implements EngineInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Render a template
|
||||||
|
*
|
||||||
|
* @param string $path
|
||||||
|
* @param mixed[] $data
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function get($path, $data = [])
|
||||||
|
{
|
||||||
|
$template = file_get_contents($path);
|
||||||
|
if (is_array($data)) {
|
||||||
|
foreach ($data as $name => $content) {
|
||||||
|
$template = str_replace('%' . $name . '%', $content, $template);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $template;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $path
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function canRender($path)
|
||||||
|
{
|
||||||
|
return strpos($path, '.html') && file_exists($path);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,62 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Engelsystem\Renderer;
|
||||||
|
|
||||||
|
use ErrorException;
|
||||||
|
|
||||||
|
class Renderer
|
||||||
|
{
|
||||||
|
/** @var self */
|
||||||
|
protected static $instance;
|
||||||
|
|
||||||
|
/** @var EngineInterface[] */
|
||||||
|
protected $renderer = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Render a template
|
||||||
|
*
|
||||||
|
* @param string $template
|
||||||
|
* @param mixed[] $data
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function render($template, $data = [])
|
||||||
|
{
|
||||||
|
foreach ($this->renderer as $renderer) {
|
||||||
|
if (!$renderer->canRender($template)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $renderer->get($template, $data);
|
||||||
|
}
|
||||||
|
|
||||||
|
engelsystem_error('Unable to find a renderer for template file «' . $template . '».');
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a new renderer engine
|
||||||
|
*
|
||||||
|
* @param EngineInterface $renderer
|
||||||
|
*/
|
||||||
|
public function addRenderer(EngineInterface $renderer)
|
||||||
|
{
|
||||||
|
$this->renderer[] = $renderer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return self
|
||||||
|
* @throws ErrorException
|
||||||
|
*/
|
||||||
|
public static function getInstance()
|
||||||
|
{
|
||||||
|
return self::$instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param self $instance
|
||||||
|
*/
|
||||||
|
public static function setInstance($instance)
|
||||||
|
{
|
||||||
|
self::$instance = $instance;
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
use Engelsystem\Config\Config;
|
use Engelsystem\Config\Config;
|
||||||
use Engelsystem\Http\Request;
|
use Engelsystem\Http\Request;
|
||||||
|
use Engelsystem\Renderer\Renderer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get or set config values
|
* Get or set config values
|
||||||
|
@ -39,3 +40,19 @@ function request($key = null, $default = null)
|
||||||
|
|
||||||
return $request->input($key, $default);
|
return $request->input($key, $default);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $template
|
||||||
|
* @param mixed[] $data
|
||||||
|
* @return Renderer|string
|
||||||
|
*/
|
||||||
|
function view($template = null, $data = null)
|
||||||
|
{
|
||||||
|
$renderer = Renderer::getInstance();
|
||||||
|
|
||||||
|
if (is_null($template)) {
|
||||||
|
return $renderer;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $renderer->render($template, $data);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue