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 einen Platzhalter=""" 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ür name_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ür next_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


Stichprobe n=37296 von Gosign gecrawlte TYPO3-Seiten mit den Top-Level-Domains <.de/.ch/.at>