ThinkPHP 3.2.3 Smarty模版引擎 调用$Think系统变量

浏览:1883 发布日期:2015/06/14 分类:技术分享 关键字: Smarty $Think
首先打开:ThinkPHP/Library/Vendor/Smarty/sysplugins/smarty_internal_templateparser.php

2683行(我的版本是这个行号,也可以直接在文件里搜索 yy_r121 这个函数)
将函数yy_r121 修改为以下内容:

function yy_r121(){
if ($this->yystack[$this->yyidx + 0]->minor['var'] == '\'smarty\'') {
$smarty_var = $this->compiler->compileTag('private_special_variable',array(),$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']);
$this->_retvalue = $smarty_var;
} else {
// used for array reset,next,prev,end,current
$this->last_variable = $this->yystack[$this->yyidx + 0]->minor['var'];
$this->last_index = $this->yystack[$this->yyidx + 0]->minor['smarty_internal_index'];
//print_r($this->yystack);
if($this->yystack[$this->yyidx + 0]->minor['var']=="'Think'"){
$ConstName=$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index'];
$vars=explode("']['",$ConstName);
foreach($vars as $key=>$value){
$value=str_replace("['",'',$value);
$value=str_replace("']",'',$value);
$vars[$key+1] = $value;
}
$vars[0] = 'Think';
$vars[1] = strtoupper(trim($vars[1]));
if(count($vars)>=3){
$vars[2] = trim($vars[2]);
switch($vars[1]){
case 'SERVER': $parseStr = '$_SERVER[\''.$vars[2].'\']';break;
case 'GET': $parseStr = '$_GET[\''.$vars[2].'\']';break;
case 'POST': $parseStr = '$_POST[\''.$vars[2].'\']';break;
case 'COOKIE':
if(isset($vars[3])) {
$parseStr = '$_COOKIE[\''.$vars[2].'\'][\''.$vars[3].'\']';
}elseif(C('COOKIE_PREFIX')){
$parseStr = '$_COOKIE[\''.C('COOKIE_PREFIX').$vars[2].'\']';
}else{
$parseStr = '$_COOKIE[\''.$vars[2].'\']';
}
break;
case 'SESSION':
if(isset($vars[3])) {
$parseStr = '$_SESSION[\''.$vars[2].'\'][\''.$vars[3].'\']';
}elseif(C('SESSION_PREFIX')){
$parseStr = '$_SESSION[\''.C('SESSION_PREFIX').'\'][\''.$vars[2].'\']';
}else{
$parseStr = '$_SESSION[\''.$vars[2].'\']';
}
break;
case 'ENV': $parseStr = '$_ENV[\''.$vars[2].'\']';break;
case 'REQUEST': $parseStr = '$_REQUEST[\''.$vars[2].'\']';break;
case 'CONST': $parseStr = strtoupper($vars[2]);break;
case 'LANG': $parseStr = 'L("'.$vars[2].'")';break;
case 'CONFIG': $parseStr = 'C("'.$vars[2].'")';break;
}
}else if(count($vars)==2){
switch($vars[1]){
case 'NOW': $parseStr = "date('Y-m-d g:i a',time())";break;
case 'VERSION': $parseStr = 'THINK_VERSION';break;
case 'TEMPLATE': $parseStr = 'C("TEMPLATE_NAME")';break;
case 'LDELIM': $parseStr = 'C("TMPL_L_DELIM")';break;
case 'RDELIM': $parseStr = 'C("TMPL_R_DELIM")';break;
default: if(defined($vars[1])) $parseStr = $vars[1];
}
}
//$this->_retvalue='('.$parseStr.')';
$this->_retvalue=$parseStr;
}else{
$this->_retvalue = $this->compileVariable($this->yystack[$this->yyidx + 0]->minor['var']).$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index'];
}
}
}

最佳答案
评论( 相关
后面还有条评论,点击查看>>