it-swarm.com.de

Fehler beim Rendern des Kalenderfelds "Angabe der doppelten Zeitzone"

in meiner benutzerdefinierten Komponente habe ich ein Kalenderfeld, das ich in meiner Ansicht rendere.

Datenbankfeld:

Name: estEventDate Typ: Datum Null: Nein Standard: 0000-00-00

XML-Feld:

<field name="estEventDate" type="calendar"   
  format="%Y-%m-%d"
  todaybutton="false"
  filltable="false"
  showtime="false"
  size="22"
  class="validate-dates uk-input"
  minyear="0"/>

Die PHP-Datei tmpl/default.php

<div>
  <?php echo $this->form->renderField('estEventDate'); ?>
</div>

Der Fehler lautet: 0 DateTime :: __ construct (): Fehler beim Parsen der Zeitzeichenfolge (-1-11-30) an Position 5 (-): Angabe der doppelten Zeitzone

Und im Logbuch bekomme ich folgendes:

error   Uncaught \Throwable of type Exception thrown. Stack trace: 
#0 /home/mike/joomla/libraries/src/Date/Date.php(112): DateTime->__construct('-1-11-30', Object(DateTimeZone))
#1 /home/mike/joomla/libraries/src/Factory.php(548): Joomla\CMS\Date\Date->__construct('-1-11-30', Object(DateTimeZone))
#2 /home/mike/joomla/libraries/joomla/form/fields/calendar.php(238): Joomla\CMS\Factory::getDate('-1-11-30', 'UTC')
#3 /home/mike/joomla/libraries/src/Form/FormField.php(975): JFormFieldCalendar->getInput()
#4 /home/mike/joomla/libraries/src/Form/Form.php(670): Joomla\CMS\Form\FormField->renderField(Array)
#5 /home/mike/joomla/components/com_contract/views/contract/tmpl/edit_admin.php(95): Joomla\CMS\Form\Form->renderField('estEventDate')

Ich habe verschiedene Optionen in der XML ausprobiert. (wie format, translateformat usw.) Ich habe auch ein Datum direkt in der Datenbank festgelegt (ich dachte, dass der Wert für "0000-00-00" das Problem war)

Joomla v. 3.9.0/php 7.2

2
mixahlos

Mein Vorschlag wäre, einfach das Datenbankfeld in varchar oder text zu ändern, um dieses Formularfeld zu speichern und dann sollte der Fehler verschwunden sein. Anschließend können Sie die Datumswerte für das Zeichenfolgenformat bei Bedarf aus der Datenbank abrufen und aus dem Zeichenfolgendatum, das Sie aus der Datenbank erhalten, eine beliebige Ausgabe im Datums-/Datums-/Uhrzeitformat erstellen. Ich schlage dies vor, da das Rendern von Formularfeldern im Grunde genommen meines Erachtens kein Problem darstellt. Und ich wage es auch, dies vorzuschlagen, da bei Plugin-Parametern (in der Erweiterungstabelle) normalerweise die Datumsfelder auch in Textdatenbankfeldern gespeichert werden und das in Joomla kein großes Problem ist. Und schließlich können Sie auf diese Weise auch in der Datenbank Datumszeichenfolge erkennen, ob das gespeicherte Datumsformat kein gültiges Datumsformat ist. So können Sie reparieren.

Wenn ich das Datums- oder Datumsfeld in der Datenbank belasse, würde ich aus der XML-Felddefinition die Attributdefinition format = "% Y-% m-% d" löschen, da dies ebenfalls zu diesem Fehler führen könnte (dies werde ich auch überprüfen in meinen Formen).

EIN KURZES UPDATE, UM DIE WIRKLICHE URSACHE DIESES PROBLEMS ZU FINDEN (nur für spätere Forscher)

@mixahlos hat die endgültige Lösung für sein oben genanntes detailliertes Problem gefunden, aber für mich blieb immer noch etwas unklar, was überhaupt das falsche Datumsformat verursacht hat. Einige wichtige Punkte zusammengefasst und eine Art Checkliste zu dieser Frage/Problem:

1. Das Datumsfeld ist eigentlich ein einfaches Textfeld bei der Eingabe mit einer Kalendereingabehilfe.

2. Das gleiche Problem trat in der K2-Komponente vor etwas mehr als einem Jahr auf, was durch einen veralteten JavaScript-Kalendereingabecode in K2 verursacht wurde. Dies verursachte einen Konflikt bei der Datumseingabe. In diesem speziellen Fall war dies nicht das Problem.

. @mixahlos hat das Problem mit der Erstellung desselben Formulars mit demselben Datum zurückverfolgt. Felder in einer übersichtlichen Joomla-Installation, in der er das grundlegende Datumsformatierungsproblem entdeckte, als er versuchte, die Datumsfelddaten von der abzurufen Datenbank. Dann löschte er in seinem Code die nicht benötigten Daten in seinem PHP) - Code (in einem benutzerdefinierten Joomla-Controller) und löste damit das ursprüngliche Problem. Somit kann er die Daten nun problemlos in Datenfeldern vom Typ Datenbank speichern .

Ich hoffe das kann später ein bisschen Leuten mit ähnlichen Problemen helfen. Zumindest mit wenigen Ansätzen zur Bewältigung dieses Problems.

2
Zollie