replaced template_render with dynamic renderer class
parent
d4ad70804b
commit
e1762e7764
@ -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;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue