Zum Inhalt springen

Storage-PID in Flexform

Erstellt am 30. Juni 2021 · 8 Antworten · letzte Antwort am 8. Juli 2021

Tags: TYPO3 9, Frage

s_reinecke ·

Hallo!

Ich habe eine kleine Extension (Kontaktperson) erstellt, die ich in verschiedenen Sites nutzen möchte, jede Site mit einem eigenen Daten-Container.

Über eine Flexform wird die Auswahl einzelner Personen getätigt, was an sich auch funktioniert, nur werden immer alle Datensätze zur Auswahl angeboten.

Probiert habe ich dann, in der pageTS die PID des Daten-Containers anzugeben und dann in der Flexform auszulesen.

Die Flexform sieht so aus (nur der relevante Teil):

<settings.person>
    <TCEforms>
        <label>Person</label>
        <config>
            <type>select</type>
            <foreign_table>tx_contactperson_domain_model_persons</foreign_table>
            <foreign_table_where>
               AND tx_contactperson_domain_model_persons.pid = ###PAGE_TSCONFIG_ID### 
            </foreign_table_where>
            <size>5</size>
            <minitems>0</minitems>
            <maxitems>99</maxitems>
        </config>
    </TCEforms>
</settings.person>

Wenn ich hier die PID händisch statt mit Marker setze, funktioniert das auch. Nur der Marker will nicht funktionieren. Ich habe schon alle möglichen Schreibweisen durch, hier eine Auswahl meiner Versuche:

TCEFORM.tx_contactperson_person.pid.PAGE_TSCONFIG_ID = 153

TCEFORM.tx_contactperson_person.pi_flexform.sDEF.settings\.person.PAGE_TSCONFIG_ID = 153

TCEFORM.tt_content.pi_flexform.tx_contactperson_person.sDEF.settings\.person.PAGE_TSCONFIG_ID = 153

TCEFORM.tx_contactperson_person.sDEF.settings\.person.PAGE_TSCONFIG_ID = 153

TCEFORM.tx_contactperson_person.pi_flexform.T3DataStructure.sheets.settings\.person.PAGE_TSCONFIG_ID = 153

Weiß jemand, ob das überhaupt geht und wenn ja, wie?

Danke und Grüße,
Stephan

Teisinger ·

Du könntest (was ich schöner fände - aber nicht getestet 🙂 ) - zwei Felder in der Flexform haben:
Feld 1: Auswahl des Containers
Feld 2: Auswahl des Datensatzes des ausgewählten Containers
a) nur Anzeigen wenn Feld 1 ausgewählt ist Stichwort "displayCond"
b) Stichwort "userFunc" das Feld damit erstellen, da du glaube ich nur so auf den Wert des Feldes 1 zugreifen und die Ausgabe entsprechend machen kannst.

Das wäre etwas flexibler und benötigt keine statischen Werte in TypoScript bzw. PageTs...

s_reinecke ·

Das klingt interessant, danke dir! Das werde ich mal probieren.

Wobei ich trotzdem noch gerne wissen würde, warum meine Variante nicht funktioniert, bzw. ob es überhaupt funktionieren würde.

Julian.​Hofmann ·

War interessiert, wurde aber auch nicht ganz fündig...
Stefan schreibt aber als Beispiel:

Hier ein Beispiel, wenn der Wert für einen Marker in der Plugin-Flexform sein soll:

TCEFORM.tt_content.pi_flexform.PAGE_TSCONFIG_ID = 22

(https://www.typo3lexikon.de/typo3-tutorials/core/tca/marker-in-flexforms.html)

Vielleicht muss da etwas um die Ecke gedacht werden, und der Wert für tt_content gesetzt werden, weil das FlexForm-XML ja in der tt_content-Tabelle ist...

s_reinecke ·

Mit "displayCond" bin ich jetzt auch nicht weitergekommen. Prinzipiell funktioniert das schon, aber leider greift diese Condition nur beim Speichern und nicht beim Auswählen eines Wertes. Das finde ich für Redakteure zu umständlich, daher werde ich das auch nicht weiter verfolgen.

s_reinecke ·

Ja, das onchange/reload hatte ich auch schon ausprobiert, leider an der falschen Stelle. Jetzt habe ich es außerhalb von config gesetzt und nun geht es. Damit kann ich jetzt weiter arbeiten. :-)

Teisinger ·

Du könntest auch mit JavaScript im Backend arbeiten um Felder ein- und aus zu blenden, dann umgehst du das ganze reload gedöns (warum ist das eigentlich noch drin in TYPO3? oO).