Caution: This documentation is for eZ Publish legacy, from version 3.x to 5.x.
For 5.x documentation covering Platform see eZ Documentation Center, for difference between legacy and Platform see 5.x Architecture overview.



Iterates over arrays in different ways.


{foreach <array> as [ $keyVar => ] $itemVar  
         [ sequence <array> as $sequenceVar ]
         [ offset <offset>                  ]
         [ max <max>                        ]
         [ reverse                          ]}

    [ {delimiter}...{/delimiter} ]
    [ {break}    ]
    [ {continue} ]
    [ {skip}     ]


This construct makes it possible to iterate over arrays in different ways. The loop can be tweaked using the parameters (see above).


Example 1

{foreach $objects as $object}
    {$} <br />

This example will print out the names of the objects that are stored in the $objects array. If this array stores 4 objects with the following names: "Emmett Brown", "Marty McFly", "Lorraine Baines" and "Biff Tannen", the following output will be produced:

Emmett Brown
Marty McFly
Lorraine Baines
Biff Tannen

Example 2

{foreach $objects as $index => $object}
    {$index} : {$} <br />

This example demonstrates how to create an iteration counter.

0: Emmett Brown
1: Marty McFly
2: Lorraine Baines
3: Biff Tannen

Example 3

{foreach $objects as $object sequence array( 'dark', 'light' ) as $style}
    <div class="{$style}">{$}</div>

This example demonstrates how to create a loop where the iterations are displayed using alternating styles (in this case dark, light, dark, light and so on).

Balazs Halasy (22/02/2005 1:11 pm)

Balazs Halasy (17/11/2005 1:26 pm)


  • Other parameters?

    Any chance you might update this piece to list out what all the other parameters do? Thanks!
    • Re: Other parameters?


      Take a look at this :

      The {foreach} statement is a replacement for the {section loop=..}.
      • Re: Other parameters?

        offset :
        Determines the start of the loop array for the iterations, the value must be an integer.

        max :
        Determines the maximum number of iterations, the value must be an integer.
  • parameters

    These parameters is not explained here or in the section part, so I start some guessing..
    [ {break} ] guess this breakes out of the foreach ??
    [ {skip} ] and this jumps to next element ?
    [ {continue} ] ??
    • Re: parameters

      Indeed {break} breaks out of the loop and continues after the it
      Both {skip} and {continue} proceed with the next element, but if a {delimiter} is defined, it will be included after {continue}, but not after {skip}. See this example:

      {let list = array( 1,2,3,4,5)}
      {foreach $list as $var}
      {delimiter}<br />{/delimiter}
      {if $var|eq(2)}{skip}{/if}
      {if $var|eq(4)}{continue}{/if}
  • working without modulo

    If you miss the delimiter modulo combination provided by the old section structure you can accomplish the same thing with code like this:
    {foreach $objects as $objectKey => $object}
     {if eq($objectKey|mod(2),0)}
      {node_view_gui view=line content_node=$object}
      {node_view_gui view=line content_node=$object}