View Issue Details

IDProjectCategoryView StatusLast Update
0000350Adventure PHP FrameworkNeues Feature // New Featurepublic2019-04-22 12:19
ReporterGeneral CrimeAssigned ToChristianAchatz 
PrioritynormalSeveritytrivialReproducibilityalways
Status assignedResolutionopen 
Product Version4.0 
Target Version4.1Fixed in Version 
Summary0000350: ->getLabel() im ValidationListenerTag
DescriptionHallo, ich habe nun von einem bereitwilligen Spieler den anreiz bekommen doch mal Language Files anzulegen.
Dies wollte ich nun dort wo ich grad am Arbeiten bin auch machen nur leider bin ich auf ein Hindernis gestoßen.

Es ist nicht möglich Platzhalter zu befüllen wenn sich das <html:getstring> Tag innerhalb eines <form:listeners> befindet.

Gibt es hier eine andere Möglichkeit?

Ansosnsten wäre meine Idee das man mit Hilfe des ->setPlaceHolders() auch den darin befindlichen <html:geststring> befüllt.
So könnte man auch ziemlich einfach seine Formulare umbauen ohne zusätzlichen Code im Controller zu generieren.

Mfg Christian
TagsNo tags attached.
Codereferenz: ([Datei]:[Zeile])
Namespacetools

Activities

ChristianAchatz

2019-04-15 09:03

administrator   ~0000933

Hallo Christian,

wenn ich dein Anliegen richtig verstehe, geht es dir um z.B. folgendes Template-Fragment:

<form:listener>
    <html:getstring />
    <html:placeholder name="foo" />
</form:listener>

Du möchtest nun sowohl den Inhalt mit dem <html:getstring />-Tag befüllen als auch einen Platzhalter (dynamisch) füllen.

Nach Implementierung des ValidationListenerTag sollte das auch klappen, da dieser alle Kinder analysiert und bei der Tranformation bearbeitet. Funktioniert das nicht, ist das ein Bug!

Magst du mir aus deiner Applikation vielleicht ein kurzes Beispiel posten, wie der <form:listener />-Tag und dein Controller-Code (falls zutreffend) aufgebaut ist? Ich stelle das dann lokal nach und kümmere mich um die Behebung. Danke! :)

General Crime

2019-04-16 20:39

developer   ~0000934

Last edited: 2019-04-18 12:27

View 3 revisions

<html:form ...>
<form:error>
< ul>
 <form:listener name="PlanetNameLength" control="PlanetName" validator="APF\tools\form\validator\TextLengthValidator">
                  < li>
                     <html:getstring name="test" config="form_error" entry="planetname.length" namespace="APF\mymodules\gateworld\pres\lang"/>
                  </ li>
               </form:listener>
</ ul>
</form:error>

/** @var ValidationListenerTag $Listener */
$Listener = $Form->getFormElementByName('PlanetNameLength');
$Listener->setPlaceHolder('min',2); # ändert nichts
#$Listener->getLabel(); #Methode existiert nicht

Im String steht: planetname.length = "Der Planetenname muss zwischen ${min} und {min} Zeichen lang sein." #Ich habe hier absichtlich beides getestet in der doku steht ohne $
Hauptproblem ist es gibt keine Funktion um auf ein Label zuzugreifen inerhalb eines Listeners

Das Feature was ich mir gedacht hatte was gehen könnte ist das ich gar nicht mehr das label aufrufen brauch sondern er daren alles erstezt was ich im listener mit setPlaceholders setze.

mfg Christian

ChristianAchatz

2019-04-17 12:28

administrator   ~0000935

Super, danke! Dann ist es vermutlich doch kein Bug.

Was vielleicht eine schnelle Lösung sein könnte ist, per

$tag = $form->getFormElementByName('PlanetNameLength')->getChildNode('name', 'test', LanguageLabel::class);
$tag->setPlaceHolder('min', 1);

den Platzhalter zu setzen. Im Text (in der Sprach-Datei) wird dann ein Platzhalter ohne "$" erwartet.

Jedes Tag implementiert die getChild()-Methode und damit kannst du dich durchhangeln.

Ich überlege mal, wie das Feature vielleicht einfacher umzusetzen ist.

General Crime

2019-04-17 21:16

developer   ~0000936

Last edited: 2019-04-17 21:16

View 2 revisions

Danke für diesen Tipp hab mir da mal schnell was für gebastelt um später alle stellen schneller wieder zu finden.

protected function setPlaceHoldersInListenerUnderLabels(HtmlFormTag $Form, string $elementName, $labelName, array $placeHolders) {
      $tag = $Form->getFormElementByName($elementName)->getChildNode('name', $labelName, LanguageLabel::class);
      $tag->setPlaceHolders($placeHolders);
   }

Dabei kam mir die Idee vielleicht kann man das setPlaceHolder(s) ja bei den Listenern anpassen so das sie mit getChildNode(s) alle labels laden und dann einfach darauf die selben Platzhalter anwenden.

PS: Ohne einen extra Namen des Labels zu benötigen.

Issue History

Date Modified Username Field Change
2019-04-14 12:49 General Crime New Issue
2019-04-15 09:03 ChristianAchatz Note Added: 0000933
2019-04-16 20:39 General Crime Note Added: 0000934
2019-04-17 12:28 ChristianAchatz Note Added: 0000935
2019-04-17 21:16 General Crime Note Added: 0000936
2019-04-17 21:16 General Crime Note Edited: 0000936 View Revisions
2019-04-18 12:27 ChristianAchatz Note Edited: 0000934 View Revisions
2019-04-18 12:27 ChristianAchatz Note Edited: 0000934 View Revisions
2019-04-22 12:19 ChristianAchatz Assigned To => ChristianAchatz
2019-04-22 12:19 ChristianAchatz Status new => assigned