#Stand: 11.01.2022

tt_content.gridelements_pi1{
    templateRootPaths.20 = fileadmin/templates/grids/
}

# Hiermit stellt Ihr Regeln für GridElements selbst ein
# Infos dazu unter: https://docs.typo3.org/typo3cms/extensions/gridelements/stable/Chapters/DataProcessing/Index.html

tt_content.gridelements_pi1 {

    variables {

        classesSection = COA
        classesSection {

            10 = LOAD_REGISTER
            10 = TEXT
            10.data = field:flexform_classesSection

            20 = TEXT
            20.stdWrap.dataWrap = class-{register:classesSection}

            30 = RESTORE_REGISTER
        }
    }

    dataProcessing {
        10 {
            default {
                options {
                    resolveFlexFormData = 1
                    resolveChildFlexFormData = 0
                }
            }
        }
    }

}
setup
tx_gridelements.setup {

    ############### section configuration:
    section {
        title = Section
        # icon = EXT:example_extension/Resources/Public/Images/BackendLayouts/default.gif
        config {
            colCount = 1
            rowCount = 1
            rows {
                1 {
                    columns {
                        1 {
                            name = Inhalte Section
                            colPos = 0
                        }
                    }
                }
            }
        }
	flexformDS (
            <T3DataStructure>
		<meta>
		    <langDisable>1</langDisable>
		</meta>
		<ROOT type="array">
		    <type>array</type>
		    <el type="array">
                        <classesSection type="array">
			    <TCEforms type="array">
				<label>Class(es) for the section:</label>
				<config type="array">
				    <type>input</type>
				    <default></default>
				</config>
			    </TCEforms>
			</classesSection>
		    </el>
		</ROOT>
	    </T3DataStructure>
	)
    }

    ############### 1 col configuration:
    1col {
        title = 1 Spalte
        # icon = EXT:example_extension/Resources/Public/Images/BackendLayouts/default.gif
        config {
            colCount = 1
            rowCount = 1
            rows {
                1 {
                    columns {
                        1 {
                            name = Inhalte Spalte 1
                            colPos = 0
                        }
                    }
                }
            }
        }
	flexformDS (
            <T3DataStructure>
		<meta>
		    <langDisable>1</langDisable>
		</meta>
		<ROOT type="array">
		    <type>array</type>
		    <el type="array">
                        <classes_container type="array">
			    <TCEforms type="array">
				<label>Class(es) for container:</label>
				<config type="array">
				    <type>input</type>
				    <default>container</default>
				</config>
			    </TCEforms>
			</classes_container>
                        <classes_col_1 type="array">
			    <TCEforms type="array">
				<label>Class(es) for col 1:</label>
				<config type="array">
				    <type>input</type>
				    <default>col-12</default>
				</config>
			    </TCEforms>
			</classes_col_1>
		    </el>
		</ROOT>
	    </T3DataStructure>
	)
    }

    ############### 2 cols configuration:
    2cols {
        title = 2 Spalten
        # icon = EXT:example_extension/Resources/Public/Images/BackendLayouts/default.gif
        config {
            colCount = 2
            rowCount = 1
            rows {
                1 {
                    columns {
                        1 {
                            name = Inhalte Spalte 1
                            colPos = 0
                        }
                        2 {
                            name = Inhalte Spalte 2
                            colPos = 1
                        }
                    }
                }
            }
        }
	flexformDS (
	    <T3DataStructure>
		<meta>
		    <langDisable>1</langDisable>
		</meta>
		<ROOT type="array">
		    <type>array</type>
		    <el type="array">
                        <classes_container type="array">
			    <TCEforms type="array">
				<label>Class(es) for container:</label>
				<config type="array">
				    <type>input</type>
				    <default>container</default>
				</config>
			    </TCEforms>
			</classes_container>
                        <classes_col_1 type="array">
			    <TCEforms type="array">
				<label>Class(es) for col 1:</label>
				<config type="array">
				    <type>input</type>
				    <default>col-6</default>
				</config>
			    </TCEforms>
			</classes_col_1>
                        <classes_col_2 type="array">
			    <TCEforms type="array">
				<label>Class(es) for col 2:</label>
				<config type="array">
				    <type>input</type>
				    <default>col-6</default>
				</config>
			    </TCEforms>
			</classes_col_2>
		    </el>
		</ROOT>
	    </T3DataStructure>
	)
    }

    ############### 3 cols configuration:
    3cols {
        title = 3 Spalten
        # icon = EXT:example_extension/Resources/Public/Images/BackendLayouts/default.gif
        config {
            colCount = 2
            rowCount = 1
            rows {
                1 {
                    columns {
                        1 {
                            name = Inhalte Spalte 1
                            colPos = 0
                        }
                        2 {
                            name = Inhalte Spalte 2
                            colPos = 1
                        }
                        3 {
                            name = Inhalte Spalte 3
                            colPos = 2
                        }
                    }
                }
            }
        }
	flexformDS (
	    <T3DataStructure>
		<meta>
		    <langDisable>1</langDisable>
		</meta>
		<ROOT type="array">
		    <type>array</type>
		    <el type="array">
                        <classes_container type="array">
			    <TCEforms type="array">
				<label>Class(es) for container:</label>
				<config type="array">
				    <type>input</type>
				    <default>container</default>
				</config>
			    </TCEforms>
			</classes_container>
                        <classes_col_1 type="array">
			    <TCEforms type="array">
				<label>Class(es) for col 1:</label>
				<config type="array">
				    <type>input</type>
				    <default>col-4</default>
				</config>
			    </TCEforms>
			</classes_col_1>
                        <classes_col_2 type="array">
			    <TCEforms type="array">
				<label>Class(es) for col 2:</label>
				<config type="array">
				    <type>input</type>
				    <default>col-4</default>
				</config>
			    </TCEforms>
			</classes_col_2>
                        <classes_col_3 type="array">
			    <TCEforms type="array">
				<label>Class(es) for col 3:</label>
				<config type="array">
				    <type>input</type>
				    <default>col-4</default>
				</config>
			    </TCEforms>
			</classes_col_3>
		    </el>
		</ROOT>
	    </T3DataStructure>
	)
    }

    ############### 4 cols configuration:
    4cols {
        title = 4 Spalten
        # icon = EXT:example_extension/Resources/Public/Images/BackendLayouts/default.gif
        config {
            colCount = 2
            rowCount = 1
            rows {
                1 {
                    columns {
                        1 {
                            name = Inhalte Spalte 1
                            colPos = 0
                        }
                        2 {
                            name = Inhalte Spalte 2
                            colPos = 1
                        }
                        3 {
                            name = Inhalte Spalte 3
                            colPos = 2
                        }
                        4 {
                            name = Inhalte Spalte 4
                            colPos = 3
                        }
                    }
                }
            }
        }
	flexformDS (
	    <T3DataStructure>
		<meta>
		    <langDisable>1</langDisable>
		</meta>
		<ROOT type="array">
		    <type>array</type>
		    <el type="array">
                        <classes_container type="array">
			    <TCEforms type="array">
				<label>Class(es) for container:</label>
				<config type="array">
				    <type>input</type>
				    <default>container</default>
				</config>
			    </TCEforms>
			</classes_container>
                        <classes_col_1 type="array">
			    <TCEforms type="array">
				<label>Class(es) for col 1:</label>
				<config type="array">
				    <type>input</type>
				    <default>col-3</default>
				</config>
			    </TCEforms>
			</classes_col_1>
                        <classes_col_2 type="array">
			    <TCEforms type="array">
				<label>Class(es) for col 2:</label>
				<config type="array">
				    <type>input</type>
				    <default>col-3</default>
				</config>
			    </TCEforms>
			</classes_col_2>
                        <classes_col_3 type="array">
			    <TCEforms type="array">
				<label>Class(es) for col 3:</label>
				<config type="array">
				    <type>input</type>
				    <default>col-3</default>
				</config>
			    </TCEforms>
			</classes_col_3>
                        <classes_col_4 type="array">
			    <TCEforms type="array">
				<label>Class(es) for col 4:</label>
				<config type="array">
				    <type>input</type>
				    <default>col-3</default>
				</config>
			    </TCEforms>
			</classes_col_4>
		    </el>
		</ROOT>
	    </T3DataStructure>
	)
    }

}
page ts

