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:38] – [Default-Werte überschreiben] 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 117: Zeile 194:
  
  
-**BasicContactForm.yaml**+**ContactForm.yaml**
 <code yaml> <code yaml>
  
Zeile 205: Zeile 282:
     }     }
 } }
 +</code>
 +
 +----
 +
 +===== 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 ====
 +
 +<code yaml>
 +TYPO3:
 +  CMS:
 +    Form:
 +      prototypes:
 +        myCustomForm:
 +          __inheritances:
 +            10: 'TYPO3.CMS.Form.prototypes.standard'
 +          formElementsDefinition:
 +            Form:
 +              renderingOptions:
 +                templateRootPaths:
 +                  100: 'EXT:form_distribution/Resources/Private/Frontend/Templates/'
 +                partialRootPaths:
 +                  100: 'EXT:form_distribution/Resources/Private/Frontend/Partials/'
 +                layoutRootPaths:
 +                  100: 'EXT:form_distribution/Resources/Private/Frontend/Layouts/'
 +</code>
 +
 +==== Eigene Templates für E-Mails ====
 +
 +Aktuell ist das Form Framework so eingerichtet, dass die o.g. templateRootPaths **nicht** für die E-Mail-Templates gelten.
 +
 +Bis dies behoben ist, können alternative Templates direkt im Finisher des Formulars verknüpft werden.
 +
 +**ContactForm.yaml**
 +<code yaml>
 +finishers:
 +  -
 +    identifier: EmailToSender
 +    options:
 +      subject: '{subject}'
 +      recipientAddress: your.company@example.com
 +      recipientName: '{name}'
 +      senderAddress: '{email}'
 +      senderName: ''
 +      replyToAddress: ''
 +      carbonCopyAddress: ''
 +      blindCarbonCopyAddress: ''
 +      format: html
 +      attachUploads: 'true'
 +      templatePathAndFilename: 'EXT:form_distribution/Resources/Private/Frontend/Templates/Finishers/Email/{@format}.html'
 +</code>
 +
 +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> </code>
typo3/form.1499359135.txt.gz · Zuletzt geändert: 2017/07/06 18:38 von admin