TYPO3 Plugin:
golib_form
golib_form
Datenspeicherung
golib_form
unterstützt die Möglichkeit, Formulardaten zu speichern: sitzungsbasiert und innerhalb des Formulars. Sitzungsbasierter Speicher ist der Standard.
Die sitzungsbasierte Datenspeicherung hat den Vorteil, dass ein versehentliches Neuladen des Browsers durch den Benutzer nicht alle Formulardaten löscht. Die Daten werden in einer separaten Sitzungsvariablen pro Formular gespeichert, die auf dem Formularnamen basiert.
Wenn die sitzungsbasierte Speicherung keine Option ist, kann man die Speicherung in Form von Daten durch Aufrufen aktivieren:
$form->useEncryptedStringStore();
Für die Speicherung in Formularen werden die Daten in einem versteckten Feld innerhalb des Formulars verschlüsselt gespeichert. Dies ist notwendig, da golib_form
davon ausgeht, dass der saubere Speicher vom Benutzer nicht veränderbar ist.
Feldfähigkeiten
-
defaultValue($value)
: Setzt den Standardwert für ein Feld, das so lange angezeigt wird, wie kein Feld vom Benutzer eingegeben wurde. CAVEAT: Wenn der Standardwert dynamisch generiert wird, haben Aktualisierungen keine Wirkung, sobald der Benutzer das Formular einmal abgeschickt hat, da dieser den vom Benutzer übermittelten Wert für das Formularfeld speichert, der den Standardwert ersetzt. -
platzhalter ($value)
: Setzt einenPlatzhalter="""
Wert für das Formularfeld. Zur Zeit funktioniert es nur für Textfelder und Textbereiche. -
Weitere Methoden können durch Rücksprache mit der Quelle entdeckt werden :)
Feldtypen
Es gibt zwei Grundfeldtypen, "Einzelwertfelder" und "Mehrwertfelder". Erstere sind diejenigen, die nur einen einzelnen Marker in die Vorlage rendern (z.B. ein Textfeld), während letztere mehrere Marker rendern (wie ein Radiobutton).
TEXT
- Typ:
Einzelwert
Rendert ein einfaches Textfeld. Anwendungsbeispiel:
$step->addField('name', tx_golibform_field::TEXT)
->defaultValue('John Doe')
->getValidator()
->erforderlich();
EINZELNES_KÄSTCHEN
- Typ:
Einzelwert
Stellt ein "boolesches" Kontrollkästchen dar, d.h. ein Kontrollkästchen, das entweder aktiviert oder deaktiviert werden kann (im Gegensatz zu einem Kontrollkästchen, bei dem mehrere ausgewählte Werte zu einem Array von ausgewählten Werten führen). Anwendungsbeispiel:
$step->addField('send_newsletter', tx_golibform_field::SINGLE_CHECKBOX)
->checkedByDefault();
MULTI_CHECKBOX
- Typ:
Mehrwertig
Stellt eine Gruppe von Kontrollkästchen dar. Ein solches Feld führt beim Absenden des Formulars zu einer Reihe von ausgewählten Werten. Anwendungsbeispiel:
$step->addField('liked_fruits', tx_golibform_field::MULTI_CHECKBOX)
->addValue('banane')
->addValue('apple')
->addValue('cherry');
Dies ergibt drei Formmarker, field_liked_fruits:banana
, field_liked_fruits:apple
und field_liked_fruits:cherry
.
RADIOBUTTON
- Typ:
Mehrwertig
Funktioniert ähnlich wie eine MULTI_CHECKBOX
, jedoch kann für jedes Feld nur ein einzelner Wert ausgewählt werden. Anwendungsbeispiel:
$step->addField('priority', tx_golibform_field::RADIOBUTTON)
->addValue('urgent')
->addValue('low')
->addValue('normal');
TEXTAREA
- Typ:
Einzelwert
Ein einfaches Textfeld. Anwendungsbeispiel:
$step->addField('details', tx_golibform_field::TEXTAREA)
->getValidator()
->Länge (0, 200);
AUSWAHL
- Typ:
Einzelwert
Ein Auswahlfeld.
Hinweis: Die Tatsache, dass sein Typ Singlevalue
ist, könnte zunächst verwirrend sein. Die Definition eines Multivalue-Feldes
besteht darin, dass es jedoch mehrere Marker erzeugt, und da ein SELECT-Feld
nur einen einzigen Marker erzeugen muss, ist es vom Typ Singlevalue
.
Anwendungsbeispiel:
$step->addField('title', tx_golibform_field::SELECT)
->addOption(''', 'Bitte auswählen')
->addOption('herr','Herr')
->adddOption('frau','Frau')
->getValidator()
->erforderlich();
Sie können auch Opt-Gruppen anstelle von einzelnen Optionen hinzufügen, indem Sie addOptGroup
aufrufen:
$step->addField('country', tx_golibform_field::SELECT)
->addOptGroup('Europe', array('spain' =>'Spain','germany' =>'Germany'))),
->addOptGroup('Asia', array('china' =>'China','russia' =>'Russia')));
Beachten Sie, dass Optgruppen und normale Optionen nicht gemischt werden dürfen.
PASSWORT
- Typ:
Einzelwert
Ein Passwortfeld. Anwendungsbeispiel, das jedes Passwort mit dem SHA-1-Algorithmus
hasht, bevor es in die Sitzung geschrieben wird (Hinweis: Passwörter werden niemals in den HTML-Quelltext geschrieben, auch wenn sie im Klartext in die Sitzung geschrieben werden).
$step->addField('password', tx_golibform_field::PASSWORD)
->vor der Validierung (Funktion(function($value, $field)) {
return sha1($value);
})
->getValidator()
->erforderlich();
Bilden Sie Komponenten: Der Renderer
Sie können den Renderer erreichen, indem Sie getRenderer()
auf der Formularinstanz aufrufen. Der Renderer ist dafür verantwortlich, die Formularfelder zu rendern und sie als Vorlagenmarker in die Schnurrbarttemplate des Schrittes einzufügen.
Der Renderer erzeugt für jedes Einzelwertfeld einen einzelnen Feld-_{$name}-Marker
. Für mehrwertige Marker, wie z.B. Radiobuttons, wird für jeden Wert ein Marker mit dem Namen field_{$name}:{$value}
erzeugt. Ein Radiobutton-Feld namens "test" mit zwei möglichen Werten "foo" und "bar" würde beispielsweise die Marker field_test:foo und field_test:bar
ergeben.
Zusätzlich zu den Feldmarkierungen werden Fehlermarkierungen für Felder erstellt, die die Validierung nicht bestanden haben, und sie heißen field_{$name}_error
und enthalten lediglich das boolesche WAHR
. Wenn Sie diesen Wert anpassen möchten, verwenden Sie setFieldErrorValue
auf dem Renderer.
fehlerhafteFelderWrapper
Ermöglicht es, alle Felder, in denen ein Eingabefehler aufgetreten ist, mit einer beliebigen Zeichenkette am Anfang am Ende zu umschließen. Zum Beispiel:
$form->getRenderer()->erroneousFieldsWrapper(function($field) {
return array('<div class="error">', '</div>');
});
Würde <div class="error"><input.../></div> für jedes erronoeus
Feld ergeben.
vor der Ausführung des Rückrufs
Wenn Sie der Template-Instanz, die aus dem Formular gerendert wird, benutzerdefinierte Marker hinzufügen müssen, können Sie dies im BeforeRendering-Callback
des Renderers tun:
$form->getRenderer()->vorRendering(function($template, $form) {
$template->my_custom_marker = "nice!";
});
Dieser Callback wird kurz vor dem eigentlichen Rendern der Vorlage durch golib_mustache
aufgerufen, so dass auch alle anderen automatisch für das Formular generierten Marker verfügbar sind.
Drucken der eingegebenen Formularwerte
Alle validierten Formularwerte sind als Marker innerhalb der Vorlage unter Verwendung der folgenden Syntax zugänglich:
{{field_<name>_value}}}} {{field_<name>_value}}}}
Für den Wert des Feldnamens
wäre beispielsweise die Markierung mit dem zuletzt eingegebenen und erfolgreich validierten Wert:
{ }}}}
Vorlagen
Um ein konfiguriertes Feld zur Vorlage eines Schrittes hinzuzufügen, sagen wir den Feldnamen
, haben Sie zwei Möglichkeiten:
{{{ }}}}}}}
rendert das angegebene Feld einfach so, wie es konfiguriert wurde, als vollständiges HTML-Formularfeld, das vom fehlerhaftenFieldsWrapper
umgebrochen werden kann (beachten Sie die drei Schnurrbartklammern anstelle von zwei!). Wenn Sie eigene HTML-Attribute in das Formularfeld einfügen möchten, können Sie dies tun:
{{#field_name}}}style="Hintergrund: rot;"{{{/field_name}}}}}
Dadurch wird das Namensfeld
mit den zusätzlichen HTML-Attributen angezeigt.
Formularschritte
Jedes Formular besteht aus mindestens zwei Schritten, einem, der die Eingabefelder des Formulars enthält und einem, der die erfassten Formulardaten verarbeitet. Ein solches Mindestformular würde so erstellt werden:
$form = tx_golibform::createWithPlugin($this);
$step1 = $form->addStep('step1')
->Nachfolger (array('step2'));
/ [ [..... Felder hinzufügen ...]
$step2 = $form->addStep('step2')
->setFinal();
$form->duringFinalization(function($x) {
var_dump($x->getFieldValues()));
});
golib_form
unterstützt jedoch Formulare mit einer beliebigen Anzahl von Schritten. Außerdem dürfen die Schritte nicht "step1"... "stepN" heißen. Wenn ein Schritt eingereicht (und erfolgreich validiert) wurde, wird der erste Nachfolger des eingereichten Schrittes angezeigt. Dieses Verhalten kann z.B. durch die Übermittlung der Steuervariablen des next_step-Formulars
geändert werden:
<Dies zeigt "step5" an, wenn es sich um einen gültigen Nachfolger des aktuellen Schrittes handelt -->
<Eingabetyp="submit" name="{ }}" wert="step5" />
Beachten Sie, dass golib_form
standardmäßig nur den Sprung zu den Schritten erlaubt, die als Nachfolger des aktuellen Schrittes angegeben sind. Wenn Sie möchten, dass die Benutzer zu jedem abgeschlossenen Schritt springen können, können Sie tx_golibform#allowJumpingToCompletedSteps
aufrufen.
Der Vorgänger eines jeden Schrittes wird automatisch aus den angegebenen Nachfolgern ermittelt. Zum Beispiel:
$form->addStep('step1_1')->Nachfolger(array('step2','step1_2')));
$form->addStep('step1_2')->Nachfolger(array('step4')));
$form->addStep('step3')->Nachfolger(array('step4')));
$form->addStep('step4')->setFinal();
In diesem Beispiel ist der standardmäßige "Pfad" durch das Formular rot markiert. Der Vorgänger eines jeden Schrittes ist derjenige, der entlang des Standardpfades vor ihm liegt. So ist der Vorgänger von "step4" in diesem Beispiel "step3" und nicht "step1_2".
Zurück zu den vorherigen Schritten
Für eine "Zurück"-Taste sind mehrere Verhaltensweisen möglich (für alle ist die Validierung des aktuell aktiven Schrittes deaktiviert):
-
Die Angabe von
+back-to-predecessor
(beachten Sie das+
Zeichen) als Wert fürname_next_step
führt zu dem Schritt, den das Formular als Vorgänger des aktuell aktiven Schrittes betrachtet (siehe oben für eine Erläuterung, wie der Vorgänger bestimmt wird). -
Die Angabe von
+back-to-previous
(beachten Sie das+
Zeichen) als Wert fürnext_step_name
führt zu dem Schritt, den der Benutzer zuletzt eingegeben hat. Wenn wir im obigen Beispiel Schritt1_2 für Schritt4 verlassen haben, würde back-to-previous zu diesem Schritt zurückkehren und nicht zum Vorgänger von Schritt4.
Validierung
Benutzerdefinierte Validierungen
Wenn die von Ihnen benötigte Validierung nicht im Standard-Validierer implementiert ist, können Sie eine benutzerdefinierte Validierung verwenden. Zum Beispiel:
$field->getValidator()
->custom("Die ersten drei Zeichen müssen 'foo' sein", function($value) {
gibt substr($value, 0, 3) ===== "foo" zurück;
});
Wenn Sie den Wert anderer Formularfelder in einer benutzerdefinierten Validierung benötigen, können Sie Folgendes tun:
funktion configureForm($form) {
[...]
$step = $form->addStep('step1');
$field1 = $step->addField('field1', tx_golibform_field::TEXT);
$field2 = $step->addField('field2', tx_golibform_field::TEXT);
->getValidator()
->custom("Summe zweier Felder muss 42 sein", function($value) use($form) {
$fields = $form->getFields();
$otherValue = $fields["step1_field1"]->getLatestValue();
return (intval($value) + intval($otherValue)) ==== 42;
});
[...]
}
Ausführen der Komponententests
Da das TYPO3 phpunit Backend-Modul nicht die gleichen Funktionen wie der Kommandozeilen-Testläufer hat, müssen Sie den Test von der Shell aus ausführen, wie hier:
php -c '/usr/local/etc/php/5.5/php.ini' /path/to/typo3/cli_dispatch.phpsh phpunit --coverage-html typo3conf/ext/ext/golib_form/coverage --configuration typo3conf/ext/golib_form/Tests/config.xml typo3conf/ext/golib_form/ext
Diese sollte aus dem TYPO3-Stammverzeichnis gestartet werden. Wenn Sie die Code-Coverage-Informationen nicht benötigen/wollen, entfernen Sie einfach den Teil --coverage-html
.
Hinweis: Sie müssen golib_phpunit
in typo3conf/ext/
installiert haben.
TODO
Merkmale
- Wie können wir AJAX-Formulare einfach gestalten?
- Sollten Double Opt-Ins in diese Erweiterung integriert werden?
- Validatoren:
- Captcha-Feld?
- Eindeutigkeit in der Tabelle (z.B. Feld Benutzername?)
- Erstellen Sie
- Vorverarbeitung (z.B. Tagesdatum, Vorschlagswerte, Zufallswerte)
- Nachbearbeitung (wenn Feld B leer ist, kopieren Sie den Wert aus Feld A)
- konfiguration durch Typoscript?
- Integrieren Sie dies mit dem golib_form: http://parsleyjs.org/documentation.html
-
Derzeit ist es nicht möglich, ein Feld basierend auf dem Inhalt eines anderen Formularfeldes zu validieren, es sei denn, Sie verwenden einen benutzerdefinierten Validierer. Eine Funktionalität wie die folgende wäre schön:
$field->getValidator()->sameAsField($fieldInstance); // Durch Übergabe einer tx_golibform_field-Instanz / / oder $field->getValidator()->sameAsField("step1_name"); // Durch Übergabe einer vollständigen Feldbezeichnung
API-Normalisierung
- Entweder muss der Renderer#vor dem Rendern nach golib_form (nicht bevorzugt) oder golibform#nach dem Rendern in die Rendererklasse verschoben werden.
Benötigen Sie schnelle Hilfe mit dieser Extension? Unser Team von erfahrenen TYPO3-Entwicklern löst Probleme unkompliziert und zum Stundensatz.
Verteilung:GOLIB_FORM ist auf
0 % aller TYPO3 installiert.
- 0.02 % aller TYPO3 7.6.x Installationen installiert
Aktualität:GOLIB_FORM ist auf dem neusten Stand (v.unknown) bei
100 % aller TYPO3 Installationen
- 0 % aller TYPO3 9.5.x Installationen
- 0 % aller TYPO3 9.3.x Installationen
- 0 % aller TYPO3 9.2.x Installationen
- 0 % aller TYPO3 8.7.x Installationen
- 0.02 % aller TYPO3 7.6.x Installationen
- 0 % aller TYPO3 7.5.x Installationen
- 0 % aller TYPO3 7.4.x Installationen
- 0 % aller TYPO3 7.3.x Installationen
- 0 % aller TYPO3 7.2.x Installationen
- 0 % aller TYPO3 7.1.x Installationen
- 0 % aller TYPO3 7.0.x Installationen
- 0 % aller TYPO3 6.2.x Installationen
- 0 % aller TYPO3 6.1.x Installationen
- 0 % aller TYPO3 6.0.x Installationen
- 0 % aller TYPO3 5.0.x Installationen
- 0 % aller TYPO3 4.7.x Installationen
- 0 % aller TYPO3 4.6.x Installationen
- 0 % aller TYPO3 4.5.x Installationen
- 0 % aller TYPO3 4.4.x Installationen
- 0 % aller TYPO3 4.3.x Installationen
- 0 % aller TYPO3 4.2.x Installationen
- 0 % aller TYPO3 4.1.x Installationen
- 0 % aller TYPO3 4.0.x Installationen
- 0 % aller TYPO3 3.5.x Installationen
Gosign-Responsive Index: TYPO3 Installationen nutzen GOLIB_FORM zu
- 100 % wenn der Gosign-Responsive-Index zwischen 80 % und 100 % ist
- 0 % wenn der Gosign-Responsive-Index zwischen 60 % und 80 % ist
- 0 % wenn der Gosign-Responsive-Index zwischen 40 % und 60 % ist
- 0 % wenn der Gosign-Responsive-Index zwischen 20 % und 40 % ist
- 0 % wenn der Gosign-Responsive-Index zwischen 0 % und 20 % ist
Pagespeed: TYPO3 Installationen nutzen GOLIB_FORM zu
- 0 % wenn der Pagespeed zwischen 80 % und 100 % ist
- 0 % wenn der Pagespeed zwischen 60 % und 80 % ist
- 0 % wenn der Pagespeed zwischen 40 % und 60 % ist
- 0 % wenn der Pagespeed zwischen 20 % und 40 % ist
- 100 % wenn der Pagespeed zwischen 0 % und 20 % ist
[DependciesAndConflicts]