2012-07-04 07:23:08 +02:00
< ? php
/**
* Smarty Internal Plugin Compile While
* Compiles the { while } tag
*
2014-09-07 13:38:28 +02:00
* @ package Smarty
2012-07-04 07:23:08 +02:00
* @ subpackage Compiler
2014-09-07 13:38:28 +02:00
* @ author Uwe Tews
2012-07-04 07:23:08 +02:00
*/
/**
* Smarty Internal Plugin Compile While Class
*
2014-09-07 13:38:28 +02:00
* @ package Smarty
2012-07-04 07:23:08 +02:00
* @ subpackage Compiler
*/
2014-09-07 13:38:28 +02:00
class Smarty_Internal_Compile_While extends Smarty_Internal_CompileBase
{
2012-07-04 07:23:08 +02:00
/**
* Compiles code for the { while } tag
*
2014-09-07 13:38:28 +02:00
* @ param array $args array with attributes from parser
* @ param object $compiler compiler object
* @ param array $parameter array with compilation parameter
*
2012-07-04 07:23:08 +02:00
* @ return string compiled code
*/
public function compile ( $args , $compiler , $parameter )
{
// check and get attributes
$_attr = $this -> getAttributes ( $compiler , $args );
$this -> openTag ( $compiler , 'while' , $compiler -> nocache );
2014-09-07 13:38:28 +02:00
if ( ! array_key_exists ( " if condition " , $parameter )) {
2012-07-04 07:23:08 +02:00
$compiler -> trigger_template_error ( " missing while condition " , $compiler -> lex -> taglineno );
}
// maybe nocache because of nocache variables
$compiler -> nocache = $compiler -> nocache | $compiler -> tag_nocache ;
if ( is_array ( $parameter [ 'if condition' ])) {
if ( $compiler -> nocache ) {
$_nocache = ',true' ;
// create nocache var to make it know for further compiling
if ( is_array ( $parameter [ 'if condition' ][ 'var' ])) {
$compiler -> template -> tpl_vars [ trim ( $parameter [ 'if condition' ][ 'var' ][ 'var' ], " ' " )] = new Smarty_variable ( null , true );
} else {
$compiler -> template -> tpl_vars [ trim ( $parameter [ 'if condition' ][ 'var' ], " ' " )] = new Smarty_variable ( null , true );
}
} else {
$_nocache = '' ;
}
if ( is_array ( $parameter [ 'if condition' ][ 'var' ])) {
$_output = " <?php if (!isset( \$ _smarty_tpl->tpl_vars[ " . $parameter [ 'if condition' ][ 'var' ][ 'var' ] . " ]) || !is_array( \$ _smarty_tpl->tpl_vars[ " . $parameter [ 'if condition' ][ 'var' ][ 'var' ] . " ]->value)) \$ _smarty_tpl->createLocalArrayVariable( " . $parameter [ 'if condition' ][ 'var' ][ 'var' ] . " $_nocache ); \n " ;
2014-09-07 13:38:28 +02:00
$_output .= " while ( \$ _smarty_tpl->tpl_vars[ " . $parameter [ 'if condition' ][ 'var' ][ 'var' ] . " ]->value " . $parameter [ 'if condition' ][ 'var' ][ 'smarty_internal_index' ] . " = " . $parameter [ 'if condition' ][ 'value' ] . " ) { ?> " ;
2012-07-04 07:23:08 +02:00
} else {
$_output = " <?php if (!isset( \$ _smarty_tpl->tpl_vars[ " . $parameter [ 'if condition' ][ 'var' ] . " ])) \$ _smarty_tpl->tpl_vars[ " . $parameter [ 'if condition' ][ 'var' ] . " ] = new Smarty_Variable(null { $_nocache } ); " ;
2014-09-07 13:38:28 +02:00
$_output .= " while ( \$ _smarty_tpl->tpl_vars[ " . $parameter [ 'if condition' ][ 'var' ] . " ]->value = " . $parameter [ 'if condition' ][ 'value' ] . " ) { ?> " ;
2012-07-04 07:23:08 +02:00
}
2014-09-07 13:38:28 +02:00
2012-07-04 07:23:08 +02:00
return $_output ;
} else {
2014-09-07 13:38:28 +02:00
return " <?php while ( { $parameter [ 'if condition' ] } ) { ?> " ;
2012-07-04 07:23:08 +02:00
}
}
}
/**
* Smarty Internal Plugin Compile Whileclose Class
*
2014-09-07 13:38:28 +02:00
* @ package Smarty
2012-07-04 07:23:08 +02:00
* @ subpackage Compiler
*/
2014-09-07 13:38:28 +02:00
class Smarty_Internal_Compile_Whileclose extends Smarty_Internal_CompileBase
{
2012-07-04 07:23:08 +02:00
/**
* Compiles code for the { / while } tag
*
2014-09-07 13:38:28 +02:00
* @ param array $args array with attributes from parser
* @ param object $compiler compiler object
*
2012-07-04 07:23:08 +02:00
* @ return string compiled code
*/
public function compile ( $args , $compiler )
{
// must endblock be nocache?
if ( $compiler -> nocache ) {
$compiler -> tag_nocache = true ;
}
$compiler -> nocache = $this -> closeTag ( $compiler , array ( 'while' ));
2014-09-07 13:38:28 +02:00
2012-07-04 07:23:08 +02:00
return " <?php }?> " ;
}
}