replaced template_render with dynamic renderer class

This commit is contained in:
Igor Scheller 2017-07-20 02:22:18 +02:00
parent d4ad70804b
commit e1762e7764
10 changed files with 148 additions and 26 deletions

View File

@ -4,6 +4,8 @@ use Engelsystem\Config\Config;
use Engelsystem\Database\Db;
use Engelsystem\Exceptions\Handler as ExceptionHandler;
use Engelsystem\Http\Request;
use Engelsystem\Renderer\HtmlEngine;
use Engelsystem\Renderer\Renderer;
/**
* This file includes all needed functions, connects to the db etc.
@ -43,11 +45,19 @@ $request::setInstance($request);
* Check for maintenance
*/
if ($config->get('maintenance')) {
echo file_get_contents(__DIR__ . '/../public/maintenance.html');
echo file_get_contents(__DIR__ . '/../templates/maintenance.html');
die();
}
/**
* Initialize renderer
*/
$renderer = new Renderer();
$renderer->addRenderer(new HtmlEngine());
Renderer::setInstance($renderer);
/**
* Register error handler
*/

View File

@ -13,5 +13,5 @@ function credits_title()
*/
function guest_credits()
{
return template_render(__DIR__ . '/../../templates/guest_credits.html', []);
return view(__DIR__ . '/../../templates/guest_credits.html');
}

View File

@ -206,7 +206,7 @@ function view_user_shifts()
return page([
div('col-md-12', [
msg(),
template_render(__DIR__ . '/../../templates/user_shifts.html', [
view(__DIR__ . '/../../templates/user_shifts.html', [
'title' => shifts_title(),
'room_select' => make_select($rooms, $shiftsFilter->getRooms(), 'rooms', _('Rooms')),
'start_select' => html_select_key('start_day', 'start_day', array_combine($days, $days), $start_day),

View File

@ -321,28 +321,6 @@ function table_buttons($buttons = [])
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 &laquo;' . $file . '&raquo;.');
return '';
}
/**
* @param string $str
* @param int $length

View File

@ -166,7 +166,7 @@ if (
$event_config = EventConfig();
echo template_render(__DIR__ . '/../templates/layout.html', [
echo view(__DIR__ . '/../templates/layout.html', [
'theme' => isset($user) ? $user['color'] : config('theme'),
'title' => $title,
'atom_link' => ($page == 'news' || $page == 'user_meetings')

View File

@ -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);
}

View File

@ -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);
}
}

62
src/Renderer/Renderer.php Normal file
View File

@ -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 &laquo;' . $template . '&raquo;.');
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;
}
}

View File

@ -3,6 +3,7 @@
use Engelsystem\Config\Config;
use Engelsystem\Http\Request;
use Engelsystem\Renderer\Renderer;
/**
* Get or set config values
@ -39,3 +40,19 @@ function request($key = null, $default = null)
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);
}