You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

smarty_internal_parsetree_dq.php 3.2KB

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