1: <?php
2: /**
3: * Smarty Internal Plugin Compile Eval
4: * Compiles the {eval} tag.
5: *
6: * @package Smarty
7: * @subpackage Compiler
8: * @author Uwe Tews
9: */
10:
11: /**
12: * Smarty Internal Plugin Compile Eval Class
13: *
14: * @package Smarty
15: * @subpackage Compiler
16: */
17: class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase
18: {
19: /**
20: * Attribute definition: Overwrites base class.
21: *
22: * @var array
23: * @see Smarty_Internal_CompileBase
24: */
25: public $required_attributes = array('var');
26: /**
27: * Attribute definition: Overwrites base class.
28: *
29: * @var array
30: * @see Smarty_Internal_CompileBase
31: */
32: public $optional_attributes = array('assign');
33: /**
34: * Attribute definition: Overwrites base class.
35: *
36: * @var array
37: * @see Smarty_Internal_CompileBase
38: */
39: public $shorttag_order = array('var', 'assign');
40:
41: /**
42: * Compiles code for the {eval} tag
43: *
44: * @param array $args array with attributes from parser
45: * @param object $compiler compiler object
46: *
47: * @return string compiled code
48: */
49: public function compile($args, $compiler)
50: {
51: $this->required_attributes = array('var');
52: $this->optional_attributes = array('assign');
53: // check and get attributes
54: $_attr = $this->getAttributes($compiler, $args);
55: if (isset($_attr['assign'])) {
56: // output will be stored in a smarty variable instead of being displayed
57: $_assign = $_attr['assign'];
58: }
59:
60: // create template object
61: $_output = "\$_template = new {$compiler->smarty->template_class}('eval:'." . $_attr['var'] . ", \$_smarty_tpl->smarty, \$_smarty_tpl);";
62: //was there an assign attribute?
63: if (isset($_assign)) {
64: $_output .= "\$_smarty_tpl->assign($_assign,\$_template->fetch());";
65: } else {
66: $_output .= "echo \$_template->fetch();";
67: }
68:
69: return "<?php $_output ?>";
70: }
71: }
72: