Blame | Letzte Änderung | Log anzeigen | RSS feed
<?php/*** Smarty Internal Plugin Compile Insert* Compiles the {insert} tag** @package Smarty* @subpackage Compiler* @author Uwe Tews*//*** Smarty Internal Plugin Compile Insert Class** @package Smarty* @subpackage Compiler*/class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase{/*** Attribute definition: Overwrites base class.** @var array* @see Smarty_Internal_CompileBase*/public $required_attributes = array('name');/*** Attribute definition: Overwrites base class.** @var array* @see Smarty_Internal_CompileBase*/public $shorttag_order = array('name');/*** Attribute definition: Overwrites base class.** @var array* @see Smarty_Internal_CompileBase*/public $optional_attributes = array('_any');/*** Compiles code for the {insert} tag** @param array $args array with attributes from parser* @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object** @return string compiled code* @throws \SmartyCompilerException* @throws \SmartyException*/public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler){// check and get attributes$_attr = $this->getAttributes($compiler, $args);$nocacheParam = $compiler->template->caching && ($compiler->tag_nocache || $compiler->nocache);if (!$nocacheParam) {// do not compile as nocache code$compiler->suppressNocacheProcessing = true;}$compiler->tag_nocache = true;$_smarty_tpl = $compiler->template;$_name = null;$_script = null;$_output = '<?php ';// save possible attributeseval('$_name = @' . $_attr[ 'name' ] . ';');if (isset($_attr[ 'assign' ])) {// output will be stored in a smarty variable instead of being displayed$_assign = $_attr[ 'assign' ];// create variable to make sure that the compiler knows about its nocache status$var = trim($_attr[ 'assign' ], '\'');if (isset($compiler->template->tpl_vars[ $var ])) {$compiler->template->tpl_vars[ $var ]->nocache = true;} else {$compiler->template->tpl_vars[ $var ] = new Smarty_Variable(null, true);}}if (isset($_attr[ 'script' ])) {// script which must be included$_function = "smarty_insert_{$_name}";$_smarty_tpl = $compiler->template;$_filepath = false;eval('$_script = @' . $_attr[ 'script' ] . ';');if (!isset($compiler->smarty->security_policy) && file_exists($_script)) {$_filepath = $_script;} else {if (isset($compiler->smarty->security_policy)) {$_dir = $compiler->smarty->security_policy->trusted_dir;} else {$_dir = null;}if (!empty($_dir)) {foreach ((array)$_dir as $_script_dir) {$_script_dir = rtrim($_script_dir ?? '', '/\\') . DIRECTORY_SEPARATOR;if (file_exists($_script_dir . $_script)) {$_filepath = $_script_dir . $_script;break;}}}}if ($_filepath === false) {$compiler->trigger_template_error("{insert} missing script file '{$_script}'", null, true);}// code for script file loading$_output .= "require_once '{$_filepath}' ;";include_once $_filepath;if (!is_callable($_function)) {$compiler->trigger_template_error(" {insert} function '{$_function}' is not callable in script file '{$_script}'",null,true);}} else {$_filepath = 'null';$_function = "insert_{$_name}";// function in PHP script ?if (!is_callable($_function)) {// try pluginif (!$_function = $compiler->getPlugin($_name, 'insert')) {$compiler->trigger_template_error("{insert} no function or plugin found for '{$_name}'",null,true);}}}// delete {insert} standard attributesunset($_attr[ 'name' ], $_attr[ 'assign' ], $_attr[ 'script' ], $_attr[ 'nocache' ]);// convert attributes into parameter array string$_paramsArray = array();foreach ($_attr as $_key => $_value) {$_paramsArray[] = "'$_key' => $_value";}$_params = 'array(' . implode(", ", $_paramsArray) . ')';// call insertif (isset($_assign)) {if ($_smarty_tpl->caching && !$nocacheParam) {$_output .= "echo Smarty_Internal_Nocache_Insert::compile ('{$_function}',{$_params}, \$_smarty_tpl, '{$_filepath}',{$_assign});?>";} else {$_output .= "\$_smarty_tpl->assign({$_assign} , {$_function} ({$_params},\$_smarty_tpl), true);?>";}} else {if ($_smarty_tpl->caching && !$nocacheParam) {$_output .= "echo Smarty_Internal_Nocache_Insert::compile ('{$_function}',{$_params}, \$_smarty_tpl, '{$_filepath}');?>";} else {$_output .= "echo {$_function}({$_params},\$_smarty_tpl);?>";}}$compiler->template->compiled->has_nocache_code = true;return $_output;}}