Documentation · ViewHelper reference

GroupedForViewHelper


Grouped loop view helper.
Loops through the specified values.
The groupBy argument also supports property paths.

Examples

Simple

<f:groupedFor each="{0: {name: 'apple', color: 'green'}, 1: {name: 'cherry', color: 'red'}, 2: {name: 'banana', color: 'yellow'}, 3: {name: 'strawberry', color: 'red'}}" as="fruitsOfThisColor" groupBy="color">
  <f:for each="{fruitsOfThisColor}" as="fruit">
    {fruit.name}
  </f:for>
</f:groupedFor>

Output

apple cherry strawberry banana

Two dimensional list

    <f:groupedFor each="{0: {name: 'apple', color: 'green'}, 1: {name: 'cherry', color: 'red'}, 2: {name: 'banana', color: 'yellow'}, 3: {name: 'strawberry', color: 'red'}}" as="fruitsOfThisColor" groupBy="color" groupKey="color">
  • {color} fruits:
      <f:for each="{fruitsOfThisColor}" as="fruit" key="label">
    • {label}: {fruit.name}
    • </f:for>
  • </f:groupedFor>

Output

  • green fruits
    • 0: apple
  • red fruits
    • 1: cherry
    • 3: strawberry
  • yellow fruits
    • 2: banana

  • Tag usage example

    <f:groupedFor each="{foo: 'bar'}" as="foo" groupBy="foo" groupKey="'groupKey'">
    	<!-- tag content - may be ignored! -->
    </f:groupedFor>
  • Inline usage example

    {f:groupedFor(each: {foo: 'bar'}, as: 'foo', groupBy: 'foo', groupKey: ''groupKey'')}

Arguments

Argument Description Type
as

The name of the iteration variable

string
each

The array or \TYPO3\CMS\Extbase\Persistence\ObjectStorage to iterated over

array
groupBy

Group by this property

string
groupKey

The name of the variable to store the current group

string
Required attribute

Revision history

commit dca2931ee01d1e0ca5f3277b0dd2cde52706cafd
Author: Bastian Waidelich <*****@typo3.org>
Date:   Wed Sep 16 16:52:53 2009 +0000

    [~TASK] Fluid: tweaked exception that is thrown when trying to iterate through non-traversable objects in ForViewHelper
    [~TASK] Fluid: fixed typo in ForViewHelperTest
    [+FEATURE] Fluid: added CycleViewHelper. Resolves #4458
    [+FEATURE] Fluid: added GroupedForViewHelper. Resolves #4460
    [+TASK] Fluid: added test case for PaddingViewHelper. Relates to #4459

commit 9b2830bc1c17588dd69a463773c5f05f61b5cf94
Author: Sebastian Kurfürst <*****@typo3.org>
Date:   Sat Oct 24 11:01:38 2009 +0000

    * A*****@api annotations
    * Changed the fluid-specific RuntimeException to SPL's RuntimeException.

commit 7868047c52417ff4e1f3e99e45adaba1ee3d0a24
Author: Sebastian Kurfürst <*****@typo3.org>
Date:   Sat Oct 24 11:49:45 2009 +0000

    [~TASK] Fluid: A*****@package and @subpackage annotations.

commit 06b0d9efdad98af4c5b13dce887ee9f32e089752
Author: Bastian Waidelich <*****@typo3.org>
Date:   Thu Jun 24 10:14:25 2010 +0000

    [+FEATURE] Fluid (ViewHelpers): Added uri.image ViewHelper. This resolves #8233
    [+FEATURE] Fluid (ViewHelpers): Added URI options noCache, noCacheHash, section, format, additionalParams, absolute, addQueryString & argumentsToBeExcludedFromQueryString to FormViewHelper. Resolves #8247
    [+BUGFIX] Fluid: Removed a leading backslash in ViewHelperBaseTestcase that led to an error with PHP < 5.3
    
    [+TASK] Fluid: Backported some recent Fluid changes (Note: this is not a complete backport, there are still changes in Fluid Package that are not backported yet):
      [+BUGFIX] Fluid (ViewHelpers): form.select ViewHelper did only check whether "multiple" attribute was set and not whether it was empty or not. Resolves #5879
      [+FEATURE] Fluid (ViewHelpers): GroupedForViewHelper can now group by object. Resolves #7389

