mirror of
https://github.com/Mibew/handlebars.php.git
synced 2025-04-16 03:17:24 +03:00
Add "@first" and "@last" values to "each" helper
This commit is contained in:
parent
9d62ffd581
commit
39dd482df5
@ -67,7 +67,7 @@ class Context
|
||||
|
||||
/**
|
||||
* @var array Special variables stack for sections. Each stack element can
|
||||
* contain elements with "@index" and "@key" keys.
|
||||
* contain elements with "@index", "@key", "@first" and "@last" keys.
|
||||
*/
|
||||
protected $specialVariables = array();
|
||||
|
||||
|
@ -126,9 +126,14 @@ class Helpers
|
||||
} elseif (is_array($tmp) || $tmp instanceof \Traversable) {
|
||||
$isList = is_array($tmp) && (array_keys($tmp) == range(0, count($tmp) - 1));
|
||||
$index = 0;
|
||||
$lastIndex = $isList ? (count($tmp) - 1) : false;
|
||||
|
||||
foreach ($tmp as $key => $var) {
|
||||
$specialVariables = array('@index' => $index);
|
||||
$specialVariables = array(
|
||||
'@index' => $index,
|
||||
'@first' => ($index === 0),
|
||||
'@last' => ($index === $lastIndex),
|
||||
);
|
||||
if (!$isList) {
|
||||
$specialVariables['@key'] = $key;
|
||||
}
|
||||
|
@ -293,9 +293,14 @@ class Template
|
||||
if (is_array($sectionVar) || $sectionVar instanceof \Traversable) {
|
||||
$isList = is_array($sectionVar) && (array_keys($sectionVar) == range(0, count($sectionVar) - 1));
|
||||
$index = 0;
|
||||
$lastIndex = $isList ? (count($sectionVar) - 1) : false;
|
||||
|
||||
foreach ($sectionVar as $key => $d) {
|
||||
$specialVariables = array('@index' => $index);
|
||||
$specialVariables = array(
|
||||
'@index' => $index,
|
||||
'@first' => ($index === 0),
|
||||
'@last' => ($index === $lastIndex),
|
||||
);
|
||||
if (!$isList) {
|
||||
$specialVariables['@key'] = $key;
|
||||
}
|
||||
|
@ -183,6 +183,16 @@ class HandlebarsTest extends \PHPUnit_Framework_TestCase
|
||||
array('data' => array('key1'=>1, 'key2'=>2,)),
|
||||
'0=>1,1=>2,'
|
||||
),
|
||||
array(
|
||||
'{{#each data}}{{#if @first}}the first is {{this}}{{/if}}{{/each}}',
|
||||
array('data' => array('one', 'two', 'three')),
|
||||
'the first is one'
|
||||
),
|
||||
array(
|
||||
'{{#each data}}{{#if @last}}the last is {{this}}{{/if}}{{/each}}',
|
||||
array('data' => array('one', 'two', 'three')),
|
||||
'the last is three'
|
||||
),
|
||||
array(
|
||||
'{{#each data}}{{this}}{{else}}fail{{/each}}',
|
||||
array('data' => array(1, 2, 3, 4)),
|
||||
|
Loading…
Reference in New Issue
Block a user