📄 tpl.inc.php
字号:
<?php/* vim: set expandtab tabstop=4 shiftwidth=4: */// +----------------------------------------------------------------------+// | PHP version 4.0 |// +----------------------------------------------------------------------+// | Copyright (c) 2002 Active Fish Group |// +----------------------------------------------------------------------+// | Authors: Kelvin Jones <kelvin@kelvinjones.co.uk> |// +----------------------------------------------------------------------+//// $Id: class.tpl.inc.php,v 1.1 2003/07/08 12:31:10 platinum Exp $// check to avoid multiple including of classif (!defined('vlibTemplateClassLoaded')) { define('vlibTemplateClassLoaded', 1); include_once ($conf['classpath'].'/tpl_error.inc.php'); include_once ($conf['classpath'].'/tpl_ini.inc.php'); /** * vlibTemplate is a class used to seperate PHP and HTML. * For instructions on how to use vlibTemplate, see the * vlibTemplate.html file, located in the 'docs' directory. * * @since 07/03/2002 * @author Kelvin Jones <kelvin@kelvinjones.co.uk> * @package vLIB * @access public * @see vlibTemplate.html */ class tpl { /*-----------------------------------------------------------------------------\ | ATTENTION | | Do not touch the following variables. vlibTemplate will not work otherwise. | \-----------------------------------------------------------------------------*/ var $OPTIONS = array( 'MAX_INCLUDES' => 10, 'TEMPLATE_DIR' => null, 'GLOBAL_VARS' => null, 'GLOBAL_CONTEXT_VARS' => null, 'LOOP_CONTEXT_VARS' => null, 'SET_LOOP_VAR' => null, 'DEFAULT_ESCAPE' => null, 'STRICT' => null, 'CASELESS' => null, 'UNKNOWNS' => null, 'TIME_PARSE' => null, 'ENABLE_PHPINCLUDE' => null, 'INCLUDE_PATHS' => array(), 'CACHE_DIRECTORY' => null, 'CACHE_LIFETIME' => null, 'CACHE_EXTENSION' => null ); /** open and close tags used for escaping */ var $ESCAPE_TAGS = array( 'html' => array('open' => 'htmlspecialchars(' ,'close'=> ', ENT_QUOTES)'), 'url' => array('open' => 'urlencode(' ,'close'=> ')'), 'rawurl'=>array('open' => 'rawurlencode(' ,'close'=> ')'), 'sq' => array('open' => 'addcslashes(' ,'close'=> ", \"'\")"), 'dq' => array('open' => 'addcslashes(' ,'close'=> ", '\"')"), '1' => array('open' => 'htmlspecialchars(' ,'close'=> ', ENT_QUOTES)'), '0' => array('open' => '' ,'close'=> ''), 'none' => array('open' => '' ,'close'=> ''), 'hex' => array('open' => '$this->_escape_hex(', 'close'=> ', false)'), 'hexentity' => array('open' => '$this->_escape_hex(', 'close'=> ', true)') ); /** open and close tags used for formatting */ var $FORMAT_TAGS = array( 'strtoupper' => array('open' => 'strtoupper(', 'close'=> ')'), 'uc' => array('open' => 'strtoupper(', 'close'=> ')'), 'strtolower' => array('open' => 'strtolower(', 'close'=> ')'), 'lc' => array('open' => 'strtolower(', 'close'=> ')'), 'ucfirst' => array('open' => 'ucfirst(', 'close'=> ')'), 'lcucfirst' => array('open' => 'ucfirst(strtolower(', 'close'=> '))'), 'ucwords' => array('open' => 'ucwords(', 'close'=> ')'), 'lcucwords' => array('open' => 'ucwords(strtolower(', 'close'=> '))') ); /** operators allowed when using extended TMPL_IF syntax */ var $allowed_if_ops = array('==','!=','<>','<','>','<=','>='); /** dbs allowed by vlibTemplate::setDbLoop(). */ var $allowed_loop_dbs = array('MYSQL','POSTGRESQL','INFORMIX','INTERBASE','INGRES', 'MSSQL','MSQL','OCI8','ORACLE','OVRIMOS','SYBASE'); /** root directory of vlibTemplate automagically filled in */ var $VLIBTEMPLATE_ROOT = null; /** contains current directory used when doing recursive include */ var $_currentincludedir = array(); /** current depth of includes */ var $_includedepth = 0; /** full path to tmpl file */ var $_tmplfilename = null; /** file data before it's parsed */ var $_tmplfile = null; /** parsed version of file, ready for eval()ing */ var $_tmplfilep = null; /** eval()ed version ready for printing or whatever */ var $_tmploutput = null; /** array for variables to be kept */ var $_vars = array(); /** array where loop variables are kept */ var $_arrvars = array(); /** array which holds the current namespace during parse */ var $_namespace = array(); /** variable is set to true once the template is parsed, to save re-parsing everything */ var $_parsed = false; /** array holds all unknowns vars */ var $_unknowns = array(); /** microtime when template parsing began */ var $_firstparsetime = null; /** total time taken to parse template */ var $_totalparsetime = null; /** name of current loop being passed in */ var $_currloopname = null; /** rows with the above loop */ var $_currloop = array(); /** define vars to avoid warnings */ var $_debug = null; var $_cache = null; /** array which holds the dynamic Includes */ var $_dyninclude = array(); /*-----------------------------------------------------------------------------\ | public functions | \-----------------------------------------------------------------------------*/ /** * FUNCTION: newTemplate * * Usually called by the class constructor. * Stores the filename in $this->_tmplfilename. * Raises an error if the template file is not found. * * @param string $tmplfile full path to template file * @return boolean true * @access public */ function newTemplate ($tmplfile) { if (!$tfile = $this->_fileSearch($tmplfile)) vlibTemplateError::raiseError('VT_ERROR_NOFILE',KILL,$tmplfile); // make sure that any parsing vars are cleared for the new template $this->_tmplfile = null; $this->_tmplfilep = null; $this->_tmploutput = null; $this->_parsed = false; $this->_unknowns = array(); $this->_firstparsetime = null; $this->_totalparsetime = null; // reset debug module if ($this->_debug) $this->_debugReset(); $this->_tmplfilename = $tfile; return true; } /** * FUNCTION: setVar * * Sets variables to be used by the template * If $k is an array, then it will treat it as an associative array * using the keys as variable names and the values as variable values. * * @param mixed $k key to define variable name * @param mixed $v variable to assign to $k * @return boolean true/false * @access public */ function setVar ($k,$v=null) { if (is_array($k)) { foreach($k as $key => $value){ $key = ($this->OPTIONS['CASELESS']) ? strtolower(trim($key)) : trim($key); if (preg_match('/^[A-Za-z_]+[A-Za-z0-9_]*$/', $key) && $value !== null ) { $this->_vars[$key] = $value; } } } else { if (preg_match('/^[A-Za-z_]+[A-Za-z0-9_]*$/', $k) && $v !== null) { if ($this->OPTIONS['CASELESS']) $k = strtolower($k); $this->_vars[trim($k)] = $v; } else { return false; } } return true; } /** * FUNCTION: setInclude * * Sets dynamic includes to be used by the template * If $k is an array, then it will treat it as an associative array * using the keys as variable names and the values as variable values. * * @param mixed $k key to define variable name * @param mixed $v variable to assign to $k * @return boolean true/false * @access public */ function setInclude($k, $v = null) { if(is_array($k)) { foreach($k as $key => $val) { $this->_dyninclude[$key] = $val; } } else { $this->_dyninclude[$k] = $v; } return true; } /** * FUNCTION: unsetVar * * Unsets a variable which has already been set * Parse in all vars wanted for deletion in seperate parametres * * @param string var name to remove use: vlibTemplate::unsetVar(var[, var..]) * @return boolean true/false returns true unless called with 0 params * @access public */ function unsetVar () { $num_args = func_num_args(); if ($num_args < 1) return false; for ($i = 0; $i < $num_args; $i++) { $var = func_get_arg($i); if ($this->OPTIONS['CASELESS']) $var = strtolower($var); if (!preg_match('/^[A-Za-z_]+[A-Za-z0-9_]*$/', $var)) continue; unset($this->_vars[$var]); } return true; } /** * FUNCTION: getVars * * Gets all vars currently set in global namespace. * * @return array * @access public */ function getVars () { if (empty($this->_vars)) return false; return $this->_vars; } /** * FUNCTION: getVar * * Gets a single var from the global namespace * * @return var * @access public */ function getVar ($var) { if ($this->OPTIONS['CASELESS']) $var = strtolower($var); if (empty($var) || !isset($this->_vars[$var])) return false; return $this->_vars[$var]; } /** * FUNCTION: setContextVars * * sets the GLOBAL_CONTEXT_VARS * * @return true * @access public */ function setContextVars () { $_phpself = @$GLOBALS['HTTP_SERVER_VARS']['PHP_SELF']; $_pathinfo = @$GLOBALS['HTTP_SERVER_VARS']['PATH_INFO']; $_request_uri = @$GLOBALS['HTTP_SERVER_VARS']['REQUEST_URI']; $_qs = @$GLOBALS['HTTP_SERVER_VARS']['QUERY_STRING']; // the following fixes bug of $PHP_SELF on Win32 CGI and IIS. $_self = (!empty($_pathinfo)) ? $_pathinfo : $_phpself; $_uri = (!empty($_request_uri)) ? $_request_uri : $_self.'?'.$_qs; $this->setvar('__SELF__', $_self); $this->setvar('__REQUEST_URI__', $_uri); return true; } /** * FUNCTION: setLoop * * Builds the loop construct for use with <TMPL_LOOP>. * * @param string $k string to define loop name * @param array $v array to assign to $k * @return boolean true/false * @access public */ function setLoop ($k,$v) { if (is_array($v) && preg_match('/^[A-Za-z_]+[A-Za-z0-9_]*$/', $k)) { $k = ($this->OPTIONS['CASELESS']) ? strtolower(trim($k)) : trim($k); $this->_arrvars[$k] = array(); if ($this->OPTIONS['SET_LOOP_VAR'] && !empty($v)) $this->setvar($k, 1); if (($this->_arrvars[$k] = $this->_arrayBuild($v)) == false) { vlibTemplateError::raiseError('VT_WARNING_INVALID_ARR',WARNING,$k); } } return true; } /** * FUNCTION: setDbLoop [** EXPERIMENTAL **] * * Function to create a loop from a Db result resource link. * * @param string $loopname to commit loop. If not set, will use last loopname set using newLoop() * @param string $result link to a Db result resource * @param string $db_type, type of db that the result resource belongs to. * @return boolean true/false * @access public */ function setDbLoop ($loopname, $result, $db_type='MYSQL') { $db_type = strtoupper($db_type); if (!in_array($db_type, $this->allowed_loop_dbs)) { vlibTemplateError::raiseError('VT_WARNING_INVALID_LOOP_DB',WARNING, $db_type); return false; } $loop_arr = array(); switch ($db_type) { case 'MYSQL': if (get_resource_type($result) != 'mysql result') { vlibTemplateError::raiseError('VT_WARNING_INVALID_RESOURCE',WARNING, $db_type);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -