Inhaltspezifische Aktionen

Howto

Adapter

Text- oder HTML-Mail?

In Formular-Ordner unter "Mail-Adapter bearbeiten" können Sie Ihren Adapter auf Text-Mail einstellen:

  1. Mail-Adapter bearbeiten
  2. Typ des Mail-Körpers: "Text"  auswählen
  3. und Standart Mail-Körper-Template wie folgt ersetzen :

<tal:block repeat="field options/wrappedFields"> <div tal:replace="field/fgField/widget/label" />: <div tal:replace="structure python:field.htmlValue(request)" /> </tal:block>

Mail-Adapter bearbeiten

Info: Sie können mehrere Mailer-Adapter in einem Formular verwenden sodass ein Mailer-Adapter eine Mail an denjenigen sendet, der das Formular ausgefüllt hat und ein anderer Adapter die Formulardaten an Sie selbst schickt.

Beim anlegen eines FormFolders wird der Mail-Adapter automatisch hinzugefügt. Data-Adapter kann nachträglich erstellt werden. Über Mail-Adapter -> Überschreibungen können die Standardfelder überschrieben werden:

Subject Expression (Betreff)

python:'Vielen Dank' + request.get('name', 'Standardwert')
python:'HRZ-Shop - Bestellung: ' '+ str(DateTime().strftime('%Y-%m-%d-%H-%M'))
python:'HRZ-Shop - Bestellung: ' + request.get('hostname', ' ')
python:'Bewerbung Stipendium' + ' : ' + request.form['nachname'] + ', ' + request.form['vorname'] wir ausgegeben: Bewerbung Stipendium : Nachname, Testvorname

Dabei ist name die ID eines Feldes, in die der Name desjenigen eingetragen werden soll, der das Formular ausgefüllt hat und Plonista der Standardwert, der eingetragen wird sofern kein Eintrag in name erfolgte.

python:'IP Antrag ' + request.get('topic', 'default-value')

Dabei ist topic die ID des Betreffs

Sender Expression (Absender)

statisch:

string:Cafer.Travaci@hrz.uni-giessen.de
python:request.form.get('first-name')
python:request.form.get('last-name')

oder dynamisc:

request/form/replyto oder
python:request.form['email']

Empfänger ist der Absender

here/memberFullName

here/memberEmail

Recipient Expression (Empfänger)

statisch:

string:Cafer.Travaci@hrz.uni-giessen.de

oder dynamisch

request/form/replyto oder
python:request.form['email']

Danke-Seite

Danke Seite wird automatisch angelegt und bei einer erfolgreichen Aktion den Sender dargestellt. Sie können den Benutzer nach dem senden auf einen andere Seite weiterleiten:

redirect_to:string:bedankungs-seite

Dynamsiche Inhalte zum EMail-Text hinzufügen. Beim Mail-Adapter -> Template können Sie dynamische Inhalte hinzufügen:

<tal:block tal:content="python:request.form.get('first-name', 'Supporter')"/>

Formular-Wizard:

http://plone.org/products/ploneformgen/documentation/how-to/create-a-multi-page-form

http://www.plone-nutzerhandbuch.de/erweiterungen/ploneformgen/erstellen-mehrseitiger-formulare.html

Validierung

Bei jedem Feld stehen verschiedene Validierungs-Optionen zur Verfügung. Unter " Personalisierter Validator " eines Feldes können Sie eigenen Validator definieren:

python: test(value=='password', False, 'bitte geben Sie das richtige passwort ein')
python: value != '8' and 'the answer is false'

Beispiel:

Sie haben ein Auswahlfeld in dem Sie den "Status" einer Person erfragen, z.B. Student, Mitarbeiter, Externer
Je nach Angabe variieren die weiteren Pflichtfelder. So ist es z.B. nur sinnvoll die Matrikel-Nr bei Studierenden abzufragen.

python:test(request.form['anfragebereich']!='Student' and
test(value==''), False, 'Bitte geben Sie Ihre Matrikelnummer an')

auch der Mail-Adapter kann validiert werden s. Mail-Adapter -> Execution Condition:

python:request.form['fbnummer'] != 'FB11'

man kann mehrere Adapter erstellen und bei jedem andere Bedingung eingeben.

mailer1 - mail1@hrz.uni-giessen.de

Bespiel1: python:request.form['fbnummer'] == 'FB11'
Bespiel2: python:test((request.form['fbnummer'] == 'FB11' and request.form['fb-nummer-e'] == '-' ) or (request.form['fb-nummer-e'] == 'FB11'))

mailer2 - mail12@hrz.uni-giessen.de

Bespiel1: python:request.form['fb-nummer-e'] != 'FB11'
Bespiel2: python:test((request.form['fbnummer'] != 'FB11' and request.form['fb-nummer-e'] == '-') or (request.form['fb-nummer-e'] != '-' and request.form['fb-nummer-e'] != 'FB11'))

Feldnamen überprüfen:

Dateien überprüfen:

python:test(request.form['SAPKONTOAUSZUG_file'].filename !='', False, 'bitte geben Sie das richtige passwort ein')
python:test(request.form['ZWISCHENBERICHTHOCHLADEN_file'].filename !='' and request.form['NEUFOLGEANTRAG'] == 'F', False, 'Bitte reichen Sie bei Folgeanträgen einen Zwischenbericht und einen aktuellen SAP-Kontoauszug für das Projekt ein')
python: test('.pdf' in value.filename, False, 'File must be a PDF')
python: test(value.filename, False, 'File must be a File')
python:test(request.form['A2']=='x', False, 'Bitte laden sie die Datei hoch') python:test(test(value.filename!=''), False, 'Bitte laden sie die Datei hoch') python:test(request.form['sz_file'].filename !='', False, 'Bitte laden sie die Datei hoch')

