YForm Submit-Button no_db Parameter

Quell-ID: GitHub Discussion #34

Use Case

Bei einem YForm-Formular soll der Submit-Button korrekt konfiguriert werden, insbesondere die no_db-Option.

Verwendete AddOns

  • YForm

Problemstellung

Die Parameter-Reihenfolge beim Submit-Feld ist verwirrend und nicht immer klar dokumentiert.

Lösung

Pipe-Schreibweise

submit|submit|senden||1|

Die 1 an Position 5 aktiviert no_db.

PHP-Schreibweise

// Variante 1: Einfach
$yform->setValueField('submit', ['submit', 'senden', '', '1']);

// Variante 2: Mit allen Parametern
$yform->setValueField('submit', ['submit', 'senden', '', '', 'no_db', '']);

// Variante 3: Mit CSS-Klasse
$yform->setValueField('submit', ['submit', 'Anfrage senden', '', '', '', 'btn-secondary']);

Parameter-Übersicht

Position Name Beschreibung
1 name Feldname (meist ‘submit’)
2 label Button-Beschriftung
3 value Wert beim Absenden (optional)
4 - (ungenutzt)
5 no_db ‘1’ = nicht in Datenbank speichern
6 css_class CSS-Klasse(n) für den Button

Vollständiges Beispiel

<?php
$yform = new rex_yform();
$yform->setObjectparams('form_action', rex_getUrl());

// Formularfelder
$yform->setValueField('text', ['name', 'Name']);
$yform->setValueField('text', ['email', 'E-Mail']);
$yform->setValueField('textarea', ['message', 'Nachricht']);

// Submit-Button ohne Datenbank-Speicherung, mit Bootstrap-Klasse
$yform->setValueField('submit', [
    'submit',           // name
    'Absenden',         // label
    '',                 // value
    '',                 // (leer)
    '1',                // no_db
    'btn btn-primary'   // css_class
]);

echo $yform->getForm();

Besserer Ansatz: Lesbare Array-Notation

Für bessere Lesbarkeit kann ein assoziatives Array verwendet werden (erfordert Konvertierung):

<?php
// Helper-Funktion
function yformSubmit(array $config): array
{
    return [
        $config['name'] ?? 'submit',
        $config['label'] ?? 'Absenden',
        $config['value'] ?? '',
        '',
        $config['no_db'] ?? '',
        $config['css_class'] ?? '',
    ];
}

// Verwendung
$yform->setValueField('submit', yformSubmit([
    'name' => 'submit',
    'label' => 'Jetzt absenden',
    'no_db' => '1',
    'css_class' => 'btn btn-lg btn-success',
]));

Pipe-Notation für Table Manager

Im YForm Table Manager (über die GUI) sieht die Definition so aus:

submit|submit|Speichern||1|btn btn-primary

Hinweis zur Dokumentation

Die offizielle Dokumentation zeigt:

$yform->setValueField('submit', array('submit', 'Anfrage senden', '', '', '', 'btn-secondary'));

Das no_db wird hier nicht explizit verwendet, da Submit-Felder standardmäßig nicht gespeichert werden sollten. Die explizite Angabe ist nur notwendig, wenn abweichendes Verhalten gewünscht ist.