commit ed19fe9e4a6d2e91c594784adea24aa82064dd47
Author: Sebastian Kurfürst <*****@typo3.org>
Date:   Mon Jul 12 20:18:26 2010 +0000

    Fluid in v5 and v4 are now synchronized again!
    
    [+FEATURE] Fluid: The TemplateVariableContainer now provides a method to retrieve all variables.
    [~TASK] Fluid (Core): Introduced a RenderingContextInterface to more cleanly decouple Fluid's rendering context from the TypoScript rendering context. Note that view helpers (and other code) should now refer to that interface instead of the concrete Fluid implementation!
    [!!!][+BUGFIX] Fluid (Core): Refactored all Condition-ViewHelpers like f:if, f:security.if* to use a newly created base class F3\Fluid\Core\ViewHelper\ConditionViewHelper. This greatly simplifies the implementation of custom conditions. However, THIS IS A BREAKING CHANGE in case you copied the f:if ViewHelper to create a custom condition ViewHelper, as the internal workings changed. Please check the new f:if ViewHelper to see how to adjust your ViewHelper -- you basically just have to throw away a lot of code. Resolves #8824.
    [!!!][-API] Fluid (TemplateView): Removed renderSection() and renderWithLayout() from public API in Tx_Fluid_View_TemplateView, as this should only be called from inside Fluid.
    [!!!][TASK] Fluid (ViewHelpers): the <f:section />-ViewHelper now does NOT render itself anymore when encountered in a normal template. Example: Before the change, the template "before <f:section name='...'> middle </f:section> after" was rendered as "before middle after", but now it is only rendered as "before after". Although this is a breaking change, it is quite unlikely that anybody relied on this behavior, as it was inconsistent beforehand.
    [TASK] Fluid (TemplateView): Major refactoring of the layout, partial and section rendering mechanism. This also induces a speedup as retundant rendering is eliminated.
    [+FEATURE] Fluid (ViewHelpers): The <f:render>-ViewHelper can be now used to render sections in the same partial and template. In these cases, all arguments need to be specified explicitely. Additionally, it can now be used to render a section recursively.
    [~TASK] Fluid (Core): Removed some non-API-methods which were never called.

commit 186bdaeac89820779f91853b830cc95d60c7ad58
Author: Bastian Waidelich <*****@typo3.org>
Date:   Tue Jul 13 09:42:26 2010 +0000

    [-TASK] Fluid: R*****@version annotation from all Fluid classes to ease the backporting process. Relates to #8835 (backported from Fluid package)

commit 1d36de6ed90007e324b773782e8f0a1d1c1191a2
Author: Bastian Waidelich <*****@typo3.org>
Date:   Tue Jul 13 10:12:30 2010 +0000

    [-TASK] Fluid: R*****@package/@subpackage annotations from all Fluid classes. They have already been removed in FLOW3 packages in r2813.

commit 2bd9f56a7a820e303cc9ad9900557edb677136a8
Author: Bastian Waidelich <*****@typo3.org>
Date:   Tue Jul 13 14:17:07 2010 +0000

    [+BUGFIX] Fluid: Replaced SplObjectStorage by Tx_Extbase_Persistence_ObjectStorage to be PHP 5.2-compatible (which ships with a broken implementation of SplObjectStorage)
    [!!!][~TASK] Fluid (Core): Renamed ConditionViewHelper and TagBasedViewHelper to Abstract*ViewHelper as per CGL. (backported from Fluid package r4840). To be backwards-compatible, TagBasedViewHelper.php still exists and will write an entry to TYPO3s deprecation log if used. Please adapt your custom ViewHelpers and inherit from AbstractTagBasedViewHelper instead of TagBasedViewHelper. This resolves #8834
    [~TASK] Fluid: Marked vfs unit tests to be skipped, as vfs is not part of v4 (yet)

commit 308ba1732bf519a8459cb939d77d0bdc4aaf9735
Author: Bastian Waidelich <*****@typo3.org>
Date:   Thu Jul 22 14:47:59 2010 +0000

    [~TASK] Fluid (ViewHelpers): Replaced custom convertToArray() method by PHPs iterator_to_array() function in cycle, for and groupedFor ViewHelpers. This resolves #8732. (backport from Fluid package r4898)

commit 472451987ca0530fa5828bb0b79fcafa2f905a35
Author: Bastian Waidelich <*****@typo3.org>
Date:   Fri Nov 19 20:58:09 2010 +0000

    [-TASK] Fluid: R*****@scope annotations as they are not used in v4

