// require_once PHPTAL_DIR.'PHPTAL/Php/Attribute.php'; // TAL Specifications 1.4 // // argument ::= (['text'] | 'structure') expression // // Default behaviour : text // // Title // Title // // This element is a comment. // require_once PHPTAL_DIR.'PHPTAL/Php/TalesChainExecutor.php'; /** * @package phptal.php.attribute.tal * @author Laurent Bedubourg */ class PHPTAL_Php_Attribute_TAL_Replace extends PHPTAL_Php_Attribute implements PHPTAL_Php_TalesChainReader { const REPLACE_VAR = '$__replace__'; public function start() { // tal:replace="" => do nothing and ignore node if (trim($this->expression) == ""){ return; } $expression = $this->extractEchoType($this->expression); $code = $this->tag->generator->evaluateExpression($expression); // chained expression if (is_array($code)){ return $this->replaceByChainedExpression($code); } // nothing do nothing if ($code == PHPTAL_TALES_NOTHING_KEYWORD) { return; } // default generate default tag content if ($code == PHPTAL_TALES_DEFAULT_KEYWORD) { return $this->generateDefault(); } // replace tag with result of expression $this->doEcho($code); } public function end() { } private function replaceByChainedExpression($expArray) { $executor = new PHPTAL_Php_TalesChainExecutor( $this->tag->generator, $expArray, $this ); } public function talesChainNothingKeyword(PHPTAL_Php_TalesChainExecutor $executor) { $executor->continueChain(); } public function talesChainDefaultKeyword(PHPTAL_Php_TalesChainExecutor $executor) { $executor->doElse(); $this->generateDefault(); $executor->breakChain(); } public function talesChainPart(PHPTAL_Php_TalesChainExecutor $executor, $exp, $islast) { $executor->doIf('!phptal_isempty('.self::REPLACE_VAR.' = '.$exp.')'); $this->doEcho(self::REPLACE_VAR); } private function generateDefault() { $this->tag->generateSurroundHead(); $this->tag->generateHead(); $this->tag->generateContent(); $this->tag->generateFoot(); $this->tag->generateSurroundFoot(); } } ?>