A super easy PHP Framework for web development!
				https://github.com/exacti/phacil-framework
			
			
		
			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.
		
		
		
		
			
				
					101 lines
				
				3.7 KiB
			
		
		
			
		
	
	
					101 lines
				
				3.7 KiB
			| 
								 
											7 years ago
										 
									 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Smarty Internal Plugin Compile While
							 | 
						||
| 
								 | 
							
								 * Compiles the {while} tag
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @package    Smarty
							 | 
						||
| 
								 | 
							
								 * @subpackage Compiler
							 | 
						||
| 
								 | 
							
								 * @author     Uwe Tews
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Smarty Internal Plugin Compile While Class
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @package    Smarty
							 | 
						||
| 
								 | 
							
								 * @subpackage Compiler
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								class Smarty_Internal_Compile_While extends Smarty_Internal_CompileBase
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Compiles code for the {while} tag
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param  array                                $args      array with attributes from parser
							 | 
						||
| 
								 | 
							
								     * @param \Smarty_Internal_TemplateCompilerBase $compiler  compiler object
							 | 
						||
| 
								 | 
							
								     * @param  array                                $parameter array with compilation parameter
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return string compiled code
							 | 
						||
| 
								 | 
							
								     * @throws \SmartyCompilerException
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $compiler->loopNesting ++;
							 | 
						||
| 
								 | 
							
								        // check and get attributes
							 | 
						||
| 
								 | 
							
								        $_attr = $this->getAttributes($compiler, $args);
							 | 
						||
| 
								 | 
							
								        $this->openTag($compiler, 'while', $compiler->nocache);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (!array_key_exists('if condition', $parameter)) {
							 | 
						||
| 
								 | 
							
								            $compiler->trigger_template_error('missing while condition', null, true);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // maybe nocache because of nocache variables
							 | 
						||
| 
								 | 
							
								        $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
							 | 
						||
| 
								 | 
							
								        if (is_array($parameter[ 'if condition' ])) {
							 | 
						||
| 
								 | 
							
								            if ($compiler->nocache) {
							 | 
						||
| 
								 | 
							
								                // create nocache var to make it know for further compiling
							 | 
						||
| 
								 | 
							
								                if (is_array($parameter[ 'if condition' ][ 'var' ])) {
							 | 
						||
| 
								 | 
							
								                    $var = $parameter[ 'if condition' ][ 'var' ][ 'var' ];
							 | 
						||
| 
								 | 
							
								                } else {
							 | 
						||
| 
								 | 
							
								                    $var = $parameter[ 'if condition' ][ 'var' ];
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                $compiler->setNocacheInVariable($var);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            $prefixVar = $compiler->getNewPrefixVariable();
							 | 
						||
| 
								 | 
							
								            $assignCompiler = new Smarty_Internal_Compile_Assign();
							 | 
						||
| 
								 | 
							
								            $assignAttr = array();
							 | 
						||
| 
								 | 
							
								            $assignAttr[][ 'value' ] = $prefixVar;
							 | 
						||
| 
								 | 
							
								            if (is_array($parameter[ 'if condition' ][ 'var' ])) {
							 | 
						||
| 
								 | 
							
								                $assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ][ 'var' ];
							 | 
						||
| 
								 | 
							
								                $_output = "<?php while ({$prefixVar} = {$parameter[ 'if condition' ][ 'value' ]}) {?>";
							 | 
						||
| 
								 | 
							
								                $_output .= $assignCompiler->compile($assignAttr, $compiler,
							 | 
						||
| 
								 | 
							
								                                                     array('smarty_internal_index' => $parameter[ 'if condition' ][ 'var' ][ 'smarty_internal_index' ]));
							 | 
						||
| 
								 | 
							
								            } else {
							 | 
						||
| 
								 | 
							
								                $assignAttr[][ 'var' ] = $parameter[ 'if condition' ][ 'var' ];
							 | 
						||
| 
								 | 
							
								                $_output = "<?php while ({$prefixVar} = {$parameter[ 'if condition' ][ 'value' ]}) {?>";
							 | 
						||
| 
								 | 
							
								                $_output .= $assignCompiler->compile($assignAttr, $compiler, array());
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            return $_output;
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            return "<?php\n while ({$parameter['if condition']}) {?>";
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Smarty Internal Plugin Compile Whileclose Class
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @package    Smarty
							 | 
						||
| 
								 | 
							
								 * @subpackage Compiler
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								class Smarty_Internal_Compile_Whileclose extends Smarty_Internal_CompileBase
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Compiles code for the {/while} tag
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param  array                                $args     array with attributes from parser
							 | 
						||
| 
								 | 
							
								     * @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return string compiled code
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $compiler->loopNesting --;
							 | 
						||
| 
								 | 
							
								        // must endblock be nocache?
							 | 
						||
| 
								 | 
							
								        if ($compiler->nocache) {
							 | 
						||
| 
								 | 
							
								            $compiler->tag_nocache = true;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $compiler->nocache = $this->closeTag($compiler, array('while'));
							 | 
						||
| 
								 | 
							
								        return "<?php }?>\n";
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |