This repository has been archived on 2024-06-26. You can view files and clone it, but cannot push or open issues or pull requests.
sakura/libraries/Template.php

140 lines
3 KiB
PHP
Raw Normal View History

2015-10-30 16:15:58 +00:00
<?php
2016-02-03 22:22:56 +00:00
/**
* Holds the templating engine class.
*
* @package Sakura
*/
2015-10-30 16:15:58 +00:00
namespace Sakura;
2015-10-31 18:14:54 +00:00
use Twig_Environment;
use Twig_Extension_StringLoader;
use Twig_Loader_Filesystem;
2015-10-30 16:15:58 +00:00
/**
2016-02-02 21:04:15 +00:00
* Sakura wrapper for Twig.
*
2015-10-30 16:15:58 +00:00
* @package Sakura
2016-02-02 21:04:15 +00:00
* @author Julian van de Groep <me@flash.moe>
2015-10-30 16:15:58 +00:00
*/
class Template
{
2016-02-02 21:04:15 +00:00
/**
* The variables passed on to the templating engine.
*
* @var array
*/
2015-10-31 18:14:54 +00:00
private $vars = [];
2016-02-02 21:04:15 +00:00
/**
* The templating engine.
*
* @var Twig_Environment
*/
2015-10-31 18:14:54 +00:00
private $template;
2016-02-02 21:04:15 +00:00
/**
* The template name.
*
* @var string
*/
2015-10-31 18:14:54 +00:00
private $templateName;
2016-02-02 21:04:15 +00:00
/**
* The template options.
*
* @var array
*/
2015-10-31 18:14:54 +00:00
private $templateOptions;
2016-02-02 21:04:15 +00:00
/**
* The file extension used by template files
*
* @var string
*/
2016-01-04 20:14:09 +00:00
protected $templateFileExtension = ".twig";
2015-10-31 18:14:54 +00:00
2016-02-02 21:04:15 +00:00
/**
* Constructor.
*/
2015-11-01 13:26:05 +00:00
public function __construct()
2015-10-31 18:14:54 +00:00
{
// Set template to default
2015-12-04 14:19:10 +00:00
$this->setTemplate(Config::get('site_style'));
2015-10-31 18:14:54 +00:00
}
2016-02-02 21:04:15 +00:00
/**
* Set the template name.
*
* @param string $name The name of the template directory.
*/
2015-11-01 13:26:05 +00:00
public function setTemplate($name)
{
2015-10-31 18:14:54 +00:00
// Assign config path to a variable so we don't have to type it out twice
$confPath = ROOT . 'templates/' . $name . '/template.ini';
2015-10-31 18:14:54 +00:00
// Check if the configuration file exists
if (!file_exists($confPath)) {
trigger_error('Template configuration does not exist', E_USER_ERROR);
}
// Parse and store the configuration
$this->templateOptions = parse_ini_file($confPath, true);
// Set variables
$this->templateName = $name;
// Reinitialise
$this->initTemplate();
}
2016-02-02 21:04:15 +00:00
/**
* Initialise the templating engine.
*/
2015-11-01 13:26:05 +00:00
public function initTemplate()
{
2015-10-31 18:14:54 +00:00
// Initialise Twig Filesystem Loader
$twigLoader = new Twig_Loader_Filesystem(ROOT . 'templates/' . $this->templateName);
2015-10-31 18:14:54 +00:00
// Environment variable
$twigEnv = [];
// Enable caching
2015-12-04 14:19:10 +00:00
if (Config::get('enable_tpl_cache')) {
2015-12-01 13:34:16 +00:00
$twigEnv['cache'] = ROOT . 'cache/twig';
2015-10-31 18:14:54 +00:00
}
// And now actually initialise the templating engine
$this->template = new Twig_Environment($twigLoader, $twigEnv);
// Load String template loader
$this->template->addExtension(new Twig_Extension_StringLoader());
}
2016-02-02 21:04:15 +00:00
/**
* Merge the parse variables.
*
* @param array $vars The new variables.
*/
2015-11-01 13:26:05 +00:00
public function setVariables($vars)
{
2015-10-31 18:14:54 +00:00
$this->vars = array_merge($this->vars, $vars);
}
2016-02-02 21:04:15 +00:00
/**
* Render a template file.
*
* @param string $file The filename/path
*
* @return bool|string An error or the HTML.
*/
2015-10-31 18:14:54 +00:00
public function render($file)
{
try {
return $this->template->render($file . $this->templateFileExtension, $this->vars);
2015-10-31 18:14:54 +00:00
} catch (\Exception $e) {
return trigger_error($e->getMessage(), E_USER_ERROR);
2015-10-31 18:14:54 +00:00
}
}
2015-10-30 16:15:58 +00:00
}