'stylesheet' => '',
'template_engine' => 'internal',
);
+
+ // array of registered template engines ('name'=>'class name')
+ public $template_engines = array();
+ // array of instanced template engines ('name'=>'instance')
+ public $template_engine_instance = array();
private $ldelim = array(
'internal' => '',
$mobile_detect = new Mobile_Detect();
$this->is_mobile = $mobile_detect->isMobile();
$this->is_tablet = $mobile_detect->isTablet();
+
+ /**
+ * register template engines
+ */
+ $dc = get_declared_classes();
+ foreach ($dc as $k) {
+ if (in_array("ITemplateEngine", class_implements($k))){
+ $this->register_template_engine($k);
+ }
+ }
+
}
function get_basepath() {
return $this->cached_profile_image[$avatar_image];
}
+
+ /**
+ * register template engine class
+ * if $name is "", is used class static property $class::$name
+ * @param string $class
+ * @param string $name
+ */
+ function register_template_engine($class, $name = '') {
+ if ($name===""){
+ $v = get_class_vars( $class );
+ if(x($v,"name")) $name = $v['name'];
+ }
+ if ($name===""){
+ echo "template engine <tt>$class</tt> cannot be registered without a name.\n";
+ killme();
+ }
+ $this->template_engines[$name] = $class;
+ }
+
+ /**
+ * return template engine instance. If $name is not defined,
+ * return engine defined by theme, or default
+ *
+ * @param strin $name Template engine name
+ * @return object Template Engine instance
+ */
+ function template_engine($name = ''){
+
+ if ($name!=="") {
+ $template_engine = $name;
+ } else {
+ $template_engine = 'smarty3';
+ if (x($this->theme, 'template_engine')) {
+ $template_engine = $this->theme['template_engine'];
+ }
+ }
+ if (isset($this->template_engines[$template_engine])){
+ if(isset($this->template_engine_instance[$template_engine])){
+ return $this->template_engine_instance[$template_engine];
+ } else {
+ $class = $this->template_engines[$template_engine];
+ $obj = new $class;
+ $this->template_engine_instance[$template_engine] = $obj;
+ return $obj;
+ }
+ }
+
+ echo "template engine <tt>$template_engine</tt> is not registered!\n"; killme();
+ }
+
function get_template_engine() {
return $this->theme['template_engine'];
}
- function set_template_engine($engine = 'internal') {
+ function set_template_engine($engine = 'smarty3') {
- $this->theme['template_engine'] = 'internal';
+ $this->theme['template_engine'] = 'smarty3';
switch($engine) {
case 'smarty3':
}
}
- function get_template_ldelim($engine = 'internal') {
+ function get_template_ldelim($engine = 'smarty3') {
return $this->ldelim[$engine];
}
- function get_template_rdelim($engine = 'internal') {
+ function get_template_rdelim($engine = 'smarty3') {
return $this->rdelim[$engine];
}
<?php
+require_once "object/TemplateEngine.php";
require_once("library/Smarty/libs/Smarty.class.php");
class FriendicaSmarty extends Smarty {
-
public $filename;
function __construct() {
}
return $this->fetch('file:' . $this->filename);
}
-}
-
+
+}
+class FriendicaSmartyEngine implements ITemplateEngine {
+ static $name ="smarty3";
+ // ITemplateEngine interface
+ public function replace_macros($s, $r) {
+ $template = '';
+ if(gettype($s) === 'string') {
+ $template = $s;
+ $s = new FriendicaSmarty();
+ }
+ foreach($r as $key=>$value) {
+ if($key[0] === '$') {
+ $key = substr($key, 1);
+ }
+ $s->assign($key, $value);
+ }
+ return $s->parsed($template);
+ }
+
+ public function get_template_file($file, $root=''){
+ $a = get_app();
+ $template_file = get_template_file($a, 'smarty3/' . $file, $root);
+ $template = new FriendicaSmarty();
+ $template->filename = $template_file;
+ return $template;
+ }
+}
<?php
+require_once 'object/TemplateEngine.php';
define("KEY_NOT_EXISTS", '^R_key_not_Exists^');
-class Template {
-
+class Template implements ITemplateEngine {
+ static $name ="internal";
+
var $r;
var $search;
var $replace;
return $s;
}
- public function replace($s, $r) {
+ // TemplateEngine interface
+ public function replace_macros($s, $r) {
$this->r = $r;
// remove comments block
$count++;
$s = $this->var_replace($s);
}
- return $s;
+ return template_unescape($s);
}
-
+
+ public function get_template_file($file, $root='') {
+ $a = get_app();
+ $template_file = get_template_file($a, $file, $root);
+ $content = file_get_contents($template_file);
+ return $content;
+ }
+
}
-$t = new Template;
function template_escape($s) {
/**
* This is our template processor
*
- * @global Template $t
* @param string|FriendicaSmarty $s the string requiring macro substitution,
* or an instance of FriendicaSmarty
* @param array $r key value pairs (search => replace)
* @return string substituted string
*/
function replace_macros($s,$r) {
- global $t;
$stamp1 = microtime(true);
$a = get_app();
- if($a->theme['template_engine'] === 'smarty3') {
- $template = '';
- if(gettype($s) === 'string') {
- $template = $s;
- $s = new FriendicaSmarty();
- }
- foreach($r as $key=>$value) {
- if($key[0] === '$') {
- $key = substr($key, 1);
- }
- $s->assign($key, $value);
- }
- $output = $s->parsed($template);
- }
- else {
- $r = $t->replace($s,$r);
+ $t = $a->template_engine();
+ $output = $t->replace_macros($s,$r);
- $output = template_unescape($r);
- }
- $a = get_app();
$a->save_timestamp($stamp1, "rendering");
return $output;
$stamp1 = microtime(true);
$a = get_app();
+ $t = $a->template_engine();
+
+ $template = $t->get_template_file($s, $root);
+
+ $a->save_timestamp($stamp1, "file");
+
+ return $template;
+ /*
if($a->theme['template_engine'] === 'smarty3') {
$template_file = get_template_file($a, 'smarty3/' . $s, $root);
return $content;
}
+ */
}}
if(! function_exists("get_template_file")) {
--- /dev/null
+<?php\r
+require_once 'boot.php';\r
+\r
+\r
+/**\r
+ * Interface for template engines\r
+ */\r
+interface ITemplateEngine {\r
+ public function replace_macros($s,$v);\r
+ public function get_template_file($file, $root='');\r
+}\r