commit dd8928aed4c119d8db37322acb91ded24ba5cc35
Author: Bastian Waidelich <*****@typo3.org>
Date:   Thu Dec 30 16:21:11 2010 +0000

    [+TASK] Fluid (ViewHelpers): Fix, cleanup and extend inline documentation of ViewHelpers
    
    Resolves #10908

commit 0401b77da4a7e019f40f60737724da2d6238f521
Author: Sebastian Kurfuerst <*****@typo3.org>
Date:   Fri May 27 07:19:55 2011 +0200

    [TASK] Comment and non-functional changes
    
    ... appeared during bringing Fluid v4 and v5 in sync again
    
    Change-Id: I326663606a917ad84fa82a736a536ff77863a0b3

commit 40f77f8eaa85774756d8e138f46da02815ed85ff
Author: Bastian Waidelich <*****@typo3.org>
Date:   Thu Jul 28 12:30:31 2011 +0200

    [BUGFIX] Whitespace fixes
    
    Non-behavioral change replaces leading spaces by tabs
    Additionally this slightly adjusts comments in the RawViewHelper to be in
    synch with the FLOW3 package
    
    Change-Id: Ied0ab55d7ff6a2ad2a33c556a056db496b700551

commit fd09d197fa8886b97cb20aa9573f39cd08ce989e
Author: Bastian Waidelich <*****@typo3.org>
Date:   Thu Nov 10 18:27:58 2011 +0100

    [TASK] S*****@author annotations
    
    This backports three recent changes of the TYPO3.Fluid package:
    - R*****@license annotation from files (290f4f5)
    - Simplify license header in PHP files (14bacba)
    - D*****@author tags from source code (9c2e837)
    
    This should not contain any functional change!
    
    Change-Id: I9376dca4af78c4f0f82413011d115b8ad04634dd

commit ca40f8a066da4ea3c849d74f68a9bc73758976c5
Author: dkd-egerer Sascha Egerer <*****@dkd.de>
Date:   Sat Apr 14 21:43:10 2012 +0200

    [TASK] Remove trailing whitespace
    
    There must be no empty lines after the closing
    PHP tag. Empty lines after closing tags break
    output compression in PHP and/or result in AJAX
    errors.
    
    Change-Id: I0484ca29d8134d0828cf30880d5aafd43ed9d78e
    Resolves: #36076
    Releases: 6.0
    Reviewed-on: http://review.typo3.org/10499
    Reviewed-by: Ingo Pfennigstorf
    Tested-by: Ingo Pfennigstorf
    Reviewed-by: Daniel Lorenz
    Tested-by: Daniel Lorenz
    Reviewed-by: Christian Kuhn
    Tested-by: Christian Kuhn

