Benutzer-Werkzeuge

Webseiten-Werkzeuge


typo3:form

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige ÜberarbeitungVorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
typo3:form [2017/07/06 18:49] – Templating admintypo3:form [2023/04/26 20:02] (aktuell) – [Finisher: SaveToDatabase und Datei-Upload] admin
Zeile 97: Zeile 97:
             mapOnDatabaseColumn: 'message'             mapOnDatabaseColumn: 'message'
 </code> </code>
 +
 +==== Finisher: SaveToDatabase und Datei-Upload ====
 +
 +Wenn das Formular ein Feld des Typs //FileUpload// oder //ImageUpload// enthält, wird beim Hochladen der Datei automatisch ein Eintrag in der Datenbanktabelle //sys_file// erzeugt.
 +
 +Mit dem ''SaveToDatabase'' Finisher lassen sich nun die benötigten Datei-Referenzen erzeugen:
 +  * In einer eigenen Tabelle für Formular-Einträge wird die UID des //sys_file//-Eintrags gespeichert.
 +  * In der Tabelle //sys_file_reference// wird diese UID auf das Feld ''uid_local'' gemappt. Außerdem werden in weiteren Feldern der eigene Tabellenname, das dazugehörige Feld und – unter ''uid_foreign'' – die UID des neu angelegten Datensatzes in der eigenen Tabelle referenziert.
 +
 +Im TYPO3-Backend ist die hochgeladene Datei damit korrekt dem Datensatz in der eigenen Datenbanktabelle zugeordnet.
 +
 +<code yaml>
 +type: Form
 +identifier: UploadForm
 +label: 'Upload form'
 +prototypeName: standard
 +finishers:
 +  -
 +    identifier: SaveToDatabase
 +    options:
 +      -
 +        table: 'tx_deine_datenbanktabelle'
 +        mode: insert
 +        databaseColumnMappings:
 +          pid:
 +            value: 6
 +          crdate:
 +            value: '{__currentTimestamp}'
 +          tstamp:
 +            value: '{__currentTimestamp}'
 +          formtitle:
 +            value: 'Upload form'
 +        elements:
 +          fileupload:
 +            mapOnDatabaseColumn: 'feld_in_deiner_datenbanktabelle'
 +      -
 +        table: sys_file_reference
 +        mode: insert
 +        elements:
 +          fileupload:
 +            mapOnDatabaseColumn: 'uid_local'
 +        databaseColumnMappings:
 +          # Achtung: ab TYPO3 v12 müssen die beiden nachfolgenden Zeilen entfernt werden!
 +          table_local:
 +            value: 'sys_file'
 +          tablenames:
 +            value: 'tx_deine_datenbanktabelle'
 +          fieldname:
 +            value: 'feld_in_deiner_datenbanktabelle'
 +          tstamp:
 +            value: '{__currentTimestamp}'
 +          crdate:
 +            value: '{__currentTimestamp}'
 +          uid_foreign:
 +            value: '{SaveToDatabase.insertedUids.0}'
 +renderables:
 +  -
 +    type: Page
 +    identifier: page-1
 +    label: Page
 +    renderables:
 +      -
 +        properties:
 +          saveToFileMount: '1:/user_upload/'
 +          allowedMimeTypes:
 +            - application/pdf
 +          fluidAdditionalAttributes:
 +            required: required
 +        type: FileUpload
 +        identifier: fileupload
 +        label: 'Datei hochladen'
 +        validators:
 +          -
 +            identifier: NotEmpty
 +</code>
 +
 +Der Ruhm hierfür gilt **Olaf Schmidt-Wischhöfer**; er hat die Lösung am 26. Juni 2017 in Slack veröffentlicht!
  
 ---- ----
Zeile 211: Zeile 288:
 ===== Templating ===== ===== Templating =====
  
 +==== Formular in Fluid-Template rendern ====
 +
 +Aufgrund eines Bugs können Formulare nur mit einem Workaround in Website-Templates integriert werden.
 +
 +- Issue: https://forge.typo3.org/issues/92406
 +
 +**TypoScript:**
 +<code typoscript>
 +lib.embeddedForm = FLUIDTEMPLATE
 +lib.embeddedForm {
 +    template = TEXT
 +    template { 
 +        value = <formvh:render persistenceIdentifier="EXT:sitepackage/Resources/Private/Forms/embeddedForm.form.yaml" />
 +    }
 +    extbase {
 +        pluginName = Formframework
 +        controllerExtensionName = Form
 +        controllerName = FormFrontend
 +        controllerActionName = perform
 +    }
 +}
 +</code>
 +
 +**Fluid:**
 +<code html>
 +<f:cObject typoscriptObjectPath="lib.embeddedForm" />
 +</code>
 +
 +Danke an Daniel Siepmann, der die Lösung am 6. Oktober 2020 in Slack gepostet hat!
 +
 +----
 ==== templateRootPaths für Formulare einrichten ==== ==== templateRootPaths für Formulare einrichten ====
  
Zeile 258: Zeile 366:
  
 Forge: [[https://forge.typo3.org/issues/80974|Bug #80974: Form Email finisher doesn't support templateRootPaths]] Forge: [[https://forge.typo3.org/issues/80974|Bug #80974: Form Email finisher doesn't support templateRootPaths]]
 +
 +----
 +
 +===== Personalisierte Anrede in E-Mails =====
 +
 +**Form Definition**:
 +<code yaml>
 +renderables:
 +  -
 +    identifier: page-1
 +    label: 'Contact Form'
 +    type: Page
 +    renderables:
 +      -
 +        properties:
 +          options:
 +            Herr: Herr
 +            Frau: Frau
 +          prependOptionLabel: 'Bitte wählen ...'
 +          fluidAdditionalAttributes:
 +            required: required
 +        type: SingleSelect
 +        identifier: title
 +        label: Title
 +        validators:
 +          -
 +            identifier: NotEmpty
 +      -
 +        defaultValue: ''
 +        type: Text
 +        identifier: lastname
 +        label: 'Nachname'
 +        properties:
 +          fluidAdditionalAttributes:
 +            required: required
 +            placeholder: 'Nachname'
 +        validators:
 +          -
 +            identifier: NotEmpty
 +
 +</code>
 +
 +**/Finishers/Email/Html.html:**
 +<code html>
 +<f:switch expression="{form.formState.formValues.title}">
 +    <f:case value="Herr">Sehr geehrter Herr {form.formState.formValues.lastname},</f:case>
 +    <f:case value="Frau">Sehr geehrte Frau {form.formState.formValues.lastname},</f:case>
 +    <f:defaultCase>Sehr geehrte Damen und Herren,</f:defaultCase>
 +</f:switch>
 +
 +</code>
typo3/form.1499359796.txt.gz · Zuletzt geändert: 2017/07/06 18:49 von admin