]> git.mxchange.org Git - friendica.git/blobdiff - boot.php
template engine rework
[friendica.git] / boot.php
index 0475f6ab39ecbc5a77b6ee5e76dc99bdd9f8ea86..477b8331c00644b11909fcb0c150d932ef74eaf3 100644 (file)
--- a/boot.php
+++ b/boot.php
@@ -385,6 +385,11 @@ if(! class_exists('App')) {
                        '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' => '',
@@ -539,6 +544,17 @@ if(! class_exists('App')) {
                        $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() {
@@ -712,13 +728,63 @@ if(! class_exists('App')) {
                        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':
@@ -730,11 +796,11 @@ if(! class_exists('App')) {
                        }
                }
 
-               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];
                }