Manchmal reicht es nicht aus, wenn man nur die Tabellenfelder in seiner Flexform auflisten möchte. Dann kommen "itemsProcFunc" Funktionen ins Spiel.

Flexform Feld anlegen

In diesem Beispiel möchte ich, statt der UID der Elemente, die Title der Elemente haben. Dies hat den Hintergrund, dass in einem Plugin Auswahlfeld englische als auch deutsche Datensätze auswählbar sein sollen. Hier ein Beispiel für eine Extension, die eine Berufsliste als Vorauswahl bereitstellen soll:

 

...
<settings.preselected>
    <label>Vorauswahl Berufsfelder</label>
    <config>
        <type>select</type>
        <renderType>selectMultipleSideBySide</renderType>
        <size>10</size> 
        <maxitems>1</maxitems>
        <minitems>0</minitems>
        <itemsProcFunc>LdoerrDotCom\MyExt\Utility\SectionUtility->getSections</itemsProcFunc>
    </config>
</settings.preselected>
...

 

 

Custom Query für Flexform Feld anlegen

Natürlich muss jetzt in der Extension die gewünschte Utility Klasse angelegt werden. Der Pfad lautet "ext/myext/Classes/Utility/SectionUtility.php".

Dort können wir nun unsere Klasse schreiben und die Custom Query:

 

<?php

declare(strict_types=1);

namespace LdoerrDotCom\MyExt\Utility;

use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Utility\GeneralUtility;

class SectionUtility
{
    /**
     * Fetch sections and return as items array
     *
     * @param array $config TYPO3 config array
     */
    public function getSections(array &$config): void
    {
        $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
            ->getQueryBuilderForTable('tx_myext_domain_model_section');

        $sections = $queryBuilder
            ->select('title')
            ->from('tx_myext_domain_model_section')
            ->where($queryBuilder->expr()->eq('deleted', 0))
            ->orderBy('title', 'ASC')
            ->executeQuery()
            ->fetchAllAssociative();

        foreach ($sections as $section) {
            $config['items'][] = [$section['title'], $section['title']];
        }
    }
}

 

Nun wird in dem Auswahl Feld im Plugin eine Liste an Berufsbezeichnungen in den Flexform Array eingetragen beim Speichern, statt der UID.

Und so einfach ist es, die Flexform Einstellungen mit einer Custom Query via PHP zu erweitern. Natürlich ist dies ein sehr simples Beispiel, man kann hier seiner Fantasie freien lauf lassen.

Previous PostTYPO3 Extbase Snippet: Storage PID via Variable im Controller setzen