mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-08 04:18:52 +00:00
[ticket/13132] Twig: Add loops content to the root context
PHPBB3-13132
This commit is contained in:
parent
70990bc86f
commit
cf39cfc593
18 changed files with 335 additions and 3 deletions
|
@ -352,6 +352,12 @@ class twig extends \phpbb\template\base
|
|||
// cleanup
|
||||
unset($vars['loops']['.']);
|
||||
|
||||
// Inject in the main context the value added by assign_block_vars() to be able to use directly the Twig loops.
|
||||
foreach ($vars['loops'] as $key => &$value)
|
||||
{
|
||||
$vars[$key] = $value;
|
||||
}
|
||||
|
||||
return $vars;
|
||||
}
|
||||
|
||||
|
|
|
@ -129,6 +129,34 @@ class phpbb_template_template_test extends phpbb_template_template_test_case
|
|||
array(),
|
||||
"loop\nloop\nloop\nloop\nloop#0-block#0\nloop#0-block#1\nloop#1-block#0\nloop#1-block#1",
|
||||
),
|
||||
array(
|
||||
'loop_twig.html',
|
||||
array(),
|
||||
array(),
|
||||
array(),
|
||||
"noloop\nnoloop",
|
||||
),
|
||||
array(
|
||||
'loop_twig.html',
|
||||
array(),
|
||||
array('test_loop' => array(array())),
|
||||
array(),
|
||||
"loop\nloop",
|
||||
),
|
||||
array(
|
||||
'loop_twig.html',
|
||||
array(),
|
||||
array('test_loop' => array(array(), array()), 'test_loop.block' => array(array())),
|
||||
array(),
|
||||
"loop\nloop\nloop\nloop",
|
||||
),
|
||||
array(
|
||||
'loop_twig.html',
|
||||
array(),
|
||||
array('test_loop' => array(array(), array()), 'test_loop.block' => array(array()), 'block' => array(array(), array())),
|
||||
array(),
|
||||
"loop\nloop\nloop\nloop\nloop#0-block#0\nloop#0-block#1\nloop#1-block#0\nloop#1-block#1",
|
||||
),
|
||||
array(
|
||||
'loop_vars.html',
|
||||
array(),
|
||||
|
@ -150,6 +178,27 @@ class phpbb_template_template_test extends phpbb_template_template_test_case
|
|||
array(),
|
||||
"first\n0 - a\nx - b\nset\n1 - a\ny - b\nset\nlast\n0 - c\n1 - c\nlast inner",
|
||||
),
|
||||
array(
|
||||
'loop_vars_twig.html',
|
||||
array(),
|
||||
array('test_loop' => array(array('VARIABLE' => 'x'))),
|
||||
array(),
|
||||
"first\n0 - a\nx - b\nset\nlast",
|
||||
),
|
||||
array(
|
||||
'loop_vars_twig.html',
|
||||
array(),
|
||||
array('test_loop' => array(array('VARIABLE' => 'x'), array('VARIABLE' => 'y'))),
|
||||
array(),
|
||||
"first\n0 - a\nx - b\nset\n1 - a\ny - b\nset\nlast",
|
||||
),
|
||||
array(
|
||||
'loop_vars_twig.html',
|
||||
array(),
|
||||
array('test_loop' => array(array('VARIABLE' => 'x'), array('VARIABLE' => 'y')), 'test_loop.inner' => array(array(), array())),
|
||||
array(),
|
||||
"first\n0 - a\nx - b\nset\n1 - a\ny - b\nset\nlast\n0 - c\n1 - c\nlast inner",
|
||||
),
|
||||
array(
|
||||
'loop_advanced.html',
|
||||
array(),
|
||||
|
@ -157,6 +206,13 @@ class phpbb_template_template_test extends phpbb_template_template_test_case
|
|||
array(),
|
||||
"101234561\nx\n101234561\nx\n101234561\nx\n1234561\nx\n1\nx\n101\nx\n234\nx\n10\nx\n561\nx\n561",
|
||||
),
|
||||
array(
|
||||
'loop_advanced_twig.html',
|
||||
array(),
|
||||
array('test_loop' => array(array(), array(), array(), array(), array(), array(), array())),
|
||||
array(),
|
||||
"101234561\nx\n101234561\nx\n101234561\nx\n1234561\nx\n1\nx\n101\nx\n234\nx\n10\nx\n561\nx\n561",
|
||||
),
|
||||
array(
|
||||
'loop_nested2.html',
|
||||
array(),
|
||||
|
@ -164,6 +220,13 @@ class phpbb_template_template_test extends phpbb_template_template_test_case
|
|||
array(),
|
||||
"o0o1m01m11",
|
||||
),
|
||||
array(
|
||||
'loop_nested2_twig.html',
|
||||
array(),
|
||||
array('outer' => array(array(), array()), 'outer.middle' => array(array(), array())),
|
||||
array(),
|
||||
"o0o1m01m11",
|
||||
),
|
||||
array(
|
||||
'define.html',
|
||||
array(),
|
||||
|
@ -243,6 +306,13 @@ class phpbb_template_template_test extends phpbb_template_template_test_case
|
|||
array('test_loop'),
|
||||
'',
|
||||
),
|
||||
array(
|
||||
'loop_vars_twig.html',
|
||||
array(),
|
||||
array('test_loop' => array(array('VARIABLE' => 'x'), array('VARIABLE' => 'y')), 'test_loop.inner' => array(array(), array())),
|
||||
array('test_loop'),
|
||||
'',
|
||||
),
|
||||
array(
|
||||
'include_define_variable.html',
|
||||
array('VARIABLE' => 'variable.html'),
|
||||
|
@ -274,6 +344,15 @@ class phpbb_template_template_test extends phpbb_template_template_test_case
|
|||
array(),
|
||||
"noloop\nnoloop",
|
||||
),
|
||||
array(
|
||||
// Just like a regular loop but the name begins
|
||||
// with an underscore
|
||||
'loop_underscore_twig.html',
|
||||
array(),
|
||||
array(),
|
||||
array(),
|
||||
"noloop\nnoloop",
|
||||
),
|
||||
array(
|
||||
'lang.html',
|
||||
array(),
|
||||
|
@ -296,6 +375,13 @@ class phpbb_template_template_test extends phpbb_template_template_test_case
|
|||
array(),
|
||||
"top-level content",
|
||||
),
|
||||
array(
|
||||
'loop_nested_multilevel_ref_twig.html',
|
||||
array(),
|
||||
array(),
|
||||
array(),
|
||||
"top-level content",
|
||||
),
|
||||
array(
|
||||
'loop_nested_multilevel_ref.html',
|
||||
array(),
|
||||
|
@ -303,6 +389,13 @@ class phpbb_template_template_test extends phpbb_template_template_test_case
|
|||
array(),
|
||||
"top-level content\nouter x\nouter y\ninner z\nfirst row\n\ninner zz",
|
||||
),
|
||||
array(
|
||||
'loop_nested_multilevel_ref_twig.html',
|
||||
array(),
|
||||
array('outer' => array(array('VARIABLE' => 'x'), array('VARIABLE' => 'y')), 'outer.inner' => array(array('VARIABLE' => 'z'), array('VARIABLE' => 'zz'))),
|
||||
array(),
|
||||
"top-level content\nouter x\nouter y\ninner z\nfirst row\n\ninner zz",
|
||||
),
|
||||
array(
|
||||
'loop_nested_deep_multilevel_ref.html',
|
||||
array(),
|
||||
|
@ -310,6 +403,13 @@ class phpbb_template_template_test extends phpbb_template_template_test_case
|
|||
array(),
|
||||
"top-level content\nouter\nmiddle\ninner z\nfirst row of 2 in inner\n\ninner zz",
|
||||
),
|
||||
array(
|
||||
'loop_nested_deep_multilevel_ref_twig.html',
|
||||
array(),
|
||||
array('outer' => array(array()), 'outer.middle' => array(array()), 'outer.middle.inner' => array(array('VARIABLE' => 'z'), array('VARIABLE' => 'zz'))),
|
||||
array(),
|
||||
"top-level content\nouter\nmiddle\ninner z\nfirst row of 2 in inner\n\ninner zz",
|
||||
),
|
||||
array(
|
||||
'loop_size.html',
|
||||
array(),
|
||||
|
@ -317,6 +417,13 @@ class phpbb_template_template_test extends phpbb_template_template_test_case
|
|||
array(),
|
||||
"nonexistent = 0\n! nonexistent\n\nempty = 0\n! empty\nloop\n\nin loop",
|
||||
),
|
||||
array(
|
||||
'loop_size_twig.html',
|
||||
array(),
|
||||
array('test_loop' => array(array()), 'empty_loop' => array()),
|
||||
array(),
|
||||
"nonexistent = 0\n! nonexistent\n\nempty = 0\n! empty\nloop\n\nin loop",
|
||||
),
|
||||
array(
|
||||
'loop_include.html',
|
||||
array(),
|
||||
|
@ -324,6 +431,13 @@ class phpbb_template_template_test extends phpbb_template_template_test_case
|
|||
array(),
|
||||
"barbarbar1bar1",
|
||||
),
|
||||
array(
|
||||
'loop_include_twig.html',
|
||||
array(),
|
||||
array('test_loop' => array(array('foo' => 'bar'), array('foo' => 'bar1'))),
|
||||
array(),
|
||||
"barbarbar1bar1",
|
||||
),
|
||||
array(
|
||||
'loop_nested_include.html',
|
||||
array(),
|
||||
|
@ -335,6 +449,17 @@ class phpbb_template_template_test extends phpbb_template_template_test_case
|
|||
"[bar|[bar|]][bar1|[bar1|[bar1|works]]]",
|
||||
array(),
|
||||
),
|
||||
array(
|
||||
'loop_nested_include_twig.html',
|
||||
array(),
|
||||
array(
|
||||
'test_loop' => array(array('foo' => 'bar'), array('foo' => 'bar1')),
|
||||
'test_loop.inner' => array(array('myinner' => 'works')),
|
||||
),
|
||||
array(),
|
||||
"[bar|[bar|]][bar1|[bar1|[bar1|works]]]",
|
||||
array(),
|
||||
),
|
||||
/* Does not pass with the current implementation.
|
||||
array(
|
||||
'loop_reuse.html',
|
||||
|
@ -343,8 +468,15 @@ class phpbb_template_template_test extends phpbb_template_template_test_case
|
|||
array(),
|
||||
// Not entirely sure what should be outputted but the current output of "a" is most certainly wrong
|
||||
"a\nb\nc\nd",
|
||||
),*/
|
||||
array(
|
||||
'loop_reuse_twig.html',
|
||||
array(),
|
||||
array('one' => array(array('VAR' => 'a'), array('VAR' => 'b')), 'one.one' => array(array('VAR' => 'c'), array('VAR' => 'd'))),
|
||||
array(),
|
||||
// Not entirely sure what should be outputted but the current output of "a" is most certainly wrong
|
||||
"a\nb\nc\nd",
|
||||
),
|
||||
*/
|
||||
array(
|
||||
'twig.html',
|
||||
array('VARIABLE' => 'FOObar',),
|
||||
|
@ -359,6 +491,21 @@ class phpbb_template_template_test extends phpbb_template_template_test_case
|
|||
array(),
|
||||
'inner_value',
|
||||
),
|
||||
// Disable: needs Twig 1.14.2
|
||||
/*array(
|
||||
'loop_expressions.html',
|
||||
array('loop' => array(array(),array(),array(),array(),array(),array()),),
|
||||
array(),
|
||||
array(),
|
||||
'yesnonoyesnonoyesnoyesnonoyes',
|
||||
),
|
||||
array(
|
||||
'loop_expressions_twig.html',
|
||||
array('loop' => array(array(),array(),array(),array(),array(),array()),),
|
||||
array(),
|
||||
array(),
|
||||
'yesnonoyesnonoyesnoyesnonoyes',
|
||||
),*/
|
||||
);
|
||||
}
|
||||
|
||||
|
|
19
tests/template/templates/loop_advanced_twig.html
Normal file
19
tests/template/templates/loop_advanced_twig.html
Normal file
|
@ -0,0 +1,19 @@
|
|||
{% for test_loop_inner in test_loop %}{{ test_loop_inner.S_FIRST_ROW }}{{ test_loop_inner.S_ROW_COUNT }}{{ test_loop_inner.S_LAST_ROW }}{% endfor %}
|
||||
x
|
||||
{% for test_loop_inner in test_loop|subset(0) %}{{ test_loop_inner.S_FIRST_ROW }}{{ test_loop_inner.S_ROW_COUNT }}{{ test_loop_inner.S_LAST_ROW }}{% endfor %}
|
||||
x
|
||||
{% for test_loop_inner in test_loop|subset(0,-1) %}{{ test_loop_inner.S_FIRST_ROW }}{{ test_loop_inner.S_ROW_COUNT }}{{ test_loop_inner.S_LAST_ROW }}{% endfor %}
|
||||
x
|
||||
{% for test_loop_inner in test_loop|subset(1) %}{{ test_loop_inner.S_FIRST_ROW }}{{ test_loop_inner.S_ROW_COUNT }}{{ test_loop_inner.S_LAST_ROW }}{% endfor %}
|
||||
x
|
||||
{% for test_loop_inner in test_loop|subset(1,1) %}{{ test_loop_inner.S_FIRST_ROW }}{{ test_loop_inner.S_ROW_COUNT }}{{ test_loop_inner.S_LAST_ROW }}{% endfor %}
|
||||
x
|
||||
{% for test_loop_inner in test_loop|subset(0,1) %}{{ test_loop_inner.S_FIRST_ROW }}{{ test_loop_inner.S_ROW_COUNT }}{{ test_loop_inner.S_LAST_ROW }}{% endfor %}
|
||||
x
|
||||
{% for test_loop_inner in test_loop|subset(2,4) %}{{ test_loop_inner.S_FIRST_ROW }}{{ test_loop_inner.S_ROW_COUNT }}{{ test_loop_inner.S_LAST_ROW }}{% endfor %}
|
||||
x
|
||||
{% for test_loop_inner in test_loop|subset(0,-7) %}{{ test_loop_inner.S_FIRST_ROW }}{{ test_loop_inner.S_ROW_COUNT }}{{ test_loop_inner.S_LAST_ROW }}{% endfor %}
|
||||
x
|
||||
{% for test_loop_inner in test_loop|subset(-2,6) %}{{ test_loop_inner.S_FIRST_ROW }}{{ test_loop_inner.S_ROW_COUNT }}{{ test_loop_inner.S_LAST_ROW }}{% endfor %}
|
||||
x
|
||||
{% for test_loop_inner in test_loop|subset(-2,-1) %}{{ test_loop_inner.S_FIRST_ROW }}{{ test_loop_inner.S_ROW_COUNT }}{{ test_loop_inner.S_LAST_ROW }}{% endfor %}
|
|
@ -1,11 +1,11 @@
|
|||
<!-- BEGIN loop -->
|
||||
|
||||
<!-- IF loop.S_ROW_NUM is even by 4 -->on<!-- ELSE -->off<!-- ENDIF -->
|
||||
<!-- IF loop.S_ROW_NUM is divisible by 4 -->on<!-- ELSE -->off<!-- ENDIF -->
|
||||
|
||||
<!-- END loop -->
|
||||
|
||||
<!-- BEGIN loop -->
|
||||
|
||||
<!-- IF loop.S_ROW_NUM is odd by 3 -->on<!-- ELSE -->off<!-- ENDIF -->
|
||||
<!-- IF loop.S_ROW_NUM is divisible by 3 -->on<!-- ELSE -->off<!-- ENDIF -->
|
||||
|
||||
<!-- END loop -->
|
||||
|
|
11
tests/template/templates/loop_expressions_twig.html
Normal file
11
tests/template/templates/loop_expressions_twig.html
Normal file
|
@ -0,0 +1,11 @@
|
|||
{% for loop_inner in loop %}
|
||||
|
||||
{% if loop_inner.S_ROW_NUM is divisible by 4 %}on{% else %}off{% endif %}
|
||||
|
||||
{% endfor %}
|
||||
|
||||
{% for loop_inner in loop %}
|
||||
|
||||
{% if loop_inner.S_ROW_NUM is divisible by 3 %}on{% else %}off{% endif %}
|
||||
|
||||
{% endfor %}
|
1
tests/template/templates/loop_include1_twig.html
Normal file
1
tests/template/templates/loop_include1_twig.html
Normal file
|
@ -0,0 +1 @@
|
|||
{{ test_loop_inner.foo }}
|
4
tests/template/templates/loop_include_twig.html
Normal file
4
tests/template/templates/loop_include_twig.html
Normal file
|
@ -0,0 +1,4 @@
|
|||
{% for test_loop_inner in test_loop %}
|
||||
{{ test_loop_inner.foo }}
|
||||
{% INCLUDE 'loop_include1_twig.html' %}
|
||||
{% endfor %}
|
6
tests/template/templates/loop_nested2_twig.html
Normal file
6
tests/template/templates/loop_nested2_twig.html
Normal file
|
@ -0,0 +1,6 @@
|
|||
{% for outer_inner in outer %}
|
||||
o{{ outer_inner.S_ROW_COUNT }}
|
||||
{% for middle in outer_inner.middle %}
|
||||
m{{ middle.S_ROW_COUNT }}{{ outer_inner.S_ROW_COUNT }}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
|
@ -0,0 +1,13 @@
|
|||
top-level content
|
||||
{% for outer_inner in outer %}
|
||||
outer
|
||||
{% for middle in outer_inner.middle %}
|
||||
{{ middle.S_BLOCK_NAME }}
|
||||
{% for inner in middle.inner %}
|
||||
inner {{ inner.VARIABLE }}
|
||||
{% if inner.S_FIRST_ROW %}
|
||||
first row of {{ inner.S_NUM_ROWS }} in {{ inner.S_BLOCK_NAME }}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
5
tests/template/templates/loop_nested_include1_twig.html
Normal file
5
tests/template/templates/loop_nested_include1_twig.html
Normal file
|
@ -0,0 +1,5 @@
|
|||
[{{ test_loop_inner.foo }}|
|
||||
{% for inner in test_loop_inner.inner %}
|
||||
[{{ test_loop_inner.foo }}|
|
||||
{{ inner.myinner }}]
|
||||
{% endfor %}]
|
4
tests/template/templates/loop_nested_include_twig.html
Normal file
4
tests/template/templates/loop_nested_include_twig.html
Normal file
|
@ -0,0 +1,4 @@
|
|||
{% for test_loop_inner in test_loop %}
|
||||
[{{ test_loop_inner.foo }}
|
||||
|{% INCLUDE 'loop_nested_include1_twig.html' %}]
|
||||
{% endfor %}
|
|
@ -0,0 +1,10 @@
|
|||
top-level content
|
||||
{% for outer_inner in outer %}
|
||||
outer {{ outer_inner.VARIABLE }}
|
||||
{% for inner in outer_inner.inner %}
|
||||
inner {{ inner.VARIABLE }}
|
||||
{% if inner.S_FIRST_ROW %}
|
||||
first row
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
6
tests/template/templates/loop_nested_twig.html
Normal file
6
tests/template/templates/loop_nested_twig.html
Normal file
|
@ -0,0 +1,6 @@
|
|||
{% for outer_inner in outer %}
|
||||
outer - {{ outer_inner.S_ROW_COUNT }}{% if outer_inner.VARIABLE %} - {{ outer_inner.VARIABLE }}{% endif %}{% if TEST_MORE %}[{{ outer_inner.S_BLOCK_NAME }}|{{ outer_inner.S_NUM_ROWS }}]{% endif %}
|
||||
{% for middle in outer_inner.middle %}
|
||||
middle - {{ middle.S_ROW_COUNT }}{% if middle.VARIABLE %} - {{ middle.VARIABLE }}{% endif %}{% if TEST_MORE %}[{{ middle.S_BLOCK_NAME }}|{{ middle.S_NUM_ROWS }}]{% endif %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
6
tests/template/templates/loop_reuse_twig.html
Normal file
6
tests/template/templates/loop_reuse_twig.html
Normal file
|
@ -0,0 +1,6 @@
|
|||
{% for one_inner in one %}
|
||||
{{ one_inner.VAR }}
|
||||
{% for one_one_inner in one_inner.one %}
|
||||
{{ one_one_inner.VAR }}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
39
tests/template/templates/loop_size_twig.html
Normal file
39
tests/template/templates/loop_size_twig.html
Normal file
|
@ -0,0 +1,39 @@
|
|||
{% if nonexistent_loop|length %}
|
||||
nonexistent
|
||||
{% endif %}
|
||||
|
||||
{% if nonexistent_loop|length == 0 %}
|
||||
nonexistent = 0
|
||||
{% endif %}
|
||||
|
||||
{% if ! nonexistent_loop|length %}
|
||||
! nonexistent
|
||||
{% endif %}
|
||||
|
||||
{% if empty_loop|length %}
|
||||
empty
|
||||
{% endif %}
|
||||
|
||||
{% if empty_loop|length == 0 %}
|
||||
empty = 0
|
||||
{% endif %}
|
||||
|
||||
{% if ! empty_loop|length %}
|
||||
! empty
|
||||
{% endif %}
|
||||
|
||||
{% if test_loop|length %}
|
||||
loop
|
||||
{% endif %}
|
||||
|
||||
{% if test_loop|length == 0 %}
|
||||
loop = 0
|
||||
{% endif %}
|
||||
|
||||
{% if ! test_loop|length %}
|
||||
! loop
|
||||
{% endif %}
|
||||
|
||||
{% for test_loop_inner in test_loop %}
|
||||
in loop
|
||||
{% endfor %}
|
21
tests/template/templates/loop_twig.html
Normal file
21
tests/template/templates/loop_twig.html
Normal file
|
@ -0,0 +1,21 @@
|
|||
{% for test_loop_inner in test_loop %}
|
||||
loop
|
||||
{% else %}
|
||||
noloop
|
||||
{% endfor %}
|
||||
|
||||
{% if test_loop|length %}
|
||||
loop
|
||||
{% else %}
|
||||
noloop
|
||||
{% endif %}
|
||||
|
||||
{% if test_loop|length == 2 %}
|
||||
loop
|
||||
{% endif %}
|
||||
|
||||
{% for test_loop_inner in test_loop %}
|
||||
{% for block_inner in block %}
|
||||
loop#{{ test_loop_inner.S_ROW_COUNT }}-block#{{ block_inner.S_ROW_COUNT }}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
21
tests/template/templates/loop_underscore_twig.html
Normal file
21
tests/template/templates/loop_underscore_twig.html
Normal file
|
@ -0,0 +1,21 @@
|
|||
{% for _underscore_loop_inner in _underscore_loop %}
|
||||
loop
|
||||
{% else %}
|
||||
noloop
|
||||
{% endfor %}
|
||||
|
||||
{% if _underscore_loop|length %}
|
||||
loop
|
||||
{% else %}
|
||||
noloop
|
||||
{% endif %}
|
||||
|
||||
{% if _underscore_loop|length == 2 %}
|
||||
loop
|
||||
{% endif %}
|
||||
|
||||
{% for _underscore_loop_inner in _underscore_loop %}
|
||||
{% for block_inner in block %}
|
||||
loop#{{ loop.S_ROW_COUNT }}-block#{{ block_inner.S_ROW_COUNT }}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
13
tests/template/templates/loop_vars_twig.html
Normal file
13
tests/template/templates/loop_vars_twig.html
Normal file
|
@ -0,0 +1,13 @@
|
|||
{% for test_loop_inner in test_loop %}
|
||||
{% if test_loop_inner.S_FIRST_ROW %}first{% endif %}
|
||||
{{ test_loop_inner.S_ROW_NUM }} - a
|
||||
{{ test_loop_inner.VARIABLE }} - b
|
||||
{% if test_loop_inner.VARIABLE %}set{% endif %}
|
||||
{% if test_loop_inner.S_LAST_ROW %}
|
||||
last
|
||||
{% endif %}
|
||||
{% for inner_inner in test_loop_inner.inner %}
|
||||
{{ inner_inner.S_ROW_NUM }} - c
|
||||
{% if inner_inner.S_LAST_ROW and inner_inner.S_ROW_COUNT and inner_inner.S_NUM_ROWS %}last inner{% endif %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
Loading…
Add table
Reference in a new issue