diff options
Diffstat (limited to 'phpBB/phpbb')
| -rw-r--r-- | phpBB/phpbb/template/twig/lexer.php | 17 | ||||
| -rw-r--r-- | phpBB/phpbb/template/twig/twig.php | 4 | 
2 files changed, 11 insertions, 10 deletions
| diff --git a/phpBB/phpbb/template/twig/lexer.php b/phpBB/phpbb/template/twig/lexer.php index 4f88147542..3534311b7a 100644 --- a/phpBB/phpbb/template/twig/lexer.php +++ b/phpBB/phpbb/template/twig/lexer.php @@ -191,20 +191,18 @@ class phpbb_template_twig_lexer extends Twig_Lexer  			// Recursive...fix any child nodes  			$body = $parent_class->fix_begin_tokens($body, $parent_nodes); -			// Rename loopname vars (to prevent collisions, loop children are named (loop name)_loop_element) -			$body = str_replace($name . '.', $name . '_loop_element.', $body); -  			// Need the parent variable name  			array_pop($parent_nodes); -			$parent = (!empty($parent_nodes)) ? end($parent_nodes) . '_loop_element.' : ''; +			$parent = (!empty($parent_nodes)) ? end($parent_nodes) . '.' : '';  			if ($subset !== '')  			{  				$subset = '|subset(' . $subset . ')';  			} -			// Turn into a Twig for loop, using (loop name)_loop_element for each child -			return "{% for {$name}_loop_element in {$parent}{$name}{$subset} %}{$body}{% endfor %}"; +			$parent = ($parent) ?: 'loops.'; +			// Turn into a Twig for loop +			return "{% for {$name} in {$parent}{$name}{$subset} %}{$body}{% endfor %}";  		};  		// Replace <!-- BEGINELSE --> correctly, only needs to be done once @@ -227,8 +225,11 @@ class phpbb_template_twig_lexer extends Twig_Lexer  			// Replace $TEST with definition.TEST  			$inner = preg_replace('#\s\$([a-zA-Z_0-9]+)#', ' definition.$1', $inner); -			// Replace .test with test|length -			$inner = preg_replace('#\s\.([a-zA-Z_0-9\.]+)#', ' $1|length', $inner); +			// Replace .foo with loops.foo|length +			$inner = preg_replace('#\s\.([a-zA-Z_0-9]+)([^a-zA-Z_0-9\.])#', ' loops.$1|length$2', $inner); + +			// Replace .foo.bar with foo.bar|length +			$inner = preg_replace('#\s\.([a-zA-Z_0-9\.]+)([^a-zA-Z_0-9\.])#', ' $1|length$2', $inner);  			return "<!-- {$matches[1]}IF{$inner}-->";  		}; diff --git a/phpBB/phpbb/template/twig/twig.php b/phpBB/phpbb/template/twig/twig.php index 92a37d1634..6cff1bb8e4 100644 --- a/phpBB/phpbb/template/twig/twig.php +++ b/phpBB/phpbb/template/twig/twig.php @@ -429,15 +429,15 @@ class phpbb_template_twig implements phpbb_template  		$vars = array_merge(  			$context_vars['.'][0], // To get normal vars -			$context_vars, // To get loops  			array(  				'definition'	=> new phpbb_template_twig_definition(),  				'user'			=> $this->user, +				'loops'			=> $context_vars, // To get loops  			)  		);  		// cleanup -		unset($vars['.']); +		unset($vars['loops']['.']);  		return $vars;  	} | 