Die Namen der .html-Dateien ergeben sich aus der gridelements_dataprocessing.PAGE.typoscript. Der Dateiname muss mit einem Großbuchstaben beginnen:


<div id="container-{data.uid}" class="{f:if(condition: '{data.flexform_classes_container}', then: '{data.flexform_classes_container}')}">
    <div class="row 
         {f:if(condition: '{data.frame_class}', then: 'frame-{data.frame_class}')}
        {f:if(condition: '{data.space_before_class}', then: 'space-before-{data.space_before_class}')}
        {f:if(condition: '{data.space_after_class}', then: 'space-after-{data.space_after_class}')}" 
        id="c{data.uid}">
        <div class="{f:if(condition: '{data.flexform_classes_col_1}', then: '{data.flexform_classes_col_1}')}">
            <f:for each="{children.1.0}" as="child">
                <f:cObject typoscriptObjectPath="tt_content.{child.data.CType}" data="{child.data}" table="tt_content" />
            </f:for>
        </div>
    </div>
</div>
1col.html
<div id="container-{data.uid}" class="{f:if(condition: '{data.flexform_classes_container}', then: '{data.flexform_classes_container}')}">
    <div class="row 
         {f:if(condition: '{data.frame_class}', then: 'frame-{data.frame_class}')}
        {f:if(condition: '{data.space_before_class}', then: 'space-before-{data.space_before_class}')}
        {f:if(condition: '{data.space_after_class}', then: 'space-after-{data.space_after_class}')}" 
        id="c{data.uid}">
        <div class="{f:if(condition: '{data.flexform_classes_col_1}', then: '{data.flexform_classes_col_1}')}">
            <f:for each="{children.1.0}" as="child">
                <f:cObject typoscriptObjectPath="tt_content.{child.data.CType}" data="{child.data}" table="tt_content" />
            </f:for>
        </div>
        <div class="{f:if(condition: '{data.flexform_classes_col_2}', then: '{data.flexform_classes_col_2}')}">
            <f:for each="{children.1.1}" as="child">
                <f:cObject typoscriptObjectPath="tt_content.{child.data.CType}" data="{child.data}" table="tt_content" />
            </f:for>
        </div>
    </div>
