/** * compile template from source * * @param Smarty_Internal_Template $_smarty_tpl do not change variable name, is used by compiled template * * @throws Exception */ public function process(Smarty_Internal_Template $_smarty_tpl) { $compiled =& $_smarty_tpl->compiled; $compiled->file_dependency = array(); $compiled->includes = array(); $compiled->nocache_hash = null; $compiled->unifunc = null; $level = ob_get_level(); ob_start(); $_smarty_tpl->loadCompiler(); // call compiler try { eval("?>" . $_smarty_tpl->compiler->compileTemplate($_smarty_tpl)); } catch (Exception $e) { unset($_smarty_tpl->compiler); while (ob_get_level() > $level) { ob_end_clean(); } throw $e; } // release compiler object to free memory unset($_smarty_tpl->compiler); ob_get_clean(); $compiled->timestamp = time(); $compiled->exists = true; }
/** * compile template from source * * @param Smarty_Internal_Template $_template * * @return string * @throws Exception */ public function compileTemplateSource(Smarty_Internal_Template $_template) { $this->file_dependency = array(); $this->includes = array(); $this->nocache_hash = null; $this->unifunc = null; // compile locking if (!$_template->source->handler->recompiled) { if ($saved_timestamp = $this->getTimeStamp()) { touch($this->filepath); } } // call compiler try { $_template->loadCompiler(); $code = $_template->compiler->compileTemplate($_template); } catch (Exception $e) { // restore old timestamp in case of error if (!$_template->source->handler->recompiled && $saved_timestamp) { touch($this->filepath, $saved_timestamp); } throw $e; } // compiling succeeded if ($_template->compiler->write_compiled_code) { // write compiled template $this->write($_template, $code); $code = ''; } // release compiler object to free memory unset($_template->compiler); return $code; }
/** * Compile inline sub template * * @param \Smarty_Internal_SmartyTemplateCompiler $compiler * @param \Smarty_Internal_Template $tpl * @param string $t_hash * * @return bool */ public function compileInlineTemplate(Smarty_Internal_SmartyTemplateCompiler $compiler, Smarty_Internal_Template $tpl, $t_hash) { $uid = $tpl->source->type . $tpl->source->uid; if (!$tpl->source->handler->uncompiled && $tpl->source->exists) { $compiler->parent_compiler->mergedSubTemplatesData[$uid][$t_hash]['uid'] = $tpl->source->uid; if (isset($compiler->template->inheritance)) { $tpl->inheritance = clone $compiler->template->inheritance; } $tpl->compiled = new Smarty_Template_Compiled(); $tpl->compiled->nocache_hash = $compiler->parent_compiler->template->compiled->nocache_hash; $tpl->loadCompiler(); // save unique function name $compiler->parent_compiler->mergedSubTemplatesData[$uid][$t_hash]['func'] = $tpl->compiled->unifunc = 'content_' . str_replace(array('.', ','), '_', uniqid('', true)); // make sure whole chain gets compiled $tpl->mustCompile = true; $compiler->parent_compiler->mergedSubTemplatesData[$uid][$t_hash]['nocache_hash'] = $tpl->compiled->nocache_hash; if ($compiler->template->source->type == 'file') { $sourceInfo = $compiler->template->source->filepath; } else { $basename = $compiler->template->source->handler->getBasename($compiler->template->source); $sourceInfo = $compiler->template->source->type . ':' . ($basename ? $basename : $compiler->template->source->name); } // get compiled code $compiled_code = "<?php\n\n"; $compiled_code .= "/* Start inline template \"{$sourceInfo}\" =============================*/\n"; $compiled_code .= "function {$tpl->compiled->unifunc} (\$_smarty_tpl) {\n"; $compiled_code .= "?>\n" . $tpl->compiler->compileTemplateSource($tpl, null, $compiler->parent_compiler); $compiled_code .= "<?php\n"; $compiled_code .= "}\n?>\n"; $compiled_code .= $tpl->compiler->postFilter($tpl->compiler->blockOrFunctionCode); $compiled_code .= "<?php\n\n"; $compiled_code .= "/* End inline template \"{$sourceInfo}\" =============================*/\n"; $compiled_code .= "?>"; unset($tpl->compiler); if ($tpl->compiled->has_nocache_code) { // replace nocache_hash $compiled_code = str_replace("{$tpl->compiled->nocache_hash}", $compiler->template->compiled->nocache_hash, $compiled_code); $compiler->template->compiled->has_nocache_code = true; } $compiler->parent_compiler->mergedSubTemplatesCode[$tpl->compiled->unifunc] = $compiled_code; return true; } else { return false; } }
/** * compile template from source * * @param Smarty_Internal_Template $_template * * @return string * @throws Exception */ public function compileTemplateSource(Smarty_Internal_Template $_template) { // compile locking if (!$_template->source->recompiled) { if ($saved_timestamp = $_template->compiled->timestamp) { touch($_template->compiled->filepath); } } $level = ob_get_level(); try { $_template->loadCompiler(); $code = $_template->compiler->compileTemplate($_template); } catch (Exception $e) { $_template->context = null; while (ob_get_level() > $level) { ob_end_clean(); } // restore old timestamp in case of error if (!$_template->source->recompiled && $saved_timestamp) { touch($_template->compiled->filepath, $saved_timestamp); } throw $e; } // compiling succeeded if ($_template->compiler->write_compiled_code) { // write compiled template $this->write($_template, $code); $code = ''; } // release compiler object to free memory unset($_template->compiler); return $code; }
/** * compile template from source * * @param Smarty_Internal_Template $_template * * @throws Exception */ public function compileTemplateSource(Smarty_Internal_Template $_template) { $this->file_dependency = array(); $this->includes = array(); $this->nocache_hash = null; $this->unifunc = null; // compile locking $saved_timestamp = $_template->source->handler->recompiled ? false : $this->getTimeStamp(); if ($saved_timestamp) { touch($this->filepath); } // compile locking try { // call compiler $_template->loadCompiler(); $this->write($_template, $_template->compiler->compileTemplate($_template)); } catch (Exception $e) { // restore old timestamp in case of error if ($saved_timestamp) { touch($this->filepath, $saved_timestamp); } unset($_template->compiler); throw $e; } // release compiler object to free memory unset($_template->compiler); }
/** * compile template from source * * @param Smarty_Internal_Template $_template * * @throws Exception */ public function compileTemplateSource(Smarty_Internal_Template $_template) { $this->file_dependency = array(); $this->includes = array(); $this->nocache_hash = null; $this->unifunc = null; // compile locking if ($saved_timestamp = $this->getTimeStamp()) { touch($this->filepath); } // call compiler $_template->loadCompiler(); $this->write($_template, $_template->compiler->compileTemplate($_template)); // release compiler object to free memory unset($_template->compiler); }