Zum Inhalt springen

sr_feuser_register - Globale Fehlermeldung

Erstellt am 2. März 2010 · 9 Antworten · letzte Antwort am 7. März 2010

Tags: Frontend-Benutzer, Frage

da.​max ·

Hi Leute,

ist es möglich in sr_feuser_register 2.5.24 eine globale Fehlermeldung zu definieren.

D.h. ich möchte beispielsweise zu Beginn des Registrierungsformulars einen HinweisBlock bei einem Eingabefehler ausgeben. Z.B. "Achtung: Korrigieren Sie bitte die markierten Felder".
Also nicht nur die Fehlermeldung beim jeweiligen Feld, sondern auch gleich allgemein zu Formularbeginn.

Vielen Dank für einen Hinweis
da.max

Unbekannter Benutzer ·

Du kannst der EXT:srfeuserregister eigene Marker hinzufügen.

Im TYPOScript Template für das Plugin 'extraLabels' definieren, und übersetzen:

plugin.tx_srfeuserregister_pi1.extraLabels = my_label_a,my_label_b,my_label_c
plugin.tx_srfeuserregister_pi1._LOCAL_LANG.default {
  my_label_a = This is label A
  my_label_b = This is label B
  my_label_c = This is label C
}

Diese Marker dann im HTML-Template an entsprechender Stelle nutzen:

###LABEL_MY_LABEL_A###
###LABEL_MY_LABEL_B###
###LABEL_MY_LABEL_C###
da.​max ·

hi,

danke für das superschnelle Feedback.

Aber wie kann ich sagen, dass diese Marker nur bei irgend einem Fehler gesetzt werden sollen?

Danke
da.max

Unbekannter Benutzer ·

Bin da auch nochmal gerade drüber gestolpert, weil es bei längeren Formularen nicht ersichtlich ist, dass Felder nicht ODER nicht korrekt ausgefüllt wurden, und der Besucher verwirrt klagt.
Versuche jetzt gerade über die Funktion '$this->controlData->getFailure()' diesen gesuchten Hinweis im Template zu befüllen.
Wenn Du da selbst schon eine Lösung gefunden hast, würde es mich freuen, wenn Du es hier mitteilst.

Unbekannter Benutzer ·

Gelöst:
einfach im HTML-Template folgenden SubpartMarker einfügen.

<!-- ###SUB_REQUIRED_FIELDS_WARNING### -->
  <p style="color:red">
    FEHLER, die markierten Felder wurden nicht korrekt ausgefuellt
  </p>
<!-- ###SUB_REQUIRED_FIELDS_WARNING### -->

Wird nur bei Fehlern angezeigt, ansonsten mit leerem Wert überschrieben.
Siehe:
../ext/sr_feuser_register/view/class.tx_srfeuserregister_display.php (v2.5.24)
Line: 89 für 'editForm' oder 172 für 'createScreen'

Unbekannter Benutzer ·

noch besser und multilanguage-tauglich:

im HTML-Template

<!-- ###SUB_REQUIRED_FIELDS_WARNING### -->
<p class="tx-srfeuserregister-pi1-error"> ###LABEL_REQUIRED_FIELDS_WARNING###</p>
<!-- ###SUB_REQUIRED_FIELDS_WARNING### -->

im TS-Template

plugin.tx_srfeuserregister_pi1.extraLabels = required_fields_warning
plugin.tx_srfeuserregister_pi1._LOCAL_LANG {
  default.required_fields_warning = Please check your entries.
  dk.required_fields_warning = Tjek dine oplysninger.
  de.required_fields_warning = Bitte überprüfe Deine Angaben.
}
Unbekannter Benutzer ·

evtl. habe ich etwas falsch konfiguriert, aber mir fällt dabei gerade auf, dass mit dieser Lösung jedes leere Create-Formular mit einer Fehlermeldung beginnt.
Der Fehler rührt aus einem nicht gesetzten 'submit' (es wurde ja auch noch nichts abgeschickt). Sehe mich deshalb gezwungen, diese globale Fehlermeldung zumindest aus dem Create-Formular zu entfernen, da es im Edit-Formular sozusagen 'fehlerfrei' funktioniert.

da.​max ·

hi enobe,

erstmal vielen Dank für den Feedback und entschuldige die späte Antwort.

Aufgrund deiner Inspiration habe ich folgendes genauer angeschaut:
../ext/sr_feuser_register/view/class.tx_srfeuserregister_display.php (v2.5.24)
Line: 89 für 'editForm' oder 172 für 'createScreen'

Line 89 (für Create):

$failure = t3lib_div::_GP('noWarnings') ? '': $this->controlData->getFailure();
   if (!$failure) {
      $templateCode = $this->cObj->substituteSubpart($templateCode, '###SUB_REQUIRED_FIELDS_WARNING###', '');
   }

