ibexa

Caution: This documentation is for eZ Publish legacy, from version 3.x to 5.x.

foreach

Summary

Iterates over arrays in different ways.

Usage

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

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

Description

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

Examples

Example 1

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

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} : {$object.name} <br />
 
{/foreach}

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}">{$object.name}</div>
 
{/foreach}

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 (06/11/2006 10:56 am)


Comments

  • Other parameters?

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

      Hi,

      Take a look at this : http://ez.no/ez_publish/documenta...plate_functions/program_flow/section

      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} ] ??
  • 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}
     {else}
      {node_view_gui view=line content_node=$object}
     {/if}
    {/foreach}
    
  • Delimiter ?

    is the {delimiter} statement deprecated ? It doesn't seem to work with foreach.
    • Re: Delimiter ?

      It works as expected.
      Tested using an example:
      foreach<br>
      {let $b=array( 1, 2, 3, 4, 5, 6, 7 )}
      {foreach $b as $bitem}
      {$bitem}
      {delimiter}
      <br>:DEL:<br>
      {/delimiter}
      {/foreach}
      {/let}

      I've got these on the output:
      foreach
      1
      :DEL:
      2
      :DEL:
      3
      :DEL:
      4
      :DEL:
      5
      :DEL:
      6
      :DEL:
      7

      And output results are expected
      • Are you sure ??

         {foreach $module_result.path as $path}
          {if $path.url}
            [LT]a href={cond( is_set( $path.url_alias ), $path.url_alias,
                                                $path.url )|ezurl}[GT]{$path.text|wash}[LT]/a[GT]
          {delimiter}
        		/
          {/delimiter}
          {else}
        	{$path.text|wash}
          {/if}
          {/foreach}
        



        Warning: eZTemplate Oct 18 2006 18:16:03
        Function "delimiter" is not registered


        eZ Publish 3.8.5
        • Re: Are you sure ??

          update: It's because it's inside an if clause!!!
  • Get image width in Foreach loop

    Thanks Lukasz, for this answer on extracting an image width (useful for defining the width of a parent container in css).


    <div class="picleft" style="width:{$related.data_map.picture.content[portrait].width}px>
    {attribute_view_gui attribute=$related.data_map.picture image_class=portrait}
    </div>

    Gives you an image wrapped in a div of the same width as the image.

    'portrait' is the image alias.