</div>
2cols.html
<div id="container-{data.uid}" class="{f:if(condition: '{data.flexform_classes_container}', then: '{data.flexform_classes_container}')}">
    <div class="row 
         {f:if(condition: '{data.frame_class}', then: 'frame-{data.frame_class}')}
        {f:if(condition: '{data.space_before_class}', then: 'space-before-{data.space_before_class}')}
        {f:if(condition: '{data.space_after_class}', then: 'space-after-{data.space_after_class}')}" 
        id="c{data.uid}">
        <div class="{f:if(condition: '{data.flexform_classes_col_1}', then: '{data.flexform_classes_col_1}')}">
            <f:for each="{children.1.0}" as="child">
                <f:cObject typoscriptObjectPath="tt_content.{child.data.CType}" data="{child.data}" table="tt_content" />
            </f:for>
        </div>
        <div class="{f:if(condition: '{data.flexform_classes_col_2}', then: '{data.flexform_classes_col_2}')}">
            <f:for each="{children.1.1}" as="child">
                <f:cObject typoscriptObjectPath="tt_content.{child.data.CType}" data="{child.data}" table="tt_content" />
            </f:for>
        </div>
        <div class="{f:if(condition: '{data.flexform_classes_col_3}', then: '{data.flexform_classes_col_3}')}">
            <f:for each="{children.1.2}" as="child">
                <f:cObject typoscriptObjectPath="tt_content.{child.data.CType}" data="{child.data}" table="tt_content" />
            </f:for>
        </div>
    </div>
</div>
3cols.html
<div id="container-{data.uid}" class="{f:if(condition: '{data.flexform_classes_container}', then: '{data.flexform_classes_container}')}">
    <div class="row 
         {f:if(condition: '{data.frame_class}', then: 'frame-{data.frame_class}')}
        {f:if(condition: '{data.space_before_class}', then: 'space-before-{data.space_before_class}')}
        {f:if(condition: '{data.space_after_class}', then: 'space-after-{data.space_after_class}')}" 
        id="c{data.uid}">
        <div class="{f:if(condition: '{data.flexform_classes_col_1}', then: '{data.flexform_classes_col_1}')}">
            <f:for each="{children.1.0}" as="child">
                <f:cObject typoscriptObjectPath="tt_content.{child.data.CType}" data="{child.data}" table="tt_content" />
            </f:for>
        </div>
        <div class="{f:if(condition: '{data.flexform_classes_col_2}', then: '{data.flexform_classes_col_2}')}">
            <f:for each="{children.1.1}" as="child">
                <f:cObject typoscriptObjectPath="tt_content.{child.data.CType}" data="{child.data}" table="tt_content" />
            </f:for>
        </div>
        <div class="{f:if(condition: '{data.flexform_classes_col_3}', then: '{data.flexform_classes_col_3}')}">
            <f:for each="{children.1.2}" as="child">
                <f:cObject typoscriptObjectPath="tt_content.{child.data.CType}" data="{child.data}" table="tt_content" />
            </f:for>
        </div>
        <div class="{f:if(condition: '{data.flexform_classes_col_4}', then: '{data.flexform_classes_col_4}')}">
            <f:for each="{children.1.3}" as="child">
                <f:cObject typoscriptObjectPath="tt_content.{child.data.CType}" data="{child.data}" table="tt_content" />
            </f:for>
        </div>
    </div>
</div>
4cols.html
<section id="section-{data.uid}" class="{f:if(condition: '{data.flexform_classes_section}', then: '{data.flexform_classes_section}')}">
    <f:for each="{children.1.0}" as="child">
        <f:cObject typoscriptObjectPath="tt_content.{child.data.CType}" data="{child.data}" table="tt_content" />
    </f:for>
</section>
Section.html