commit 4d2581feb1622a262acf41ac7414cd065672997b
Author: Bastian Waidelich <*****@typo3.org>
Date:   Fri Feb 24 11:07:48 2012 +0100

    [FEATURE] GroupedForViewHelper accepts property path as groupBy argument
    
    This change allows the GroupedForViewHelper to accept not only a property/array key as
    argument but also a property path. This reduces memory consumption for more complex
    object graphs. Also, It enables a developer to create a custom algorithm (getter) to provide
    the value to compare. The change is backwards compatible.
    (this is backported from #9244)
    
    Change-Id: Idcc002e89f6ec121fcbd9e75cd002ff7ad2946f1
    Related: #9244
    Reviewed-on: http://review.typo3.org/9173
    Reviewed-by: Anja Leichsenring
    Tested-by: Anja Leichsenring
    Reviewed-by: Christian Kuhn
    Tested-by: Christian Kuhn

commit ec3891d8d4e339d8319428211207e6201be9fd73
Author: Thomas Maroschik <*****@dfau.de>
Date:   Wed Oct 17 21:18:26 2012 +0200

    [TASK][WIP] Move non class code back to source files
    
    Change-Id: I620d2e61860142cdc89cc83474c95542799961c0

commit 554e8f890dcc0dd86a27518b58e2b54be26fd37e
Author: Thomas Maroschik <*****@dfau.de>
Date:   Wed Oct 17 22:20:17 2012 +0200

    [TASK] Namespace classes
    
    Change-Id: Ia7432e1c923826ed58206bca15fb94509adbd508

commit e9994c26660d759d02271b0308634a5350f45bdb
Author: Helmut Hummel <*****@typo3.org>
Date:   Wed Oct 31 12:16:50 2012 +0100

    [TASK] Replace old class names with namespaced ones
    
    Releases: 6.0
    
    Change-Id: I10badfae2aeff003e47df099e79accd9be6bd678
    Reviewed-on: http://review.typo3.org/16073
    Reviewed-by: Helmut Hummel
    Tested-by: Helmut Hummel

commit c06b495891bd86d564c590bc15c517ac47683b69
Author: Helmut Hummel <*****@typo3.org>
Date:   Wed Oct 31 21:15:58 2012 +0100

    [BUGFIX] Replace GenericObjectStorage in Fluid
    
    Change-Id: I60161676e457c20b14bcba3491a4d41b3c83073a
    Releases: 6.0
    Fixes: #42554
    Reviewed-on: http://review.typo3.org/16087
    Reviewed-by: Helmut Hummel
    Tested-by: Helmut Hummel

commit 9d13dedf017b614b834261b1bf5d4acb2201f1d4
Author: Alexander Schnitzler <*****@typovision.de>
Date:   Fri Nov 16 19:49:02 2012 +0100

    [CLEANUP] Replace FLOW3 with TYPO3 Flow
    
    Releases: 6.0
    Fixes: #43036
    Change-Id: I62df23587301b4cde3ddeae3686b34f54fe1182e
    Reviewed-on: http://review.typo3.org/16498
    Reviewed-by: Alexander Schnitzler
    Tested-by: Alexander Schnitzler

commit 9d46e6932d35c79bf87c96fa38b8e537c4192f23
Author: Alexander Schnitzler <*****@typovision.de>
Date:   Tue Nov 20 16:27:02 2012 +0100

    [CLEANUP] Adjust code to CGL and fix small namespace bugs
    
    * whitespaces, tabs and blank line issues
    * bool -> boolean
    * int -> integer
    * fix wrong namespace annotations
    
    Fixes: #43157
    Releases: 6.0
    Change-Id: I8397948e19248db029d8efd1555ee56e4982742d
    Reviewed-on: http://review.typo3.org/16619
    Reviewed-by: Helmut Hummel
    Tested-by: Helmut Hummel

commit 50d433bbde06b4b9eab146caea64d09239949e64
Author: Tymoteusz Motylewski <*****@gmail.com>
Date:   Sun Mar 3 18:53:42 2013 +0100

    [TASK] Sync CMS Fluid with Flow Fluid 1.1 (part2)
    
    This is the second part of a backport fluid from Flow.
    
    Change-Id: I96e47131414c50801ff7628508dc05d7d7b5e106
    Releases: 6.1
    Resolves: #44819
    Fixes: #45985
    Reviewed-on: https://review.typo3.org/18163
    Reviewed-by: Wouter Wolters
    Tested-by: Wouter Wolters
    Reviewed-by: Marc Bastian Heinrichs
    Tested-by: Marc Bastian Heinrichs

commit b443ac79cd3cf3b3c708d1a30b8bb6900aaff19f
Author: Stefan Froemken <*****@gmail.com>
Date:   Wed Sep 25 15:50:41 2013 +0200

    [BUGFIX] groupFor-VH*****@lazy
    
    I*****@lazy option
    f:groupedFor-ViewHelper can't group by this property.
    
    Resolves: #52266
    Releases: 6.2, 6.1, 6.0
    Change-Id: Ie208b67eec8500fee87ee1c62b1bd348c0ed5598
    Reviewed-on: https://review.typo3.org/24050
    Reviewed-by: Xavier Perseguers
    Reviewed-by: Christian Kuhn
    Tested-by: Christian Kuhn
    Reviewed-by: Wouter Wolters
    Tested-by: Wouter Wolters

commit 77f29a3c69a7cbb27b34072754aa503bace6c9f1
Author: Christian Kuhn <*****@schwarzbu.ch>
Date:   Tue Oct 1 14:40:56 2013 +0200

    [TASK] Remove closing PHP tags
    
    Change-Id: Iaa92566c53301e49396fc9fb26b0b339c48d567b
    Resolves: #52360
    Releases: 6.2
    Reviewed-on: https://review.typo3.org/24212
    Reviewed-by: Christian Kuhn
    Tested-by: Christian Kuhn
    Reviewed-by: Ernesto Baschny
    Tested-by: Ernesto Baschny
    Reviewed-by: Anja Leichsenring
    Tested-by: Anja Leichsenring