Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions h2o/tags.php
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,8 @@ class For_Tag extends H2o_Node {
private $syntax = '{
([a-zA-Z][a-zA-Z0-9-_]*)(?:,\s?([a-zA-Z][a-zA-Z0-9-_]*))?
\s+in\s+
([a-zA-Z][a-zA-Z0-9-_]*(?:\.[a-zA-Z_0-9][a-zA-Z0-9_-]*)*)\s* # Iteratable name
(?:limit\s*:\s*(\d+))?\s*
([a-zA-Z0-9][a-zA-Z0-9-_,]*(?:\.[a-zA-Z_0-9][a-zA-Z0-9_-]*)*)\s* # Iteratable name
(?:limit\s*:\s*-?(\d+))?\s*
(reversed)? # Reverse keyword
}x';

Expand All @@ -124,12 +124,16 @@ function __construct($argstring, $parser, $position) {
if (!$this->item) {
list($this->key, $this->item) = array($this->item, $this->key);
}
$this->iteratable = symbol($this->iteratable);
if ( strpos($this->iteratable,',') > 0 ) {
$this->iteratable = explode(',',$this->iteratable);
} else $this->iteratable = symbol($this->iteratable);
$this->reversed = (bool) $this->reversed;
}

function render($context, $stream) {
$iteratable = $context->resolve($this->iteratable);
if ( ! is_array($this->iteratable) ) {
$iteratable = $context->resolve($this->iteratable);
} else $iteratable = $this->iteratable;

if ($this->reversed)
$iteratable = array_reverse($iteratable);
Expand Down
11 changes: 11 additions & 0 deletions spec/tags_spec.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,17 @@ function should_iterate_over_an_array_of_objects() {
expects($result)->should_be('12345');
}


function should_iterate_over_a_list_of_objects() {
$result = h2o('{% for e in 1,2,3,4,5 %}{{ e }}{% endfor %}')->render();
expects($result)->should_be('12345');
}

function should_reverse_list_when_reversed_keyword_supplied() {
$result = h2o('{% for e in 1,2,3,4,5 reversed %}{{ e }}{% endfor %}')->render();
expects($result)->should_be('54321');
}

function should_reverse_array_when_reversed_keyword_supplied() {
$result = h2o('{% for e in items reversed %}{{ e }}{% endfor %}')->render(array(
'items'=> array(1,2,3,4,5)
Expand Down