⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smarty_compiler.class.php

📁 通达OA官方提供的30源代码,感觉很实在
💻 PHP
📖 第 1 页 / 共 4 页
字号:
            case 'insert':                return $this->_compile_insert_tag($tag_args);            default:                if (isset($this->compiler_funcs[$tag_command])) {                    return $this->_compile_compiler_tag($tag_command, $tag_args);                } else if (isset($this->custom_funcs[$tag_command])) {                    return $this->_compile_custom_tag($tag_command, $tag_args);                } else {                    $this->_syntax_error("unknown tag - '$tag_command'", E_USER_WARNING);                    return;                }        }    }/*======================================================================*\    Function: _compile_compiler_tag    Purpose:  compile the custom compiler tag\*======================================================================*/    function _compile_compiler_tag($tag_command, $tag_args)    {        $function = $this->compiler_funcs[$tag_command];        if (!function_exists($function)) {            $this->_syntax_error("compiler function '$tag_command' is not implemented", E_USER_WARNING);            return;        }        return '<?php ' . $function($tag_args, $this) . ' ?>';    }/*======================================================================*\    Function: _compile_custom_tag    Purpose:  compile custom function tag\*======================================================================*/    function _compile_custom_tag($tag_command, $tag_args)    {        $function = $this->custom_funcs[$tag_command];        if (!function_exists($function)) {            $this->_syntax_error("custom function '$tag_command' is not implemented", E_USER_WARNING);            return;        }        $arg_list = array();        $attrs = $this->_parse_attrs($tag_args);        foreach ($attrs as $arg_name => $arg_value) {            if (is_bool($arg_value))                $arg_value = $arg_value ? 'true' : 'false';            $arg_list[] = "'$arg_name' => $arg_value";        }        return "<?php $function(array(".implode(',', (array)$arg_list)."), \$this); if(\$this->_extract) { extract(\$this->_tpl_vars); \$this->_extract=false; } ?>";    }/*======================================================================*\    Function: _compile_insert_tag    Purpose:  Compile {insert ...} tag\*======================================================================*/    function _compile_insert_tag($tag_args)    {        $attrs = $this->_parse_attrs($tag_args);        $name = substr($attrs['name'], 1, -1);        if (empty($name)) {            $this->_syntax_error("missing insert name");        }        foreach ($attrs as $arg_name => $arg_value) {            if (is_bool($arg_value))                $arg_value = $arg_value ? 'true' : 'false';            $arg_list[] = "'$arg_name' => $arg_value";        }        return "<?php echo \$this->_run_insert_handler(array(".implode(', ', (array)$arg_list).")); ?>\n";    }/*======================================================================*\    Function: _compile_config_load_tag    Purpose:  Compile {config_load ...} tag\*======================================================================*/    function _compile_config_load_tag($tag_args)    {        $attrs = $this->_parse_attrs($tag_args);        if (empty($attrs['file'])) {            $this->_syntax_error("missing 'file' attribute in config_load tag");        }        if (empty($attrs['section'])) {            $attrs['section'] = 'null';        }        $scope = @$this->_dequote($attrs['scope']);        if (!empty($scope)) {            if ($scope != 'local' &&                $scope != 'parent' &&                $scope != 'global') {                $this->_syntax_error("invalid 'scope' attribute value");            }        } else {            if (!empty($attrs['global']) && $attrs['global'])                $scope = 'parent';            else                $scope = 'local';        }        $output  = '<?php $this->_config_load(' . $attrs['file'] . ', ' . $attrs['section'] . ", '$scope'); ?>";        return $output;    }/*======================================================================*\    Function: _compile_include_tag    Purpose:  Compile {include ...} tag\*======================================================================*/    function _compile_include_tag($tag_args)    {        $attrs = $this->_parse_attrs($tag_args);        $arg_list = array();        if (empty($attrs['file'])) {            $this->_syntax_error("missing 'file' attribute in include tag");        }        foreach ($attrs as $arg_name => $arg_value) {            if ($arg_name == 'file') {                $include_file = $arg_value;                continue;            } else if ($arg_name == 'assign') {                $assign_var = $arg_value;                continue;            }            if (is_bool($arg_value))                $arg_value = $arg_value ? 'true' : 'false';            $arg_list[] = "'$arg_name' => $arg_value";        }        $output = '<?php ';        if (isset($assign_var)) {			$output .= "ob_start();\n";        }        $output .=            "\$_smarty_tpl_vars = \$this->_tpl_vars;\n" .            "\$this->_smarty_include(".$include_file.", array(".implode(',', (array)$arg_list)."));\n" .            "\$this->_tpl_vars = \$_smarty_tpl_vars;\n" .            "unset(\$_smarty_tpl_vars);\n";        if (isset($assign_var)) {			$output .= "\$this->assign(" . $assign_var . ", ob_get_contents()); ob_end_clean();\n";        }        $output .= ' ?>';		return $output;    }/*======================================================================*\    Function: _compile_include_php_tag    Purpose:  Compile {include ...} tag\*======================================================================*/    function _compile_include_php_tag($tag_args)    {        $attrs = $this->_parse_attrs($tag_args);        if (empty($attrs['file'])) {            $this->_syntax_error("missing 'file' attribute in include_php tag");			return false;        }		$this->_parse_file_path($this->trusted_dir, $this->_dequote($attrs['file']), $resource_type, $resource_name);		if ($this->security) {			if( $resource_type != 'file' || !@is_file($resource_name)) {            	$this->_syntax_error("include_php: $resource_type: $resource_name is not readable");				return false;			}			if (!$this->_is_trusted($resource_type, $resource_name)) {            	$this->_syntax_error("include_php: $resource_type: $resource_name is not trusted");				return false;        	}		}        if (!empty($attrs['assign'])) {			$output = "<?php ob_start();\n";			$output .= "include('" . $resource_name . "');\n";			$output .= "\$this->assign(" . $this->_dequote($attrs['assign']).", ob_get_contents()); ob_end_clean();\n?>";		} else {        	$output =  "<?php include('" . $resource_name . "'); ?>";		}		return $output;    }/*======================================================================*\    Function: _compile_section_start    Purpose:  Compile {section ...} tag\*======================================================================*/    function _compile_section_start($tag_args)    {        $attrs = $this->_parse_attrs($tag_args);        $arg_list = array();        $output = "<?php ";        $section_name = $attrs['name'];        if (empty($section_name)) {            $this->_syntax_error("missing section name");        }        $output .= "if (isset(\$this->_sections[$section_name])) unset(\$this->_sections[$section_name]);\n";        $section_props = "\$this->_sections[$section_name]";        foreach ($attrs as $attr_name => $attr_value) {            switch ($attr_name) {                case 'loop':                    $output .= "{$section_props}['loop'] = is_array($attr_value) ? count($attr_value) : max(0, (int)$attr_value);\n";                    break;                case 'show':                    if (is_bool($attr_value))                        $show_attr_value = $attr_value ? 'true' : 'false';                    else                        $show_attr_value = "(bool)$attr_value";                    $output .= "{$section_props}['show'] = $show_attr_value;\n";                    break;                case 'name':                    $output .= "{$section_props}['$attr_name'] = $attr_value;\n";                    break;                case 'max':                case 'start':                    $output .= "{$section_props}['$attr_name'] = (int)$attr_value;\n";                    break;                case 'step':                    $output .= "{$section_props}['$attr_name'] = ((int)$attr_value) == 0 ? 1 : (int)$attr_value;\n";                    break;                default:                    $this->_syntax_error("unknown section attribute - '$attr_name'");                    break;            }        }        if (!isset($attrs['show']))            $output .= "{$section_props}['show'] = true;\n";        if (!isset($attrs['loop']))            $output .= "{$section_props}['loop'] = 1;\n";        if (!isset($attrs['max']))            $output .= "{$section_props}['max'] = {$section_props}['loop'];\n";        else            $output .= "if ({$section_props}['max'] < 0)\n" .                       "    {$section_props}['max'] = {$section_props}['loop'];\n";        if (!isset($attrs['step']))            $output .= "{$section_props}['step'] = 1;\n";        if (!isset($attrs['start']))            $output .= "{$section_props}['start'] = {$section_props}['step'] > 0 ? 0 : {$section_props}['loop']-1;\n";        else {            $output .= "if ({$section_props}['start'] < 0)\n" .                       "    {$section_props}['start'] = max({$section_props}['step'] > 0 ? 0 : -1, {$section_props}['loop'] + {$section_props}['start']);\n" .                       "else\n" .                       "    {$section_props}['start'] = min({$section_props}['start'], {$section_props}['step'] > 0 ? {$section_props}['loop'] : {$section_props}['loop']-1);\n";        }        $output .= "if ({$section_props}['show']) {\n" .                   "    {$section_props}['total'] = min(ceil(({$section_props}['step'] > 0 ? {$section_props}['loop'] - {$section_props}['start'] : {$section_props}['start']+1)/abs({$section_props}['step'])), {$section_props}['max']);\n" .                   "    if ({$section_props}['total'] == 0)\n" .                   "        {$section_props}['show'] = false;\n" .                   "} else\n" .                   "    {$section_props}['total'] = 0;\n";        $output .= "if ({$section_props}['show']):\n";        $output .= "            for ({$section_props}['index'] = {$section_props}['start'], {$section_props}['iteration'] = 1;                 {$section_props}['iteration'] <= {$section_props}['total'];                 {$section_props}['index'] += {$section_props}['step'], {$section_props}['iteration']++):\n";        $output .= "{$section_props}['rownum'] = {$section_props}['iteration'];\n";        $output .= "{$section_props}['index_prev'] = {$section_props}['index'] - {$section_props}['step'];\n";        $output .= "{$section_props}['index_next'] = {$section_props}['index'] + {$section_props}['step'];\n";        $output .= "{$section_props}['first']      = ({$section_props}['iteration'] == 1);\n";        $output .= "{$section_props}['last']       = ({$section_props}['iteration'] == {$section_props}['total']);\n";        $output .= "?>";

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -