* Includes are now always done via generated function call to protect

namespace.
* config_load now always uses global config object to improve
  performance.
This commit is contained in:
andrey
2001-03-15 21:28:24 +00:00
parent 6de2acf24d
commit 2ca77e08d8
2 changed files with 54 additions and 60 deletions

View File

@@ -398,13 +398,13 @@ class Smarty_Compiler extends Smarty {
$output = "<?php if (!class_exists('Config_File'))\n" . $output = "<?php if (!class_exists('Config_File'))\n" .
" include_once 'Config_File.class.php';\n" . " include_once 'Config_File.class.php';\n" .
"if (!is_object(\$_conf_obj) || get_class(\$_conf_obj) != 'config_file') {\n" . "if (!is_object(\$GLOBALS['_smarty_conf_obj']) || get_class(\$GLOBALS['_smarty_conf_obj']) != 'config_file') {\n" .
" \$_conf_obj = new Config_File('".$this->config_dir."');\n" . " \$GLOBALS['_smarty_conf_obj'] = new Config_File('".$this->config_dir."');\n" .
"}\n" . "}\n" .
"\$_config = array_merge((array)\$_config, \$_conf_obj->get(".$attrs['file']."));\n"; "\$_smarty_config = array_merge((array)\$_smarty_config, \$GLOBALS['_smarty_conf_obj']->get(".$attrs['file']."));\n";
if (!empty($attrs['section'])) if (!empty($attrs['section']))
$output .= '$_config = array_merge((array)$_config, $_conf_obj->get('.$attrs['file'].', '.$attrs['section'].')); '; $output .= '$_smarty_config = array_merge((array)$_smarty_config, $GLOBALS[\'_smarty_conf_obj\']->get('.$attrs['file'].', '.$attrs['section'].')); ';
$output .= '?>'; $output .= '?>';
@@ -424,29 +424,26 @@ class Smarty_Compiler extends Smarty {
} else } else
$attrs['file'] = $this->_dequote($attrs['file']); $attrs['file'] = $this->_dequote($attrs['file']);
if (count($attrs) > 1) { $include_func_name = uniqid("_include_");
$include_func_name = uniqid("_include_"); $include_file_name = $this->compile_dir.'/'.$attrs['file'];
$include_file_name = $this->compile_dir.'/'.$attrs['file'];
foreach ($attrs as $arg_name => $arg_value) { foreach ($attrs as $arg_name => $arg_value) {
if ($arg_name == 'file') continue; if ($arg_name == 'file') continue;
if (is_bool($arg_value)) if (is_bool($arg_value))
$arg_value = $arg_value ? 'true' : 'false'; $arg_value = $arg_value ? 'true' : 'false';
$arg_list[] = "'$arg_name' => $arg_value"; $arg_list[] = "'$arg_name' => $arg_value";
} }
return "<?php " . return "<?php " .
"if (!function_exists('$include_func_name')) {\n". "if (!function_exists('$include_func_name')) {\n".
" function $include_func_name(\$file_name, \$def_vars, \$include_vars)\n" . " function $include_func_name(\$file_name, \$def_vars, \$include_vars)\n" .
" {\n" . " {\n" .
" extract(\$def_vars);\n" . " extract(\$def_vars);\n" .
" extract(\$include_vars);\n" . " extract(\$include_vars);\n" .
" include \"\$file_name.php\";\n" . " include \"\$file_name.php\";\n" .
" }\n" . " }\n" .
"}\n" . "}\n" .
"$include_func_name(\"$include_file_name\", get_defined_vars(), array(".implode(',', (array)$arg_list)."));\n?>"; "$include_func_name(\"$include_file_name\", get_defined_vars(), array(".implode(',', (array)$arg_list)."));\n?>";
} else
return '<?php include "'.$this->compile_dir.'/'.$attrs['file'].'.php"; ?>';
} }
/*======================================================================*\ /*======================================================================*\
@@ -463,8 +460,8 @@ class Smarty_Compiler extends Smarty {
$this->_syntax_error("missing section name"); $this->_syntax_error("missing section name");
} }
$output .= "if(isset(\$_sections[$section_name])) { unset(\$_sections[$section_name]); }\n"; $output .= "if (isset(\$_smarty_sections[$section_name])) unset(\$_smarty_sections[$section_name]);\n";
$section_props = "\$_sections[$section_name]['properties']"; $section_props = "\$_smarty_sections[$section_name]['properties']";
foreach ($attrs as $attr_name => $attr_value) { foreach ($attrs as $attr_name => $attr_value) {
switch ($attr_name) { switch ($attr_name) {
@@ -823,7 +820,7 @@ class Smarty_Compiler extends Smarty {
list($section, $section_prop) = explode('.', $section_ref); list($section, $section_prop) = explode('.', $section_ref);
if (!isset($section_prop)) if (!isset($section_prop))
$section_prop = 'index'; $section_prop = 'index';
$output .= "[\$_sections['$section']['properties']['$section_prop']]"; $output .= "[\$_smarty_sections['$section']['properties']['$section_prop']]";
} }
foreach ($props as $prop) { foreach ($props as $prop) {
$output .= "['$prop']"; $output .= "['$prop']";
@@ -844,7 +841,7 @@ class Smarty_Compiler extends Smarty {
$var_name = substr($var_ref, 1, -1); $var_name = substr($var_ref, 1, -1);
$output = "\$_config['$var_name']"; $output = "\$_smarty_config['$var_name']";
$this->_parse_modifiers($output, $modifiers); $this->_parse_modifiers($output, $modifiers);
@@ -863,7 +860,7 @@ class Smarty_Compiler extends Smarty {
$section_name = $match[1]; $section_name = $match[1];
$prop_name = $match[2]; $prop_name = $match[2];
$output = "\$_sections['$section_name']['properties']['$prop_name']"; $output = "\$_smarty_sections['$section_name']['properties']['$prop_name']";
$this->_parse_modifiers($output, $modifiers); $this->_parse_modifiers($output, $modifiers);

View File

@@ -398,13 +398,13 @@ class Smarty_Compiler extends Smarty {
$output = "<?php if (!class_exists('Config_File'))\n" . $output = "<?php if (!class_exists('Config_File'))\n" .
" include_once 'Config_File.class.php';\n" . " include_once 'Config_File.class.php';\n" .
"if (!is_object(\$_conf_obj) || get_class(\$_conf_obj) != 'config_file') {\n" . "if (!is_object(\$GLOBALS['_smarty_conf_obj']) || get_class(\$GLOBALS['_smarty_conf_obj']) != 'config_file') {\n" .
" \$_conf_obj = new Config_File('".$this->config_dir."');\n" . " \$GLOBALS['_smarty_conf_obj'] = new Config_File('".$this->config_dir."');\n" .
"}\n" . "}\n" .
"\$_config = array_merge((array)\$_config, \$_conf_obj->get(".$attrs['file']."));\n"; "\$_smarty_config = array_merge((array)\$_smarty_config, \$GLOBALS['_smarty_conf_obj']->get(".$attrs['file']."));\n";
if (!empty($attrs['section'])) if (!empty($attrs['section']))
$output .= '$_config = array_merge((array)$_config, $_conf_obj->get('.$attrs['file'].', '.$attrs['section'].')); '; $output .= '$_smarty_config = array_merge((array)$_smarty_config, $GLOBALS[\'_smarty_conf_obj\']->get('.$attrs['file'].', '.$attrs['section'].')); ';
$output .= '?>'; $output .= '?>';
@@ -424,29 +424,26 @@ class Smarty_Compiler extends Smarty {
} else } else
$attrs['file'] = $this->_dequote($attrs['file']); $attrs['file'] = $this->_dequote($attrs['file']);
if (count($attrs) > 1) { $include_func_name = uniqid("_include_");
$include_func_name = uniqid("_include_"); $include_file_name = $this->compile_dir.'/'.$attrs['file'];
$include_file_name = $this->compile_dir.'/'.$attrs['file'];
foreach ($attrs as $arg_name => $arg_value) { foreach ($attrs as $arg_name => $arg_value) {
if ($arg_name == 'file') continue; if ($arg_name == 'file') continue;
if (is_bool($arg_value)) if (is_bool($arg_value))
$arg_value = $arg_value ? 'true' : 'false'; $arg_value = $arg_value ? 'true' : 'false';
$arg_list[] = "'$arg_name' => $arg_value"; $arg_list[] = "'$arg_name' => $arg_value";
} }
return "<?php " . return "<?php " .
"if (!function_exists('$include_func_name')) {\n". "if (!function_exists('$include_func_name')) {\n".
" function $include_func_name(\$file_name, \$def_vars, \$include_vars)\n" . " function $include_func_name(\$file_name, \$def_vars, \$include_vars)\n" .
" {\n" . " {\n" .
" extract(\$def_vars);\n" . " extract(\$def_vars);\n" .
" extract(\$include_vars);\n" . " extract(\$include_vars);\n" .
" include \"\$file_name.php\";\n" . " include \"\$file_name.php\";\n" .
" }\n" . " }\n" .
"}\n" . "}\n" .
"$include_func_name(\"$include_file_name\", get_defined_vars(), array(".implode(',', (array)$arg_list)."));\n?>"; "$include_func_name(\"$include_file_name\", get_defined_vars(), array(".implode(',', (array)$arg_list)."));\n?>";
} else
return '<?php include "'.$this->compile_dir.'/'.$attrs['file'].'.php"; ?>';
} }
/*======================================================================*\ /*======================================================================*\
@@ -463,8 +460,8 @@ class Smarty_Compiler extends Smarty {
$this->_syntax_error("missing section name"); $this->_syntax_error("missing section name");
} }
$output .= "if(isset(\$_sections[$section_name])) { unset(\$_sections[$section_name]); }\n"; $output .= "if (isset(\$_smarty_sections[$section_name])) unset(\$_smarty_sections[$section_name]);\n";
$section_props = "\$_sections[$section_name]['properties']"; $section_props = "\$_smarty_sections[$section_name]['properties']";
foreach ($attrs as $attr_name => $attr_value) { foreach ($attrs as $attr_name => $attr_value) {
switch ($attr_name) { switch ($attr_name) {
@@ -823,7 +820,7 @@ class Smarty_Compiler extends Smarty {
list($section, $section_prop) = explode('.', $section_ref); list($section, $section_prop) = explode('.', $section_ref);
if (!isset($section_prop)) if (!isset($section_prop))
$section_prop = 'index'; $section_prop = 'index';
$output .= "[\$_sections['$section']['properties']['$section_prop']]"; $output .= "[\$_smarty_sections['$section']['properties']['$section_prop']]";
} }
foreach ($props as $prop) { foreach ($props as $prop) {
$output .= "['$prop']"; $output .= "['$prop']";
@@ -844,7 +841,7 @@ class Smarty_Compiler extends Smarty {
$var_name = substr($var_ref, 1, -1); $var_name = substr($var_ref, 1, -1);
$output = "\$_config['$var_name']"; $output = "\$_smarty_config['$var_name']";
$this->_parse_modifiers($output, $modifiers); $this->_parse_modifiers($output, $modifiers);
@@ -863,7 +860,7 @@ class Smarty_Compiler extends Smarty {
$section_name = $match[1]; $section_name = $match[1];
$prop_name = $match[2]; $prop_name = $match[2];
$output = "\$_sections['$section_name']['properties']['$prop_name']"; $output = "\$_smarty_sections['$section_name']['properties']['$prop_name']";
$this->_parse_modifiers($output, $modifiers); $this->_parse_modifiers($output, $modifiers);