Merge pull request #2016 from fabrixxm/template_vars_hook

Fix template_var hook
This commit is contained in:
Tobias Diekershoff 2015-11-06 20:03:38 +01:00
commit ed03a941ed
3 changed files with 21 additions and 11 deletions

View file

@ -274,7 +274,11 @@ $b is an array containing $nav from nav.php.
###'template_vars' ###'template_vars'
is called before vars are passed to the template engine to render the page. is called before vars are passed to the template engine to render the page.
The registered function can add,change or remove variables passed to template. The registered function can add,change or remove variables passed to template.
$b is the array of vars pased to 'replace_macros()' function. $b is an array with:
'template' => filename of template
'vars' => array of vars passed to template
Complete list of hook callbacks Complete list of hook callbacks

View file

@ -2,6 +2,7 @@
require_once "object/TemplateEngine.php"; require_once "object/TemplateEngine.php";
require_once("library/Smarty/libs/Smarty.class.php"); require_once("library/Smarty/libs/Smarty.class.php");
require_once "include/plugin.php";
define('SMARTY3_TEMPLATE_FOLDER','templates'); define('SMARTY3_TEMPLATE_FOLDER','templates');
@ -39,19 +40,19 @@ class FriendicaSmarty extends Smarty {
} }
return $this->fetch('file:' . $this->filename); return $this->fetch('file:' . $this->filename);
} }
} }
class FriendicaSmartyEngine implements ITemplateEngine { class FriendicaSmartyEngine implements ITemplateEngine {
static $name ="smarty3"; static $name ="smarty3";
public function __construct(){ public function __construct(){
if(!is_writable('view/smarty3/')){ if(!is_writable('view/smarty3/')){
echo "<b>ERROR:</b> folder <tt>view/smarty3/</tt> must be writable by webserver."; killme(); echo "<b>ERROR:</b> folder <tt>view/smarty3/</tt> must be writable by webserver."; killme();
} }
} }
// ITemplateEngine interface // ITemplateEngine interface
public function replace_macros($s, $r) { public function replace_macros($s, $r) {
$template = ''; $template = '';
@ -59,15 +60,24 @@ class FriendicaSmartyEngine implements ITemplateEngine {
$template = $s; $template = $s;
$s = new FriendicaSmarty(); $s = new FriendicaSmarty();
} }
// "middleware": inject variables into templates
$arr = [
"template"=> basename($s->filename),
"vars" => $r
];
call_hooks("template_vars", $arr);
$r = $arr['vars'];
foreach($r as $key=>$value) { foreach($r as $key=>$value) {
if($key[0] === '$') { if($key[0] === '$') {
$key = substr($key, 1); $key = substr($key, 1);
} }
$s->assign($key, $value); $s->assign($key, $value);
} }
return $s->parsed($template); return $s->parsed($template);
} }
public function get_template_file($file, $root=''){ public function get_template_file($file, $root=''){
$a = get_app(); $a = get_app();
$template_file = get_template_file($a, SMARTY3_TEMPLATE_FOLDER.'/'.$file, $root); $template_file = get_template_file($a, SMARTY3_TEMPLATE_FOLDER.'/'.$file, $root);

View file

@ -19,10 +19,6 @@ function replace_macros($s,$r) {
$stamp1 = microtime(true); $stamp1 = microtime(true);
// "middleware": inject variables into templates
call_hooks("template_vars", $r);
$a = get_app(); $a = get_app();
$t = $a->template_engine(); $t = $a->template_engine();