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 */ 17class 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