[3.3] HtmlFormTag => form:date

Im Entwickler-Forum können Implementierungsdetails sowie Alternativen der Umsetzung diskutiert werden. // Here, developers can discuss implementation details of features of their projects.
Antworten
GeneralCrime
Beiträge: 77
Registriert: 14.12.2011, 07:13:16

[3.3] HtmlFormTag => form:date

Beitrag von GeneralCrime » 26.09.2017, 11:53:33

Hallo schade das ich nicht dazu komme mal effektiv hier mit zu wirken ausser zu meckern :-D.

Mir ist grad aufgefallen das ich das Attribute "yearrange" nicht im Controller beeinflussen kann.
Ich habe es erst Versucht mit dem Laden des Tags und addAttribute() und dann nochmal indem ich das Tag komplett im Controller erstelle.
Leider bleibt der default wert bestehen. Hat jemand ne Idee wie es (ohne eigenes Taglib) Funktioniert vieleicht hab ich ja nen knick in der linse.

Warum ich das Ganze mit dem Controller beeinflussen will:
Weil der wert sich jährlich ändert und ich in meinem fall keine Zukunft benötige.
Es ist halt Wartungsarmer.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4556
Registriert: 04.11.2007, 16:13:53

Re: [3.3] HtmlFormTag => form:date

Beitrag von dr.e. » 26.09.2017, 16:26:50

Hallo Christian,

ich finde nicht dass du nur "meckerst"! :) Es ist im Gegenteil wichtig zu sehen, was dir fehlt bzw. was du brauchst um schnell und einfach Applikationen entwickeln zu können! Insofern: danke für dein Feedback!

Die Liste der Jahre in der Auswahl wird im Tag in der Methode onParseTime() erzeugt. Das passiert beim Parsen eines Tags und ist damit an eine statische Definition im Template gebunden. Um das etwas dynamischer zu definieren sollte der Parameter yearrange vielleicht ein wenig erweitert werden und nicht nur "now" als Wert für das Ende der Liste verstehen. Magst du dir mal überlegen, welche Anwendungsfälle du bei dir hast, dann könnten wir ein Feature für 3.4 umsetzen.

Im Controller hast du aus meiner Sicht zwei Optionen:

#1 Dynamische Definition des yearrange

Code: Alles auswählen

$form->addFormElementAfterMarker('marker-name', 'form:date', ['name' => 'foo', 'yearrange' => '2017-2020']);      
Vorteil: du kannst das Feld im Controller dynamisch erzeugen und zum Formular hinzufügen.
Nachteil: du brauchst einen Form-Marker und Styling wird ggf. erschwert.


#2 Manipulation der Jahres-Liste

Code: Alles auswählen

$yearList = $form->getFormElementByName('date-selector')->getYearControl();
for ($i = 2010; $i < 2018; $i++) {
   $yearList->addOption($i, $i);
}
Vorteil: du kannst jedes Einzel-Feld im Controller dynamisch befüllen.
Nachteil: ich habe auf der aktuellen Implementierung keine Lösung parat um die bereits vorbefüllten Optionen zu resetten - SelectBoxTag hat keine Möglichkeit die aktuell bestehenden Optionen auch wieder zu entfernen. Letzteres wäre auch eine Änderung am Tag, der aber - zugegeben - sehr sinnvoll wäre. Dann könntest du z.B. folgendes tun:

Code: Alles auswählen

$yearList = $form->getFormElementByName('date-selector')->getYearControl();
yearList->deleteAllOptions();
for ($i = 2010; $i < 2018; $i++) {
   $yearList->addOption($i, $i);
}
Hoffe das hilft dir weiter! :)
Viele Grüße,
Christian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4556
Registriert: 04.11.2007, 16:13:53

Re: [3.3] HtmlFormTag => form:date

Beitrag von dr.e. » 26.09.2017, 16:31:16

Hallo Christian,

was die Manipulation einer Select-Box-Liste angeht, habe ich unter https://adventure-php-framework.org/tra ... php?id=324 einen Tracker-Eintrag angelegt.
Viele Grüße,
Christian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4556
Registriert: 04.11.2007, 16:13:53

Re: [3.3] HtmlFormTag => form:date

Beitrag von dr.e. » 30.09.2017, 13:19:34

Kurzes Update von meiner Seite: ich habe die letzte Variante (Entfernen von Einträgen aus der Select-Box) nun unter https://adventure-php-framework.org/tra ... php?id=324 umgesetzt. Wenn du auf den letzten GIT-Stand aktualisierst oder ein composer up auf den dev-master ausführst, solltest du die entsprechenden Änderungen haben.

Die Umsetzung würde dann wie folgt funktionieren:
$yearList = $form->getFormElementByName('date-selector')->getYearControl();
$yearList->removeAllOptions();
for ($i = 2010; $i < 2018; $i++) {
$yearList->addOption($i, $i);
}
Viele Grüße,
Christian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast