1<?php 2 3/** 4 * Double quoted string inside a tag. 5 * 6 * @package Smarty 7 * @subpackage Compiler 8 * @ignore 9 */ 10 11/** 12 * Double quoted string inside a tag. 13 * 14 * @package Smarty 15 * @subpackage Compiler 16 * @ignore 17 */ 18class Smarty_Internal_ParseTree_Dq extends Smarty_Internal_ParseTree 19{ 20 /** 21 * Create parse tree buffer for double quoted string subtrees 22 * 23 * @param object $parser parser object 24 * @param Smarty_Internal_ParseTree $subtree parse tree buffer 25 */ 26 public function __construct($parser, Smarty_Internal_ParseTree $subtree) 27 { 28 $this->subtrees[] = $subtree; 29 if ($subtree instanceof Smarty_Internal_ParseTree_Tag) { 30 $parser->block_nesting_level = count($parser->compiler->_tag_stack); 31 } 32 } 33 34 /** 35 * Append buffer to subtree 36 * 37 * @param \Smarty_Internal_Templateparser $parser 38 * @param Smarty_Internal_ParseTree $subtree parse tree buffer 39 */ 40 public function append_subtree(Smarty_Internal_Templateparser $parser, Smarty_Internal_ParseTree $subtree) 41 { 42 $last_subtree = count($this->subtrees) - 1; 43 if ($last_subtree >= 0 && $this->subtrees[ $last_subtree ] instanceof Smarty_Internal_ParseTree_Tag && 44 $this->subtrees[ $last_subtree ]->saved_block_nesting < $parser->block_nesting_level 45 ) { 46 if ($subtree instanceof Smarty_Internal_ParseTree_Code) { 47 $this->subtrees[ $last_subtree ]->data = 48 $parser->compiler->appendCode($this->subtrees[ $last_subtree ]->data, 49 '<?php echo ' . $subtree->data . ';?>'); 50 } elseif ($subtree instanceof Smarty_Internal_ParseTree_DqContent) { 51 $this->subtrees[ $last_subtree ]->data = 52 $parser->compiler->appendCode($this->subtrees[ $last_subtree ]->data, 53 '<?php echo "' . $subtree->data . '";?>'); 54 } else { 55 $this->subtrees[ $last_subtree ]->data = 56 $parser->compiler->appendCode($this->subtrees[ $last_subtree ]->data, $subtree->data); 57 } 58 } else { 59 $this->subtrees[] = $subtree; 60 } 61 if ($subtree instanceof Smarty_Internal_ParseTree_Tag) { 62 $parser->block_nesting_level = count($parser->compiler->_tag_stack); 63 } 64 } 65 66 /** 67 * Merge subtree buffer content together 68 * 69 * @param \Smarty_Internal_Templateparser $parser 70 * 71 * @return string compiled template code 72 */ 73 public function to_smarty_php(Smarty_Internal_Templateparser $parser) 74 { 75 $code = ''; 76 foreach ($this->subtrees as $subtree) { 77 if ($code !== "") { 78 $code .= "."; 79 } 80 if ($subtree instanceof Smarty_Internal_ParseTree_Tag) { 81 $more_php = $subtree->assign_to_var($parser); 82 } else { 83 $more_php = $subtree->to_smarty_php($parser); 84 } 85 86 $code .= $more_php; 87 88 if (!$subtree instanceof Smarty_Internal_ParseTree_DqContent) { 89 $parser->compiler->has_variable_string = true; 90 } 91 } 92 93 return $code; 94 } 95} 96