Blame | Letzte Änderung | Log anzeigen | RSS feed
<?php/*** Runtime Extension Capture** @package Smarty* @subpackage PluginsInternal* @author Uwe Tews*/class Smarty_Internal_Runtime_Capture{/*** Flag that this instance will not be cached** @var bool*/public $isPrivateExtension = true;/*** Stack of capture parameter** @var array*/private $captureStack = array();/*** Current open capture sections** @var int*/private $captureCount = 0;/*** Count stack** @var int[]*/private $countStack = array();/*** Named buffer** @var string[]*/private $namedBuffer = array();/*** Flag if callbacks are registered** @var bool*/private $isRegistered = false;/*** Open capture section** @param \Smarty_Internal_Template $_template* @param string $buffer capture name* @param string $assign variable name* @param string $append variable name*/public function open(Smarty_Internal_Template $_template, $buffer, $assign, $append){if (!$this->isRegistered) {$this->register($_template);}$this->captureStack[] = array($buffer,$assign,$append);$this->captureCount++;ob_start();}/*** Register callbacks in template class** @param \Smarty_Internal_Template $_template*/private function register(Smarty_Internal_Template $_template){$_template->startRenderCallbacks[] = array($this,'startRender');$_template->endRenderCallbacks[] = array($this,'endRender');$this->startRender($_template);$this->isRegistered = true;}/*** Start render callback** @param \Smarty_Internal_Template $_template*/public function startRender(Smarty_Internal_Template $_template){$this->countStack[] = $this->captureCount;$this->captureCount = 0;}/*** Close capture section** @param \Smarty_Internal_Template $_template** @throws \SmartyException*/public function close(Smarty_Internal_Template $_template){if ($this->captureCount) {list($buffer, $assign, $append) = array_pop($this->captureStack);$this->captureCount--;if (isset($assign)) {$_template->assign($assign, ob_get_contents());}if (isset($append)) {$_template->append($append, ob_get_contents());}$this->namedBuffer[ $buffer ] = ob_get_clean();} else {$this->error($_template);}}/*** Error exception on not matching {capture}{/capture}** @param \Smarty_Internal_Template $_template** @throws \SmartyException*/public function error(Smarty_Internal_Template $_template){throw new SmartyException("Not matching {capture}{/capture} in '{$_template->template_resource}'");}/*** Return content of named capture buffer by key or as array** @param \Smarty_Internal_Template $_template* @param string|null $name** @return string|string[]|null*/public function getBuffer(Smarty_Internal_Template $_template, $name = null){if (isset($name)) {return isset($this->namedBuffer[ $name ]) ? $this->namedBuffer[ $name ] : null;} else {return $this->namedBuffer;}}/*** End render callback** @param \Smarty_Internal_Template $_template** @throws \SmartyException*/public function endRender(Smarty_Internal_Template $_template){if ($this->captureCount) {$this->error($_template);} else {$this->captureCount = array_pop($this->countStack);}}}