Ich möchte bei einem Textfeld eine individuelle Eingabeprüfung einsetzen. Beipiel: Er soll überprüfen, ob der Feldwert von Name == "Hans" ist.
Gibts da irgendeine Möglichkeit es zu tun? Notfalls mit Templateanpassung?
Ich möchte bei einem Textfeld eine individuelle Eingabeprüfung einsetzen. Beipiel: Er soll überprüfen, ob der Feldwert von Name == "Hans" ist.
Gibts da irgendeine Möglichkeit es zu tun? Notfalls mit Templateanpassung?
Du willst dich bei mir bedanken?
Ich freue mich über Geschenke von meiner Amazon-Wunschliste.
Contao-Anwender seit 2008
Contao-Entwickler seit 2013, mehr als 50 Contao Erweiterungen programmiert
Mein Unternehmen aus Blankenburg (Harz): Fast & Media
Hallo Stranger,
eigene Eingabeprüfungen für Formularfelder kannst Du in TYPOlight per Hook 'addCustomRegexp' integrieren.
Kurz mit konkretem Beispiel erläutert:
a) damit die Eingabeprüfung im Formulargenerator im DropDown 'Eingabeprüfung' erscheint, entweder in der system/config/dcaconfig.php oder in einem eigenen Modul-Verzeichnis in einer Datei config.php die folgende Zeile:
b) zur Registrierung Deiner callback-Funktion weiterhin die ZeilePHP-Code:
$GLOBALS['TL_DCA']['tl_form_field']['fields']['rgxp']['options'][] = 'myCustomRegexp';
c) in einem eigenen Modul-Verzeichnis legst Du eine Klasse mit der Prüfung an, z.B. Datei 'MyRegexps.php':PHP-Code:
$GLOBALS['TL_HOOKS']['addCustomRegexp'][] = array('MyRegexps', 'checkName');
PHP-Code:
<?php
class MyRegexps extends Backend
{
/**
* eigene Eingabepruefung fuer Formularfeld per Hook 'addCustomRegexp'
*/
public function checkName($strRegexp, $varValue, Widget $objWidget)
{
if ($strRegexp == 'myCustomRegexp')
{
if ($varValue != 'Hans')
{
$objWidget->addError('Feld ' . $objWidget->label . ' akzeptiert nur "Hans".');
}
return true;
}
return false;
}
}
Hoffe, das hilft Dir weiter.
Schöne Grüße
Thomas
Vielen Dank, das hat mir sehr weitergeholfen! Schade ist allerdings, dass eben nicht im Backend einzusätzliches Eingabefeld auftaucht in welchem man den individuellen Wert hineinschreibt. Übrigens taucht noch ein Fehler auf: Im Backend in der Select-Liste taucht der neue Wert jetzt 3 mal auf. Woran liegt das?
Du willst dich bei mir bedanken?
Ich freue mich über Geschenke von meiner Amazon-Wunschliste.
Contao-Anwender seit 2008
Contao-Entwickler seit 2013, mehr als 50 Contao Erweiterungen programmiert
Mein Unternehmen aus Blankenburg (Harz): Fast & Media
Hallo Stranger,
da habe ich im Beispiel etwas "gepfuscht" (obwohl der Eintrag bei mir dennoch nur einmal auftaucht).Übrigens taucht noch ein Fehler auf: Im Backend in der Select-Liste taucht der neue Wert jetzt 3 mal auf. Woran liegt das?
Du hast die Zeile in der dcaconfig.php eingetragen?
Es kann sein, dass diese Datei mehrfach "geladen" wird, und somit jedesmal die zusätzliche Option ergänzt wird.
Der Eintrag sollte daher besser lauten:
PHP-Code:
if (!is_array($GLOBALS['TL_DCA']['tl_form_field']['fields']['rgxp']['options'])
|| !in_array('myCustomRegexp', $GLOBALS['TL_DCA']['tl_form_field']['fields']['rgxp']['options']))
{
$GLOBALS['TL_DCA']['tl_form_field']['fields']['rgxp']['options'][] = 'myCustomRegexp';
}
danach hattest Du bisher auch nicht gefragt, läßt sich auch ergänzen, aber dann würde das hier schon zu nem "Widget-Tutorial". Mal sehen, vielleicht am Wochenende....Schade ist allerdings, dass eben nicht im Backend ein zusätzliches Eingabefeld auftaucht in welchem man den individuellen Wert hineinschreibt
Auf die Schnelle, wenn Du unterschiedliche Werte in unterschiedlichen Feldern zulassen möchtest, könntest Du die auch innerhalb Deiner Funktion hinterlegen (nicht getestet) :
(In der Fehlermeldung den erlaubten Wert anzuzeigen ist sicher nicht sinnvoll, ist nur als Beispiel, wie die zugehörige Fehlermeldung erzeugt wird)PHP-Code:
<?php
class MyRegexps extends Backend
{
/**
* eigene Eingabepruefung fuer Formularfeld per Hook 'addCustomRegexp'
*/
public function checkName($strRegexp, $varValue, Widget $objWidget)
{
if ($strRegexp == 'myCustomRegexp')
{
// Array mit den erlaubten Werten, z.B. als Schüssel die ID des Formularfelds
$arrAllowed = array(
23 => "Hans",
9 => "der erlaubte Wert"
);
if (strlen($arrAllowed[$objWidget->id]))
{
if ($varValue != $arrAllowed[$objWidget->id])
{
$objWidget->addError('Feld ' . $objWidget->label . ' akzeptiert nur "' . $arrAllowed[$objWidget->id].'".');
}
return true;
}
}
return false;
}
}
Hoffe, hilft wieder ein Stück weiter,
Schöne Grüße
Thomas
Geändert von tom (03.07.2009 um 17:55 Uhr)
Ist es möglich die Eingabeprüfung auch im Feldtyp SelectMenü ein zu blenden? Der User wählt aus verschiedenen Tagen (Select Optionen) aus und wenn er den heutigen wählt soll zb eine Meldung ausgegeben werden...
Life would be easier if I had the source code!
Moin,
tschuldigung, wenn ich den Thread hier recycle aber ich glaube hier könnte die Lösung für ein ziemlich dringendes Problem von mir liegen.
Ich habe in diesem Thread schon erreicht, mir ein eigenes Feld in der Registrierung anzulegen. Zwar gibt es noch ein Problem, weil die Datenbank scheinbar nicht aktualisiert wird - könnte an einem veralteten Tutorial liegen - aber was jetzt noch fehlt, ist, dass ich im Backend in dem Registrierungs-Modul ein Eingabefeld benötige, in das der Kunde ein Kennwort eingeben kann. Dieses Kennwort ist Bedingung für eine erfolgreiche Benutzerregistrierung. Wie schaffe ich es nun, eine Eingabeprüfung hinzuzufügen?
Anbei nochmal meine Arbeitsdateien
wfcode.zip
Ich wäre über eine rettende Idee unendlich dankbar!
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
Lesezeichen