mirror of
https://github.com/twigphp/Twig.git
synced 2026-09-12 10:26:32 +00:00
bug #2884 Fix "batch filter clobbers array keys when fill parameter is used " (fabpot)
This PR was squashed before being merged into the 1.x branch (closes #2884). Discussion ---------- Fix "batch filter clobbers array keys when fill parameter is used " closes #2568 Commits -------750cb237fixed batch filter clobbers array keys when fill parameter is usedede9a604added preserveKeys support for the batch filter
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
* 1.38.0 (2019-XX-XX)
|
||||
|
||||
* fixed batch filter clobbers array keys when fill parameter is used
|
||||
* added preserveKeys support for the batch filter
|
||||
* fixed "embed" support when used from "template_from_string"
|
||||
* added the possibility to pass a TemplateWrapper to Twig\Environment::load()
|
||||
* improved the performance of the sandbox
|
||||
|
||||
@@ -1638,23 +1638,22 @@ function twig_constant_is_defined($constant, $object = null)
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
function twig_array_batch($items, $size, $fill = null)
|
||||
function twig_array_batch($items, $size, $fill = null, $preserveKeys = true)
|
||||
{
|
||||
if ($items instanceof \Traversable) {
|
||||
$items = iterator_to_array($items, false);
|
||||
$items = iterator_to_array($items, $preserveKeys);
|
||||
}
|
||||
|
||||
$size = ceil($size);
|
||||
|
||||
$result = array_chunk($items, $size, true);
|
||||
$result = array_chunk($items, $size, $preserveKeys);
|
||||
|
||||
if (null !== $fill && !empty($result)) {
|
||||
if (null !== $fill && $result) {
|
||||
$last = \count($result) - 1;
|
||||
if ($fillCount = $size - \count($result[$last])) {
|
||||
$result[$last] = array_merge(
|
||||
$result[$last],
|
||||
array_fill(0, $fillCount, $fill)
|
||||
);
|
||||
for ($i = 0; $i < $fillCount; $i++) {
|
||||
$result[$last][] = $fill;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
--TEST--
|
||||
"batch" filter preserves array keys
|
||||
--TEMPLATE--
|
||||
{{ {'foo': 'bar', 'key': 'value'}|batch(4)|first|keys|join(',') }}
|
||||
{{ {'foo': 'bar', 'key': 'value'}|batch(4, 'fill')|first|keys|join(',') }}
|
||||
{{ {'foo': 'bar', 'key': 'value'}|batch(4)|first|keys|join(',') }}
|
||||
{{ {'foo': 'bar', 'key': 'value'}|batch(4, 'fill')|first|keys|join(',') }}
|
||||
--DATA--
|
||||
return []
|
||||
--EXPECT--
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
--TEST--
|
||||
"batch" filter
|
||||
--TEMPLATE--
|
||||
{% for row in items|batch(3, 'fill') %}
|
||||
<div class=row>
|
||||
{% for key, column in row %}
|
||||
<div class={{ key }}>{{ column }}</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
--DATA--
|
||||
return ['items' => ['a' => 'a', 'b' => 'b', 'c' => 'c', 'd' => 'd', '123' => 'e']]
|
||||
--EXPECT--
|
||||
<div class=row>
|
||||
<div class=a>a</div>
|
||||
<div class=b>b</div>
|
||||
<div class=c>c</div>
|
||||
</div>
|
||||
<div class=row>
|
||||
<div class=d>d</div>
|
||||
<div class=123>e</div>
|
||||
<div class=124>fill</div>
|
||||
</div>
|
||||
Reference in New Issue
Block a user