Вход Регистрация
Файл: app/lib/smarty/sysplugins/smarty_internal_compile_private_print_expression.php
Строк: 124
<?php
/**
 * Smarty Internal Plugin Compile Print Expression
 * Compiles any tag which will output an expression or variable
 *
 * @package    Smarty
 * @subpackage Compiler
 * @author     Uwe Tews
 */

/**
 * Smarty Internal Plugin Compile Print Expression Class
 *
 * @package    Smarty
 * @subpackage Compiler
 */
class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_CompileBase
{
    
/**
     * Attribute definition: Overwrites base class.
     *
     * @var array
     * @see Smarty_Internal_CompileBase
     */
    
public $optional_attributes = array('assign');
    
/**
     * Attribute definition: Overwrites base class.
     *
     * @var array
     * @see Smarty_Internal_CompileBase
     */
    
public $option_flags = array('nocache''nofilter');

    
/**
     * Compiles code for generating output from any expression
     *
     * @param array  $args      array with attributes from parser
     * @param object $compiler  compiler object
     * @param array  $parameter array with compilation parameter
     *
     * @throws SmartyException
     * @return string compiled code
     */
    
public function compile($args$compiler$parameter)
    {
        
// check and get attributes
        
$_attr $this->getAttributes($compiler$args);
        
// nocache option
        
if ($_attr['nocache'] === true) {
            
$compiler->tag_nocache true;
        }
        if (isset(
$_attr['assign'])) {
            
// assign output to variable
            
$output "<?php $_smarty_tpl->assign({$_attr['assign']},{$parameter['value']});?>";
        } else {
            
// display value
            
$output $parameter['value'];
            
// tag modifier
            
if (!empty($parameter['modifierlist'])) {
                
$output $compiler->compileTag('private_modifier', array(), array('modifierlist' => $parameter['modifierlist'], 'value' => $output));
            }
            if (!
$_attr['nofilter']) {
                
// default modifier
                
if (!empty($compiler->smarty->default_modifiers)) {
                    if (empty(
$compiler->default_modifier_list)) {
                        
$modifierlist = array();
                        foreach (
$compiler->smarty->default_modifiers as $key => $single_default_modifier) {
                            
preg_match_all('/('[^'\\]*(?:\\.[^'\\]*)*'|"[^"\\]*(?:\\.[^"\\]*)*"|:|[^:]+)/'$single_default_modifier$mod_array);
                            for (
$i 0$count count($mod_array[0]); $i $count$i ++) {
                                if (
$mod_array[0][$i] != ':') {
                                    
$modifierlist[$key][] = $mod_array[0][$i];
                                }
                            }
                        }
                        
$compiler->default_modifier_list $modifierlist;
                    }
                    
$output $compiler->compileTag('private_modifier', array(), array('modifierlist' => $compiler->default_modifier_list'value' => $output));
                }
                
// autoescape html
                
if ($compiler->template->smarty->escape_html) {
                    
$output "htmlspecialchars({$output}, ENT_QUOTES, '" addslashes(Smarty::$_CHARSET) . "')";
                }
                
// loop over registered filters
                
if (!empty($compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE])) {
                    foreach (
$compiler->template->smarty->registered_filters[Smarty::FILTER_VARIABLE] as $key => $function) {
                        if (!
is_array($function)) {
                            
$output "{$function}({$output},$_smarty_tpl)";
                        } elseif (
is_object($function[0])) {
                            
$output "$_smarty_tpl->smarty->registered_filters[Smarty::FILTER_VARIABLE]['{$key}'][0]->{$function[1]}({$output},$_smarty_tpl)";
                        } else {
                            
$output "{$function[0]}::{$function[1]}({$output},$_smarty_tpl)";
                        }
                    }
                }
                
// auto loaded filters
                
if (isset($compiler->smarty->autoload_filters[Smarty::FILTER_VARIABLE])) {
                    foreach ((array) 
$compiler->template->smarty->autoload_filters[Smarty::FILTER_VARIABLE] as $name) {
                        
$result $this->compile_output_filter($compiler$name$output);
                        if (
$result !== false) {
                            
$output $result;
                        } else {
                            
// not found, throw exception
                            
throw new SmartyException("Unable to load filter '{$name}'");
                        }
                    }
                }
                if (isset(
$compiler->template->variable_filters)) {
                    foreach (
$compiler->template->variable_filters as $filter) {
                        if (
count($filter) == && ($result $this->compile_output_filter($compiler$filter[0], $output)) !== false) {
                            
$output $result;
                        } else {
                            
$output $compiler->compileTag('private_modifier', array(), array('modifierlist' => array($filter), 'value' => $output));
                        }
                    }
                }
            }

            
$compiler->has_output true;
            
$output "<?php echo {$output};?>";
        }

        return 
$output;
    }

    
/**
     * @param object $compiler compiler object
     * @param string $name     name of variable filter
     * @param string   $output   embedded output
     *
     * @return string
     */
    
private function compile_output_filter($compiler$name$output)
    {
        
$plugin_name "smarty_variablefilter_{$name}";
        
$path $compiler->smarty->loadPlugin($plugin_namefalse);
        if (
$path) {
            if (
$compiler->template->caching) {
                
$compiler->template->required_plugins['nocache'][$name][Smarty::FILTER_VARIABLE]['file'] = $path;
                
$compiler->template->required_plugins['nocache'][$name][Smarty::FILTER_VARIABLE]['function'] = $plugin_name;
            } else {
                
$compiler->template->required_plugins['compiled'][$name][Smarty::FILTER_VARIABLE]['file'] = $path;
                
$compiler->template->required_plugins['compiled'][$name][Smarty::FILTER_VARIABLE]['function'] = $plugin_name;
            }
        } else {
            
// not found
            
return false;
        }

        return 
"{$plugin_name}({$output},$_smarty_tpl)";
    }
}
Онлайн: 1
Реклама