Willkommen Gast. Bitte anmelden oder registrieren.

Autor Thema: Registrierungsformular mit Geburtsdatum falsches Format.  (Gelesen 7255 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

X-Bit

  • Bestätigter Nutzer
  • Beiträge: 6
  • Jede Frage erhält die entsprechende Antwort!
Hallo @alle!

Joomla 2.5.x

Ich hatte das Problem, dass der "Date-Picker", also das Kalendermodul bei den Registrierungen (Profile Plugin aktiviert) immer das amerikanische Datumsformat (Y-m-d) zeigte. Grundsätzlich ist es egal, wenn man es von Hand eingibt, aber es verwirrte ein paar User.

Wenn man dies ändern möchte, dann folgende Zeile komplettieren (in Rot):

\plugins\user\profile\profiles\profile.xml | Ab Zeile 120:

<field
name="dob"
type="calendar"
format="%d.%m.%Y"
label="PLG_USER_PROFILE_FIELD_DOB_LABEL"
description="PLG_USER_PROFILE_FIELD_DOB_DESC"
/>

Jetzt werde die Daten auch über den Date-Picker im europäischen (d-m-Y) Format ausgegeben.

Joomla-Hilfe

  • Oberwetterfrosch (Mod)
  • Beiträge: 155
Antw: Registrierungsformular mit Geburtsdatum falsches Format.
« Antwort #1 am: 02. Mai 2012, 00:50:16 »
Mit
format="DATE_FORMAT_LC4"
müßte an sich das in der Sprachdatei definierte Datumsformat genommen werden. Ist aber ungetestet.
Dietmar

Die Realität ist eine Halluzination, die durch akuten Alkoholmangel hervorgerufen wird.

X-Bit

  • Bestätigter Nutzer
  • Beiträge: 6
  • Jede Frage erhält die entsprechende Antwort!
Antw: Registrierungsformular mit Geburtsdatum falsches Format.
« Antwort #2 am: 02. Mai 2012, 00:57:59 »
habs kurz angetestet mit format="DATE_FORMAT_LC4", scheint nicht zu funktionieren, ich erhalte einen db wert 1999-05-13.

Sorry, hatte noch alte daten auf dem screen. Trotzdem geht es nicht, der Date-Picker scheint dann gar nicht mehr zu funktionieren.

bembelimen

  • moderatives Dielektrikum
  • Beiträge: 227
  • Ich kam, sah und zensierte...
    • Joomla! Vereinsverwaltung
Antw: Registrierungsformular mit Geburtsdatum falsches Format.
« Antwort #3 am: 02. Mai 2012, 01:27:24 »
Das Problem ist aber, dass das Format beim editieren wieder zurück gesetzt wird. Zusätzlich muss man auch darauf achten, dass PHP das Format eindeutig bestimmen kann, da Joomla! vor dem Speichern das nicht umformatiert. Bei MM.DD.YYY dürfte es (ungetestet) Probleme haben.
Joomla! ist auch nur ein Mensch...

Joomla-Hilfe

  • Oberwetterfrosch (Mod)
  • Beiträge: 155
Antw: Registrierungsformular mit Geburtsdatum falsches Format.
« Antwort #4 am: 02. Mai 2012, 02:11:58 »
Bei MM.DD.YYY dürfte es (ungetestet) Probleme haben.
Vermute ich auch. Ich kenne bei Input-Feldern, die mit dem Kalender ausgewählt werden, gar kein anderes Format.

Bei einer reinen Ausgabe ohne Input-Feld kann man es mit der Sprachvariablen beliebig formatieren.
Dietmar

Die Realität ist eine Halluzination, die durch akuten Alkoholmangel hervorgerufen wird.

Firstlady

  • Pink Berserk (Mod)
  • Beiträge: 190
    • www.chmst.de
Antw: Registrierungsformular mit Geburtsdatum falsches Format.
« Antwort #5 am: 02. Mai 2012, 08:11:50 »
Dieses Geburtsdatumsfeld hat mich schon Nerven gekostet - immerhin wird inzwischen die Eingabe 1.10.1990 korrekt umgewandelt.
Zitat
Bei MM.DD.YYY dürfte es (ungetestet) Probleme haben.
Nicht mehr - danke, elkuku :) Stimmt, ein dreistelliges Jahr ist auch nix.

Aber der unbedarfte Benutzer kann auch "1.Mai 90" eingeben - und dann schaut euch das Ergebnis an. DateTime::__construct() [datetime.--construct]: Failed to parse time string (1.mail90) at position 0 (1): Unexpected character.