python:test(request.form['SAPKONTOAUSZUG_file'].filename !='', False, 'bitte geben Sie das richtige passwort ein')


Compare two fields

erstelle eine PythonScript

confirmEmailAddress

# Example code:

# The if statement must return a space or a message.  It if is '', it will validate the form even if the fields are empty.
request = container.REQUEST

if request.form['e-mail-address'] != request.form['confirm-e-mail-address']:
    return 'Your email address does not match the confirm email address'
else:
    return False

erstelle Custom Validator mit dem Code

python: folder.confirmEmailAddress() 

yada if request.form['fieldA']=='' and request.form['fieldB']=='': return 'You must put a value in either field A or field B' else: return False http://plone.293351.n2.nabble.com/PloneFormGen-Compare-two-fields-td5915271.html

Prüfen am Feld

python:test(request.form['email'] == request.form['emailconfirm'], False, 'Bitte geben Sie die richtige E-Mail-Adresse')

Value Prüfen

python:test(value[:1]=='m', False, 'keine Mitarbeiter')
python:test(value[-14:]=='@uni-giessen.de', False, 'ist keine JLU E-Mail-Adresse.')

einfügen verhindern

<script>
$( document ).ready(function() { $("#emailconfirm").bind('cut copy paste', function(e){
e.preventDefault(); //disable cut, copy, paste from textarea
});
});
</script>



Felder dynamisch überschreiben/erweitern

Felder addieren:

<div tal:content="python:int(request.get('feld1', 'default-value')) + int(request.get('feld2', 'default-value'))">
</div>

Standard-Ausdruck bei 'Kurztext-Feld' oder Vokabular der Optionen bei Mehrfach-Auswahl-Feld

Sie können die Felder auch einzeln überschreiben: Feld "Betreff" öffnen -> bearbeiten -> [Überschreibungen]

python:'Thank you ' + request.get('my-field-id', 'default-value')

Mehrfach-Auswahl-Feld (Checkbox oder Liste) - FormMultiSelectionField

[Überschreibung] -> Vokabular der Optionen

python: ((request.form['fb-nummer'],'Yes'),('junk@yourserver','No'))

überschreibt die erste Option, die unter [standard] -> Optionen  eingeben ist.

preview

preview unter Overrides in "Eigene Formular-Aktion"

s.collective.pfgpreview: To use PloneFormGen preview page: set 'preview' in "Custom Form Action" field of FormFolder

python:DateTime() 

das aktuelle Datum für das Feld "Date/Time Field" s.https://docs.plone.org/working-with-content/managing-content/ploneformgen/faq.html

Script-Adapter:

https://www.python-forum.de/viewtopic.php?t=9435

Über Script Adapter können Sie die Aktion des FormFolders anpassen z.B.:

request.response.redirect('http://webseite.de&request='+fields['request']+'&find_code='+fields['find_code'])
return context.REQUEST.RESPONSE.redirect(url)

leitet die Anfargen an http://webseite.de und gibt die Paramter weiter. Über Formfolder hochgeladene Datei speichern

formFile = request.form['foto_file']
#foto_file = Dateifeld-ID + _file
uploadFolder = getattr(ploneformgen.getParentNode(),'uploads')
#"uploads" ist die ID des Ordners der paralel zum FormGen Ordner liegt
formFileName = 'File-'+ str(DateTime().strftime('%Y-%m-%d-%H-%M'))
uploadFolder.invokeFactory('File',id=formFileName, file=formFile)

Test mit Javascript

<script>
    $(document).ready(function () {
        $("#fg-base-edit input[type=submit]").click(function() {

            var option = $('#A2');
            if (option.val() === '') {
                alert("Please select an item from the list and then proceed!");
                $('#A2').focus();

                return false;
            }
            else return;
        });
    });
</script>

oder

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<script>
$(document).ready(function(){
 $('#A2').change(function () {
 var option =  $('#A2').val();
 if (option != '') {
	alert(job);
	}
  })
})
</script>

weitere Links

  • http://www.plone.uni-bonn.de/search?Subject%3Alist=Formulare
  • https://plone-handbuch-universitat-bonn.readthedocs.io/en/latest/faq/formulare/absendeadresse.html
  • https://docs.plone.org/working-with-content/managing-content/ploneformgen/faq.html
  • https://sixfeetup.com/blog/how-to-allow-users-to-create-site-content-using-ploneformgen
  • http://www.plone.uni-bonn.de/faq/formulare-personalisierter-validator
  • http://plone.org/products/ploneformgen/documentation/
  • http://plone.org/products/ploneformgen/documentation/tutorial/creating-a-registration-form/tricks-for-the-email
  • http://plone.org/products/ploneformgen/documentation/how-to/create-a-multi-page-form
  • https://realpython.com/blog/python/handling-email-confirmation-in-flask/
  • https://plone-handbuch-testing.readthedocs.io/de/latest/artikeltypen/ploneformgen/dateifeld.html
Schlagwörter
2007