assign( 'TITLE', 'TemplateDemo - Userlist' ); * $page->assign( 'user', DB_read_all( 'select * from ris_user' ) ); * $page->output(); * * Usage Example II: * * $data = array( * 'TITLE' => 'TemplateDemo - Userlist', * 'user' => DB_read_all( 'select * from ris_user' ) * ); * $page = new SmartTemplate( "template.html" ); * $page->output( $data ); * * * @author Philipp v. Criegern philipp@criegern.com * @author Manuel 'EndelWar' Dalla Lana endelwar@aregar.it * @version 1.2.1 03.07.2006 * * CVS ID: $Id: class.smarttemplate.php 2504 2011-12-28 07:35:29Z liu21st $ */ class SmartTemplate { /** * Whether to store compiled php code or not (for debug purpose) * * @access public */ var $reuse_code = true; /** * Directory where all templates are stored * Can be overwritten by global configuration array $_CONFIG['template_dir'] * * @access public */ var $template_dir = 'templates/'; /** * Where to store compiled templates * Can be overwritten by global configuration array $_CONFIG['smarttemplate_compiled'] * * @access public */ var $temp_dir = 'templates_c/'; /** * Temporary folder for output cache storage * Can be overwritten by global configuration array $_CONFIG['smarttemplate_cache'] * * @access public */ var $cache_dir = 'templates_c/'; /** * Default Output Cache Lifetime in Seconds * Can be overwritten by global configuration array $_CONFIG['cache_lifetime'] * * @access public */ var $cache_lifetime = 600; /** * Temporary file for output cache storage * * @access private */ var $cache_filename; /** * The template filename * * @access private */ var $tpl_file; /** * The compiled template filename * * @access private */ var $cpl_file; /** * Template content array * * @access private */ var $data = array(); /** * Parser Class * * @access private */ var $parser; /** * Debugger Class * * @access private */ var $debugger; /** * SmartTemplate Constructor * * @access public * @param string $template_filename Template Filename */ function SmartTemplate ( $template_filename = '' ) { global $_CONFIG; if (!empty($_CONFIG['smarttemplate_compiled'])) { $this->temp_dir = $_CONFIG['smarttemplate_compiled']; } if (!empty($_CONFIG['smarttemplate_cache'])) { $this->cache_dir = $_CONFIG['smarttemplate_cache']; } if (is_numeric($_CONFIG['cache_lifetime'])) { $this->cache_lifetime = $_CONFIG['cache_lifetime']; } if (!empty($_CONFIG['template_dir']) && is_file($_CONFIG['template_dir'] . '/' . $template_filename)) { $this->template_dir = $_CONFIG['template_dir']; } $this->tpl_file = $template_filename; } // DEPRECATED METHODS // Methods used in older parser versions, soon will be removed function set_templatefile ($template_filename) { $this->tpl_file = $template_filename; } function add_value ($name, $value ) { $this->assign($name, $value); } function add_array ($name, $value ) { $this->append($name, $value); } /** * Assign Template Content * * Usage Example: * $page->assign( 'TITLE', 'My Document Title' ); * $page->assign( 'userlist', array( * array( 'ID' => 123, 'NAME' => 'John Doe' ), * array( 'ID' => 124, 'NAME' => 'Jack Doe' ), * ); * * @access public * @param string $name Parameter Name * @param mixed $value Parameter Value * @desc Assign Template Content */ function assign ( $name, $value = '' ) { if (is_array($name)) { foreach ($name as $k => $v) { $this->data[$k] = $v; } } else { $this->data[$name] = $value; } } /** * Assign Template Content * * Usage Example: * $page->append( 'userlist', array( 'ID' => 123, 'NAME' => 'John Doe' ) ); * $page->append( 'userlist', array( 'ID' => 124, 'NAME' => 'Jack Doe' ) ); * * @access public * @param string $name Parameter Name * @param mixed $value Parameter Value * @desc Assign Template Content */ function append ( $name, $value ) { if (is_array($value)) { $this->data[$name][] = $value; } elseif (!is_array($this->data[$name])) { $this->data[$name] .= $value; } } /** * Parser Wrapper * Returns Template Output as a String * * @access public * @param array $_top Content Array * @return string Parsed Template * @desc Output Buffer Parser Wrapper */ function result ( $_top = '' ) { ob_start(); $this->output( $_top ); $result = ob_get_contents(); ob_end_clean(); return $result; } /** * Execute parsed Template * Prints Parsing Results to Standard Output * * @access public * @param array $_top Content Array * @desc Execute parsed Template */ function output ( $_top = '' ) { global $_top; // Make sure that folder names have a trailing '/' if (strlen($this->template_dir) && substr($this->template_dir, -1) != '/') { $this->template_dir .= '/'; } if (strlen($this->temp_dir) && substr($this->temp_dir, -1) != '/') { $this->temp_dir .= '/'; } // Prepare Template Content if (!is_array($_top)) { if (strlen($_top)) { $this->tpl_file = $_top; } $_top = $this->data; } $_obj = &$_top; $_stack_cnt = 0; $_stack[$_stack_cnt++] = $_obj; // Check if template is already compiled $cpl_file_name = preg_replace('/[:\/.\\\\]/', '_', $this->tpl_file); if (strlen($cpl_file_name) > 0) { $this->cpl_file = $this->temp_dir . $cpl_file_name . '.php'; $compile_template = true; if ($this->reuse_code) { if (is_file($this->cpl_file)) { if ($this->mtime($this->cpl_file) > $this->mtime($this->template_dir . $this->tpl_file)) { $compile_template = false; } } } if ($compile_template) { if (@include_once("class.smarttemplateparser.php")) { $this->parser = new SmartTemplateParser($this->template_dir . $this->tpl_file); if (!$this->parser->compile($this->cpl_file)) { exit( "SmartTemplate Parser Error: " . $this->parser->error ); } } else { exit( "SmartTemplate Error: Cannot find class.smarttemplateparser.php; check SmartTemplate installation"); } } // Execute Compiled Template include($this->cpl_file); } else { exit( "SmartTemplate Error: You must set a template file name"); } // Delete Global Content Array in order to allow multiple use of SmartTemplate class in one script unset ($_top); } /** * Debug Template * * @access public * @param array $_top Content Array * @desc Debug Template */ function debug ( $_top = '' ) { // Prepare Template Content if (!$_top) { $_top = $this->data; } if (@include_once("class.smarttemplatedebugger.php")) { $this->debugger = new SmartTemplateDebugger($this->template_dir . $this->tpl_file); $this->debugger->start($_top); } else { exit( "SmartTemplate Error: Cannot find class.smarttemplatedebugger.php; check SmartTemplate installation"); } } /** * Start Ouput Content Buffering * * Usage Example: * $page = new SmartTemplate('template.html'); * $page->use_cache(); * ... * * @access public * @desc Output Cache */ function use_cache ( $key = '' ) { if (empty($_POST)) { $this->cache_filename = $this->cache_dir . 'cache_' . md5($_SERVER['REQUEST_URI'] . serialize($key)) . '.ser'; if (($_SERVER['HTTP_CACHE_CONTROL'] != 'no-cache') && ($_SERVER['HTTP_PRAGMA'] != 'no-cache') && @is_file($this->cache_filename)) { if ((time() - filemtime($this->cache_filename)) < $this->cache_lifetime) { readfile($this->cache_filename); exit; } } ob_start( array( &$this, 'cache_callback' ) ); } } /** * Output Buffer Callback Function * * @access private * @param string $output * @return string $output */ function cache_callback ( $output ) { if ($hd = @fopen($this->cache_filename, 'w')) { fputs($hd, $output); fclose($hd); } return $output; } /** * Determine Last Filechange Date (if File exists) * * @access private * @param string $filename * @return mixed * @desc Determine Last Filechange Date */ function mtime ( $filename ) { if (@is_file($filename)) { $ret = filemtime($filename); return $ret; } } } ?>