Ich hab mir überlegt, das Textfeld auf readonly zu setzen. Das hat aber wieder Nebenwirkungen weil das ja in Jhtml abgefragt wird und dann gar keine Eingabe über das Icon angenommen wird. Es wäre auch nicht benuzerfreundlich wenn man 30 oder 60 mal im Kalender das Jahr zurückklicken muss.
Die Uhrzeit-Angabe ist beim Geburtsdatum auch nicht wirklich schön. Ist inzwischen weg

Und gerade noch ein Test: eingabe "jjjj":
Speichern fehlgeschlagen! Fehler: DateTime::__construct() [datetime.--construct]: Failed to parse time string (jjjj) at position 0 (j): The timezone could not be found in the database
Vielleicht gibt es ja mal ein field dob?
Von der usability her wären 3 select-Listen für Jahr / Monat / Tag am sichersten und besten.

Grüße, Christiane


« Letzte Änderung: 02. Mai 2012, 08:38:11 von Christiane »
Grüße, Christiane

Joomla-Hilfe

  • Oberwetterfrosch (Mod)
  • Beiträge: 155
Antw: Registrierungsformular mit Geburtsdatum falsches Format.
« Antwort #6 am: 02. Mai 2012, 11:08:45 »
Von der usability her wären 3 select-Listen für Jahr / Monat / Tag am sichersten und besten.
Select-Listen bietet der Kalender doch an ;)
Dietmar

Die Realität ist eine Halluzination, die durch akuten Alkoholmangel hervorgerufen wird.

Firstlady

  • Pink Berserk (Mod)
  • Beiträge: 190
    • www.chmst.de
Antw: Registrierungsformular mit Geburtsdatum falsches Format.
« Antwort #7 am: 02. Mai 2012, 11:36:23 »
Zitat
Select-Listen bietet der Kalender doch an
Ich meine drei getrennte drop-downs so wie auf dem screenshot. *grübel* hab ich was übersehen bei unserem Kalender?
Grüße, Christiane

Joomla-Hilfe

  • Oberwetterfrosch (Mod)
  • Beiträge: 155
Antw: Registrierungsformular mit Geburtsdatum falsches Format.
« Antwort #8 am: 02. Mai 2012, 12:06:13 »
*grübel* hab ich was übersehen bei unserem Kalender?
Lies mal die Texte im Fuß des Kalenders, wenn du über die verschiedenen Elemente gehst ;)
Dietmar

Die Realität ist eine Halluzination, die durch akuten Alkoholmangel hervorgerufen wird.

bembelimen

  • moderatives Dielektrikum
  • Beiträge: 227
  • Ich kam, sah und zensierte...
    • Joomla! Vereinsverwaltung
Antw: Registrierungsformular mit Geburtsdatum falsches Format.
« Antwort #9 am: 03. Mai 2012, 01:13:20 »
Stimmt, ein dreistelliges Jahr ist auch nix.

Sollte natürlich "YYYY" heißen.

Um jetzt ganz vom Thema abzukommen, hier sind die gültigen Zeitformate, aber bei Joomla! muss man aufpassen. Jeder Int-Wert wird von Joomla! aus Legacy-Gründen als Timestamp gewertet. Leider macht das sehr viel kaputt :(

Lies mal die Texte im Fuß des Kalenders, wenn du über die verschiedenen Elemente gehst ;)

Ich glaube, Christine will eher eine idiotensichere Version, wo man nicht noch nachträglich im Input-Feld rumpfuschen kann. Wäre doch mal echt ein interessantes Feld. Ich fang mal an mit einer Skizze, wie so ein Feld aussehen könnte:

defined('_JEXEC') or die;

class JFormFieldNafuDate extends JFormField
{
    protected $type = 'NafuDate';

    protected function getInput()
    {
        $class = $this->element['class'] ? ' class="' . (string) $this->element['class'] . '"' : '';
$disabled = ((string) $this->element['disabled'] == 'true') ? ' disabled="disabled"' : '';
$onchange = $this->element['onchange'] ? ' onchange="' . (string) $this->element['onchange'] . '"' : '';

// assume YYYY-mm-DD
$date = explode('-', $this->value);
$year = !empty($date[0]) ? (int)$date[0] : 1990;
$month = !empty($date[1]) ? (int)$date[1] : 1;
$day = !empty($date[2]) ? (int)$date[2] : 1;

$return = array();

$days = array();
$months = array();
$years = array();

for ($i = 1; $i <= 31; ++$i)
{
$days[] = JHtml::_('select.option', $i);
}

$months[] = JHtml::_('select.option', 1, JText::_('JANUARY'));
$months[] = JHtml::_('select.option', 2, JText::_('FEBRUARY'));
$months[] = JHtml::_('select.option', 3, JText::_('MARCH'));
$months[] = JHtml::_('select.option', 4, JText::_('APRIL'));
$months[] = JHtml::_('select.option', 5, JText::_('MAY'));
$months[] = JHtml::_('select.option', 6, JText::_('JUNE'));
$months[] = JHtml::_('select.option', 7, JText::_('JULY'));
$months[] = JHtml::_('select.option', 8, JText::_('AUGUST'));
$months[] = JHtml::_('select.option', 9, JText::_('SEPTEMBER'));
$months[] = JHtml::_('select.option', 10, JText::_('OCTOBER'));
$months[] = JHtml::_('select.option', 11, JText::_('NOVEMBER'));
$months[] = JHtml::_('select.option', 12, JText::_('DECEMBER'));

for ($i = 1900; $i <= 2100; ++$i)
{
$years[] = JHtml::_('select.option', $i);
}

$id = preg_replace('/\[\]$/', '', $this->name);

$return[] = '<span id="'.$id.'-wrapper">';

// Add prefix Text for day here
// $return[] = JText::_('...');

$return[] = JHtml::_('select.genericlist', $days, '', array('list.selected' => $day, 'list.attr' => array('class' => 'nafudate-day')));

// Add prefix Text for month here
// $return[] = JText::_('...');

$return[] = JHtml::_('select.genericlist', $months, '', array('list.selected' => $month, 'list.attr' => array('class' => 'nafudate-month')));

// Add prefix Text for year here
// $return[] = JText::_('...');

$return[] = JHtml::_('select.genericlist', $years, '', array('list.selected' => $$year, 'list.attr' => array('class' => 'nafudate-year')));

$return[] = '<input type="hidden" id="'.$id.'" name="'.$this->name.'" value="'.$year.'-'.$month.'-'.$day.'" />';

$return[] = '</span>';

$js = "
window.document.addEvent('domready', function() {
$$('#".$id."-wrapper .nafudate-day, #".$id."-wrapper .nafudate-month, #".$id."-wrapper .nafudate-year).addEvent('change', function() {
$('".$id."').set('value', $$('#".$id."-wrapper .nafudate-year').get(0).get('value')+'-'+$$('#".$id."-wrapper .nafudate-month').get(0).get('value')+'-'+$$('#".$id."-wrapper .nafudate-day').get(0).get('value'));
});
});
";

JFactory::getDocument()->addScriptDeclaration($js);

return implode($return);
    }
}

Wer macht weiter und verbessert? (Das Ding ist jetzt ohne in der API nachzuschauen zusammen geklopft worden, also enthält höchstwahrscheinlich viele Fehler)
Joomla! ist auch nur ein Mensch...

Sammy

  • Bestätigter Nutzer
  • Beiträge: 165
Antw: Registrierungsformular mit Geburtsdatum falsches Format.
« Antwort #10 am: 03. Mai 2012, 08:34:03 »
Jetzt sage ich doch etwas dazu und bemerke auch gleich, dass ich das aber nicht umsetzen werde:

Wenn Zeit in ein 'idiotensicheres, dreifeldriges Feld' ;D gesteckt wird, dann kann man doch auch bestimmt das Eingabefeld selbst etwas schlauer machen, ich übertrage mal ein paar Dinge aus einer mir bekannten Java-Klasse:
- 99-99-9999 wird als 'englisches' Format erkannt, es sei denn, der Monat ist eindeutig doch der Tag (erstes 99)
- 99.99.9999 ist deutsches Format (es sei denn....)
- 99.99.99 wird in mit Hilfe eines Spltjahres (z.B. 50) in 99.99.19xx oder 99.99.20xx gewandelt
- 999999 wird je nach Sprache verarbeitet (Spltjahres, '.'/'-')
- viel Zeichen außer Ziffern werden als Trennzeichen interpretiert
- usw (auch später noch erweiterbar)

Damit kommt man auch gut ans Ziel und derjenige, der mal eben 170770 als Geburtsdatum eintippen darf ohne drei Komboboxen und den Tabulator benutzen zu müssen, ist auch froh (177070 -> 17.07.1970).
Wenn Joomla das eigene Feld dann mal etwas schlauer gemacht hat, dann kann die eigene Implementierung recht einfach entfernt oder verkleinert oder erneut erweitert werden.
Gerade bei Platzmangel (in Modulen) ist ein Feld vermutlich vorteilhaft.

Aber ich habe ja gelernt: Das ist nur ein Denkanstoß, keine Kritik an anderen Beiträgen oder Ideen. Die Vorteile des 'dreifeldrigen Feldes' sehe ich natürlich auch: Kein Raum für Interpretation.
Aber: Auch hier muss noch einiges geprüft werden:
- 30./31.
- Februar / Schaltjahr
- Schaltjahr ja/nein (OK, 2000 ist schon her und der nächste Sondersonderfall ist erst 2100)

Heart

  • Bestätigter Nutzer
  • Beiträge: 4
Antw: Registrierungsformular mit Geburtsdatum falsches Format.
« Antwort #11 am: 03. Mai 2012, 09:25:38 »
Also ich würde es ja auch sehr begrüßen, wenn beides sinnvoll genutzt werden kann. Weil ich neige zB eher dazu schnell ein Datum in das Feld einzutippen (in Form mmddjj oder mmddjjjj), dieses sollte dann korrekt erkannt und verarbeitet werden.  8)

bembelimen

  • moderatives Dielektrikum
  • Beiträge: 227
  • Ich kam, sah und zensierte...
    • Joomla! Vereinsverwaltung
Antw: Registrierungsformular mit Geburtsdatum falsches Format.
« Antwort #12 am: 03. Mai 2012, 13:05:53 »
Wie ich schrieb unterstützt Joomla! dieses Format nicht und man müsste dafür direkt DateTime nutzen, außer dieser Pull-Request kommt rein. Ihr könnt gerne dort kommentieren, vielleicht beschleunigt das die Entscheidungsfindung.

Nachtrag: das Format DDmmYYYY geht wohl prinzipiell in PHP nicht (automatisch). Aber man kann ein Feld dafür bauen und einfach die Zahl aufsplitten.
« Letzte Änderung: 03. Mai 2012, 16:32:28 von bembelimen »
Joomla! ist auch nur ein Mensch...

Firstlady

  • Pink Berserk (Mod)
  • Beiträge: 190
    • www.chmst.de
Antw: Registrierungsformular mit Geburtsdatum falsches Format.
« Antwort #13 am: 05. Mai 2012, 09:45:30 »
Zitat
Ich glaube, Christine will eher eine idiotensichere Version, wo man nicht noch nachträglich im Input-Feld rumpfuschen kann. Wäre doch mal echt ein interessantes Feld. Ich fang mal an mit einer Skizze, wie so ein Feld aussehen könnte:
Ich bin zurzeit schwer beschäftigt  :) aber genau das meinte ich und werde an deinem code weitermachen. Ich finde, im Backend ist es egal, wer dorthin kommt, sollte einen Kalender bedienen können. Aber beim Geburtsdatum im Frontend, beim eigenen Profil, muss man eben auch mit alten Damen rechnen, die noch nie von einem englischen Datumsformat gehört haben.
Grüße, Chrstiane
Grüße, Christiane

Joomla-Hilfe

  • Oberwetterfrosch (Mod)
  • Beiträge: 155
Antw: Registrierungsformular mit Geburtsdatum falsches Format.
« Antwort #14 am: 05. Mai 2012, 12:43:09 »
Aber beim Geburtsdatum im Frontend, beim eigenen Profil, muss man eben auch mit alten Damen rechnen, die noch nie von einem englischen Datumsformat gehört haben.
Wenn man denen eine idiotensichere Eingabe ermöglichen will, kann man es sich überhaupt nicht bequem machen und auf bestehende Lösungen zurückgreifen, sondern muß richtig in die Vollen gehen: Getrennte Eingabefelder für Tag, Monat und Jahr, tolerante Eingabeprüfung (Tag ein- oder zweistellig, Monat ein- oder zweistellig, als Kürzel oder ausgeschrieben, Jahr zwei oder vierstellig), Online- und Offline-Validierung (30. Feb immer als falsch markieren, 29. Feb nur außerhalb von Schaltjahren usw., bei deaktiviertem JS eben erst nach dem Abschicken).

Bei dieser Eingabe kann man trotzdem zusätzlich den Kalender anbieten. Man muß dessen Rückgabe nur auf die drei Felder aufteilen.

Einfach den Kalender zu nehmen und an dessen Ausgabe zu fummeln halte ich nicht für zielführend.
Dietmar

Die Realität ist eine Halluzination, die durch akuten Alkoholmangel hervorgerufen wird.

Firstlady

  • Pink Berserk (Mod)
  • Beiträge: 190
    • www.chmst.de
Antw: Registrierungsformular mit Geburtsdatum falsches Format.
« Antwort #15 am: 05. Mai 2012, 20:15:31 »
 genau :) aber hetzt mich nicht! Ich muss erst noch javascript lernen  :-[ !
Grüße, Christiane

J-Worker

  • Bestätigter Nutzer
  • Beiträge: 18
  • Hat keine Ahnung. Davon aber ganz viel...
    • Webentwicklung mit Joomla!