Line 172 (für Edit):

$failure = t3lib_div::_GP('noWarnings') ? FALSE: $this->controlData->getFailure();
   if ($failure == FALSE)    {
      $templateCode = $this->cObj->substituteSubpart($templateCode, '###SUB_REQUIRED_FIELDS_WARNING###', '');
}

Fazit:
Wie Du schon festgestellt hast, liefert beim CREATE die $this->controlData->getFailure(); schon einen "submit" (OBWOHL NICHT ABGESCHICKT und warum auch immer!) und geht somit nicht in den nachfolgenden IF-Zweig um den entsprechenden Marker zu löschen.
Des Weiteren wenn man sich das genauer anschaut, dann müsste man die CREATE-Seite mit dem QUERY ...?..&noWarnings=1 aufrufen, damit der Marker gelöscht werden würde. Nur wollte ich das für mich nicht!

Ich habe nun auf die schnelle ("Quick&Dirty") eine Lösung für mich hingebastelt.

Ich habe in das Template bei CREATE und EDIT (tx_srfeuserregister_pi1_css_tmpl.html) ein zusätzliches HIDDEN-FIELD definiert.

<input type="hidden" name="tdsent" value="1" />

und nun die entsprechenden Zeilen in
../ext/sr_feuser_register/view/class.tx_srfeuserregister_display.php (v2.5.24)
Line: 89 für 'editForm' oder 172 für 'createScreen' angepasst.

Line 89 (für Create):

$tdsent = (int)t3lib_div::_GP('tdsent');
$failure = (!$tdsent or t3lib_div::_GP('noWarnings')) ? FALSE: $this->controlData->getFailure();
   if ($failure === FALSE) {
      $templateCode = $this->cObj->substituteSubpart($templateCode, '###SUB_REQUIRED_FIELDS_WARNING###', '');
   }

Line 172 (für Edit):

$tdsent = (int)t3lib_div::_GP('tdsent');
$failure = (!$tdsent or t3lib_div::_GP('noWarnings')) ? FALSE: $this->controlData->getFailure();
   if ($failure === FALSE)    {
      $templateCode = $this->cObj->substituteSubpart($templateCode, '###SUB_REQUIRED_FIELDS_WARNING###', '');
}

In Zeile 89 und 172 erzeuge ich beim Erstaufruf der Formulare CREATE und EDIT durch !$tdsent (mein HIDDEN-Field) ein FALSE wodurch der IF-Zweig ausgeführt und somit die Meldung gelöscht wird.
Und siehe da es funktioniert einwandfrei.

Also nochmal vielen Dank, dass Du mich auf die richtige Spur gebracht hast.

LG
da.max

P.S: Jetzt stellt sich nur die Frage wie kriegt man eine Korrektur der Original-Extension hin? An den Entwickler schreiben? Bug-Tracker?
Gibt's hier ein Standard-Vorgehen?

Unbekannter Benutzer ·

Du hast recht: das mitgeben des GET-Parameters '&noWarnings=1' funktioniert tadellos. Danach wird die Überprüfung der gesendeten Daten auch wieder mit 'globaler Fehler Meldung' angezeigt, wenn Fehler auftreten, weil dieser Parameter nicht mit dem absenden des Formulars übergeben wird. Nur kann ich diesen Punkt redaktionell nicht sicherstellen.

Die beiden von Dir genannten Methoden der Klasse 'tx_srfeuserregister_display' werde ich nicht ändern. Da es mir genau darum ging: Update-tauglich zu bleiben.

Ich finde Deinen Ansatz noch nicht ausgereift genug, um es in die Extension aufzunehmen. Aber grundsätzlich gehört dieses fehlende Feature in den BugTracker der Extension: http://bugs.typo3.org/. Dort wird auch auf diverse Hinweise schnell reagiert.

Ich bin der Meinung, der Ursprung dieser ungewollten Fehler-Meldung zu Beginn des Registrierungsformulares stammt aus der Methode 'doProcessing' in der Klasse '../sr_feuser_register/control/class.tx_srfeuserregister_control.php' Zeile: 327 (version 2.5.24). Denn da wird diese FehlerMeldung gesetzt.

Bin dann an dieser Stelle ausgestiegen, und konnte keinen passenden Bugfix schreiben. Wer ihn findet, sollte diesen in den Bugtracker geben, denn ich denke, dass das mit dem Marker ###SUB_REQUIRED_FIELDS_WARNING### hinterlegte Feature noch nicht bis zu Ende durchentwickelt ist. Sicher ein Grund, weshalb sich dieser Marker auch nicht in den Template-Beispielen befindet.