📄 smarty.addons.php
字号:
}
// match all vars in equation, make sure all are passed
preg_match_all("![a-zA-Z][a-zA-Z0-9]*!",$equation, $match);
$allowed_funcs = array('int','abs','ceil','cos','exp','floor','log','log10',
'max','min','pi','pow','rand','round','sin','sqrt','srand','tan');
foreach($match[0] as $curr_var) {
if (!in_array($curr_var,array_keys($args)) && !in_array($curr_var, $allowed_funcs)) {
$smarty_obj->_trigger_error_msg("math: parameter $curr_var not passed as argument");
return;
}
}
foreach($args as $key => $val) {
if ($key != "equation" && $key != "format" && $key != "assign") {
// make sure value is not empty
if (strlen($val)==0) {
$smarty_obj->_trigger_error_msg("math: parameter $key is empty");
return;
}
if (!is_numeric($val)) {
$smarty_obj->_trigger_error_msg("math: parameter $key: is not numeric");
return;
}
$equation = preg_replace("/\b$key\b/",$val, $equation);
}
}
eval("\$smarty_math_result = ".$equation.";");
if (empty($args["format"])) {
if (empty($args["assign"])) {
echo $smarty_math_result;
} else {
$smarty_obj->assign($args["assign"],$smarty_math_result);
}
} else {
if (empty($args["assign"])){
printf($args["format"],$smarty_math_result);
} else {
$smarty_obj->assign($assign,sprintf($args["format"],$smarty_math_result));
}
}
}
/*======================================================================*\
Function: smarty_func_fetch
Purpose: fetch file, web or ftp data and display results
\*======================================================================*/
function smarty_func_fetch($args, &$smarty_obj) {
extract($args);
if (empty($file)) {
$smarty_obj->_trigger_error_msg("parameter 'file' cannot be empty");
return;
}
if ($smarty_obj->security && !preg_match('!^(http|ftp)://!', $file)) {
// make sure fetched file comes from secure directory
foreach ($smarty_obj->secure_dir as $curr_dir) {
if (substr(realpath($file), 0, strlen(realpath($curr_dir))) == realpath($curr_dir)) {
$resource_is_secure = true;
break;
}
}
if (!$resource_is_secure) {
$smarty_obj->_trigger_error_msg("(secure mode) fetch '$file' is not allowed");
return;
}
if (!@is_readable($file)) {
$smarty_obj->_trigger_error_msg("fetch cannot read file '$file'");
return;
}
}
if (!empty($assign)) {
ob_start();
readfile($file);
$smarty_obj->assign($assign,ob_get_contents());
ob_end_clean();
} else {
readfile($file);
}
}
/*======================================================================*\
Function: smarty_mod_count_characters
Purpose: count the number of characters in a text
\*======================================================================*/
function smarty_mod_count_characters($string, $include_spaces=false) {
if ($include_spaces)
return(strlen($string));
return preg_match_all("/[^\s]/",$string, $match);
}
/*======================================================================*\
Function: smarty_mod_count_words
Purpose: count the number of words in a text
\*======================================================================*/
function smarty_mod_count_words($string) {
// split text by ' ',\r,\n,\f,\t
$split_array = preg_split("/\s+/",$string);
// count matches that contain alphanumerics
$word_count = preg_grep("/[a-zA-Z0-9]/",$split_array);
return count($word_count);
}
/*======================================================================*\
Function: smarty_mod_count_sentences
Purpose: count the number of sentences in a text
\*======================================================================*/
function smarty_mod_count_sentences($string, $include_spaces=false) {
// find periods with a word before but not after.
return preg_match_all("/[^\s]\.(?!\w)/",$string, $match);
}
/*======================================================================*\
Function: smarty_mod_count_paragraphs
Purpose: count the number of sentences in a text
\*======================================================================*/
function smarty_mod_count_paragraphs($string, $include_spaces=false) {
// count \r or \n characters
return count( preg_split("/[\r\n]+/",$string) );
}
/*======================================================================*\
Function: smarty_func_counter
Purpose: print out a counter value
\*======================================================================*/
function smarty_func_counter($args, &$smarty_obj) {
static $count = array();
static $skipval = array();
static $dir = array();
static $id = "default";
static $printval = array();
static $assign = "";
extract($args);
if (!isset($id))
$id = "default";
if (isset($start))
$count[$id] = $start;
else if (!isset($count[$id]))
$count[$id]=1;
if (!isset($print))
$printval[$id]=true;
else
$printval[$id]=$print;
if (!empty($assign)) {
$printval[$id] = false;
$smarty_obj->assign($assign, $count[$id]);
}
if ($printval[$id])
echo $count[$id];
if (isset($skip))
$skipval[$id] = $skip;
else if (empty($skipval[$id]))
$skipval[$id] = 1;
if (isset($direction))
$dir[$id] = $direction;
else if (!isset($dir[$id]))
$dir[$id] = "up";
if ($dir[$id] == "down")
$count[$id] -= $skipval[$id];
else
$count[$id] += $skipval[$id];
return true;
}
/*======================================================================*\
Function: smarty_func_assign_debug_info
Purpose: assign debug info to the template
\*======================================================================*/
function smarty_func_assign_debug_info($args, &$smarty_obj) {
$assigned_vars = $smarty_obj->_tpl_vars;
ksort($assigned_vars);
if (is_array($smarty_obj->_config[0])) {
$config_vars = $smarty_obj->_config[0];
ksort($config_vars);
$smarty_obj->assign("_debug_config_keys", array_keys($config_vars));
$smarty_obj->assign("_debug_config_vals", array_values ($config_vars));
}
$included_templates = $smarty_obj->_smarty_debug_info;
$smarty_obj->assign("_debug_keys", array_keys($assigned_vars));
$smarty_obj->assign("_debug_vals", array_values ($assigned_vars));
$smarty_obj->assign("_debug_tpls", $included_templates);
return true;
}
/*======================================================================*\
Function: smarty_func_debug_print_var
Purpose: prints variable (or array) contents to the console
\*======================================================================*/
function smarty_mod_debug_print_var($var, $depth=0, $length=40) {
if (is_array($var)) {
$results = "<b>Array (".count($var).")</b>";
foreach ($var as $curr_key => $curr_val) {
$return = smarty_mod_debug_print_var($curr_val, $depth+1);
$results .= '<br>\r'.str_repeat(' ', $depth*2)."<b>$curr_key</b> => $return";
}
return $results;
} else {
if (empty($var)) {
return '<i>empty</i>';
}
if (strlen($var) > $length ) {
$results = substr($var, 0, $length-3).'...';
} else {
$results = $var;
}
$results = preg_replace("![\r\t\n]!", " ", $results);
$results = htmlspecialchars(htmlspecialchars($results));
return $results;
}
}
/*======================================================================*\
Function: smarty_func_overlib_init
Purpose: initialize use of overlib
\*======================================================================*/
function smarty_func_overlib_init($args, &$smarty_obj) {
// be sure to place overlib.js where Smarty can locate it.
// overlib.js came with the distribution of Smarty.
echo '<DIV ID="overDiv" STYLE="position:absolute; visibility:hidden; z-index:1000;"></DIV>'."\n".'<SCRIPT LANGUAGE=javascript>'."\n".'<!--'."\n";
readfile(SMARTY_DIR."overlib.js",1);
echo '// -->'."\n".'</SCRIPT>'."\n";
return;
}
/*======================================================================*\
Function: smarty_func_overlib
Purpose: make text pop up in windows via overlib
\*======================================================================*/
function smarty_func_overlib($args, &$smarty_obj) {
extract($args);
if (empty($text)) {
$smarty_obj->_trigger_error_msg("overlib: attribute 'text' required");
return false;
}
if (empty($trigger)) { $trigger = "onMouseOver"; }
echo $trigger.'="return overlib(\''.str_replace("'","\'",$text).'\'';
if ($sticky) { echo ",STICKY"; }
if (!empty($caption)) { echo ",CAPTION,'".str_replace("'","\'",$caption)."'"; }
if (!empty($fgcolor)) { echo ",FGCOLOR,'$fgcolor'"; }
if (!empty($bgcolor)) { echo ",BGCOLOR,'$bgcolor'"; }
if (!empty($textcolor)) { echo ",TEXTCOLOR,'$textcolor'"; }
if (!empty($capcolor)) { echo ",CAPCOLOR,'$capcolor'"; }
if (!empty($closecolor)) { echo ",CLOSECOLOR,'$closecolor'"; }
if (!empty($textfont)) { echo ",TEXTFONT,'$textfont'"; }
if (!empty($captionfont)) { echo ",CAPTIONFONT,'$captionfont'"; }
if (!empty($closefont)) { echo ",CLOSEFONT,'$closefont'"; }
if (!empty($textsize)) { echo ",TEXTSIZE,'$textsize'"; }
if (!empty($captionsize)) { echo ",CAPTIONSIZE,'$captionsize'"; }
if (!empty($closesize)) { echo ",CLOSESIZE,'$closesize'"; }
if (!empty($width)) { echo ",WIDTH,'$width'"; }
if (!empty($height)) { echo ",HEIGHT,'$height'"; }
if (!empty($left)) { echo ",LEFT"; }
if (!empty($right)) { echo ",RIGHT"; }
if (!empty($center)) { echo ",CENTER"; }
if (!empty($above)) { echo ",ABOVE"; }
if (!empty($below)) { echo ",BELOW"; }
if (!empty($border)) { echo ",BORDER,'$border'"; }
if (!empty($offsetx)) { echo ",OFFSETX,'$offsetx'"; }
if (!empty($offsety)) { echo ",OFFSETY,'$offsetxy'"; }
if (!empty($fgbackground)) { echo ",FGBACKGROUND,'$fgbackground'"; }
if (!empty($bgbackground)) { echo ",BGBACKGROUND,'$bgbackground'"; }
if (!empty($closetext)) { echo ",CLOSETEXT,'".str_replace("'","\'",$closetext)."'"; }
if (!empty($noclose)) { echo ",NOCLOSE"; }
if (!empty($status)) { echo ",STATUS,'".str_replace("'","\'",$status)."'"; }
if (!empty($autostatus)) { echo ",AUTOSTATUS"; }
if (!empty($autostatuscap)) { echo ",AUTOSTATUSCAP"; }
if (!empty($inarray)) { echo ",INARRAY,'$inarray'"; }
if (!empty($caparray)) { echo ",CAPARRAY,'$caparray'"; }
if (!empty($capicaon)) { echo ",CAPICON,'$capicon'"; }
if (!empty($snapx)) { echo ",SNAPX,'$snapx'"; }
if (!empty($snapy)) { echo ",SNAPY,'$snapy'"; }
if (!empty($fixx)) { echo ",FIXX,'$fixx'"; }
if (!empty($fixy)) { echo ",FIXY,'$fixy'"; }
if (!empty($background)) { echo ",BACKGROUND,'$background'"; }
if (!empty($padx)) { echo ",PADX,'$padx'"; }
if (!empty($pady)) { echo ",PADY,'$pady'"; }
if (!empty($fullhtml)) { echo ",FULLHTML"; }
if (!empty($frame)) { echo ",FRAME,'$frame'"; }
if (!empty($timeout)) { echo ",TIMEOUT,'$timeout'"; }
if (!empty($function)) { echo ",FUNCTION,'$function'"; }
if (!empty($delay)) { echo ",DELAY,'$delay'"; }
if (!empty($hauto)) { echo ",HAUTO"; }
if (!empty($vauto)) { echo ",VAUTO"; }
echo ');" onMouseOut="nd();"';
return;
}
/* vim: set expandtab: */
?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -