A super easy PHP Framework for web development! https://github.com/exacti/phacil-framework
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

205 lines
4.2 KiB

<?php
/*
* Copyright © 2022 ExacTI Technology Solutions. All rights reserved.
* GPLv3 General License.
* https://exacti.com.br
*/
namespace Phacil\Framework;
use Phacil\Framework\Translate;
/**
*
* @package Phacil\Framework
*/
class Render {
private $data;
private $template;
private $templatePath;
private $templateType;
private $output;
private $extras;
/**
*
* @param mixed $templateType
* @param mixed $templatePath
* @param mixed $template
* @param mixed $data
* @param mixed $extras
* @return void
*/
function __construct($templateType, $templatePath, $template, $data, $extras) {
$this->data = $data;
$this->template = $template;
$this->templatePath = $templatePath;
$this->templateType = $templateType;
$this->extras = $extras;
}
/**
*
* @return mixed
*/
public function render(){
$templateFunc = $this->templateType;
if(method_exists($this,$templateFunc))
$this->$templateFunc();
return $this->output;
}
/**
*
* @return void
*/
protected function templateDefault(){
extract($this->data);
ob_start();
require($this->templatePath . $this->template);
$this->output = ob_get_contents();
ob_end_clean();
}
protected function tpl(){
$this->templateDefault();
}
protected function phtml () {
$this->templateDefault();
}
/**
* Twig render
* @return void
*/
protected function twig () {
require_once(DIR_SYSTEM . "templateEngines/Twig/autoload.php");
/**
* @var array
*/
$config = array(
'autoescape' => false,
'cache' => DIR_CACHE . "twig/",
'debug' => (defined('DEBUG')) ? DEBUG : false
);
$TwigLoaderFilesystem = constant('\TwigLoaderFilesystem');
$Twig_Environment = constant('\TwigEnvironment');
$Twig_SimpleFilter = constant('\TwigSimpleFilter');
$Twig_Extension_Debug = constant('\TwigExtensionDebug');
/**
* @var \TwigLoaderFilesystem
*/
$loader = new $TwigLoaderFilesystem($this->templatePath);
/**
* @var \TwigEnvironment
*/
$twig = new $Twig_Environment($loader, $config);
if ($config['debug']) {
$twig->addExtension(new $Twig_Extension_Debug());
}
/**
* @var \transExtension
*/
$twig->addExtension(new \transExtension());
$twig->addFilter(new $Twig_SimpleFilter('translate', function ($str) {
// do something different from the built-in date filter
return traduzir($str);
}));
$twig->addFilter(new $Twig_SimpleFilter('config', function ($str) {
// do something different from the built-in date filter
return $this->config->get($str);
}));
foreach ($this->extras as $key => $item) {
$twig->addFilter(new $Twig_SimpleFilter($key, $item));
}
$template = $twig->load($this->template);
$this->output = $template->render($this->data);
}
/**
* Mustache render
* @return void
* @throws \TypeError
* @throws \Mustache_Exception_UnknownTemplateException
* @throws \RuntimeException
*/
protected function mustache(){
\Mustache_Autoloader::register();
/**
* @var \Mustache_Engine
*/
$mustache = new \Mustache_Engine(array(
'cache' => DIR_CACHE . 'mustache',
'cache_file_mode' => 0666,
'loader' => new \Mustache_Loader_FilesystemLoader($this->templatePath),
'helpers' => array('translate' => function ($text) {
if (class_exists('Translate')) {
$trans = new Translate();
return ($trans->translation($text));
} else {
return $text;
} // do something translate here...
})
));
$tpl = $mustache->loadTemplate($this->template);
$this->output = $tpl->render($this->data);
}
/**
* Smarty 3 render
* @return void
* @throws \SmartyException
* @throws \Exception
*/
protected function smarty() {
/**
* @var \Smarty
*/
$smarty = new \Smarty();
$smarty->setTemplateDir($this->templatePath);
$smarty->setCompileDir(DIR_CACHE . "Smarty/compile/");
$smarty->setCacheDir(DIR_CACHE . "Smarty/cache/");
$smarty->registerPlugin("block", "translate", "translate");
$smarty->assign($this->data);
$smarty->caching = \Smarty::CACHING_LIFETIME_CURRENT;
$smarty->debugging = (defined('DEBUG')) ? DEBUG : false;
$this->output = $smarty->display($this->template);
}
}