Hallo,
ich abreite grad an einer Erweiterung und will bei dieser ein Drop Down Feld haben in dem verschiedene Datensätze zum selektieren drin sind. Soweit noch kein Problem. Jetzt will ich aber, das sobald ein Drop Down Feld angeklickt wurde, dass neben dem Feld über einen Marker dynamisch angezeigt wird (mit irgendeinem Inhalt zu dem ausgewählten Feld, unwichtig, da das über die SQL Abfrage gelöst wird) So wie ich es jetzt habe ist, dass ich die Seite über einen veränderten Submit-Button neu lade. Leider verliere ich dadurch die vom User eingegebenen Daten im Textfeld. Wie löse ich dieses Problem? Gibt es da einen speziellen Refresh oder muss ich da eine Globale Variable anlegen mit dem Inhalt des Textfeldes?
Hier der kurze Aufbau:
###TEXTFELD###
###DROPDOWNFELD######INHALTSFELD###
Und hier ein wenig Code
$markerArray['###TEXTFELD###'] = '
<form action="'.$this->pi_getPageLink($GLOBALS['TSFE']->id).'" method="POST">
<input type="hidden" name="no_cache" value="1">
<textarea cols="50" rows="2" name="'.$this->prefixId.'[input_field]" value="'.htmlspecialchars($this->piVars['input_field']).'"></textarea>
';
$optionContent='<select name ="'.$this->prefixId.'[option_field]" size="1">';/* onchange="alert(this.value)"*/
while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))
{
$optionContent.='<option value="'.$row[uid].'">'.$row['typename'].'</option>';
}
$markerArray['###DROPDOWNBOX###'] = $optionContent.'</select>';
$markerArray['###INHALTSFELD###'] = 'Hier könnte Ihre Werbung stehen';// Nur als Beispiel
Hallo,
den "dynamischen" Inhalt per AJAX (oder JavaScript) anzeigen?
Oder wenn du ein Submit des Formulars machst musst du eben in deiner Extension die bereits eingetragenen Userdaten auslesen und dann als vorbelegte Felder wieder in das Formular eintragen wenn du die Seite zurücklieferst.
Wie schreib ich das, dass das Textfeld vorbelegt ist?
Hallo,
ähm etwa so:
<input type="text" name="test" value="###TEST_VALUE###" />
und in deinem PHP füllst du den Marker dann? Oder wo ist das Problem?
Ok, aber das heißt ja dann, dass ich das was ich in den Zeilen 2-4 geschrieben habe in das Template auslagern muss. Vielleicht hab ich das ja mit dem Template falsch verstanden, aber ich dacht mir, da kommt fast kein HTML "Code" rein sondern nur Marker.
Hallo,
ja in der Tat ist das völlig falsch verstanden. Es ist genau umgekehrt: In der reinen Lehre darf im PHP-Code kein HTML vorkommen.
Das Template ist eine HTML-Datei mit ein paar Markern drin die dann durch PHP gefüllt werden.
Ok danke, ich habs einfach mal probiert den Code umzukopieren, aber leider funktioniert dann gar nichts. Hier mal die Art wie ich es umgestellt hab.
$markerArray['###QUESTIONID###'] = $this->pi_getPageLink($GLOBALS['TSFE']->id);
$markerArray['###QUESTIONNAME###'] = $this->prefixId.'[input_field]';
$markerArray['###QUESTIONNAME###'] = htmlspecialchars($this->piVars['input_field']);
<form action="###QUESTIONID" method="POST">
<input type="hidden" name="no_cache" value="1">
<textarea cols="50" rows="2" name="###QUESTIONNAME###" value="###QUESTIONVALUE"></textarea>
Ich hab mich halt sehr stark an diese Anleitung gehalten:
http://www.traum-projekt.com/forum/73-workshops-und-tutorials/101411-workshop-typo3-extension-programmierung.html
Hallo,
eine Fehlermeldung "es funktioniert irgendwie nicht" ist nicht so sehr aussagekräftig. Also INWIEFERN geht es nicht? Siehst du nur noch eine weisse Seite? -> PHP-Fehler oder das Template wird gar nicht gelesen. Oder das ergebnis nicht in return() zurückgegeben ...
Siehst du den Template-Quelltext und die Marker sind nicht gesetzt? -> Liest du irgendwo in deinem PHP-Code auch das Template ein und substituierst die Marker?
Prinzipiell ist dein Vorgehen jetzt aber richtig. 2 Tippfehler seh ich aber so schon: Zeile 3 muss wohl lauten $markerArray['###QUESTIONVALUE###']
Und im HTML muss fehlen in Zeile 3 die abschließenden drei ### beim Marker. Ausserdem glaube ich gibt es das "value"-Attribut bei Textarea nicht, sondern der value muss einfach zwischen die Tags geschrieben werden (aber da bin ich nicht sicher, ist HTML)
Ja die Tippfehler nicht beachten, ich hab nur schnell ein kleines Beispiel zusammengetippt, damit ich weiß ob es so richtig wäre. Mit funktioniert nicht meinte ich, dass ich beim absenden keinen Rückgabewert erhalten habe. Es ist natürlich möglich, dass ich einen Marker falsch angesprochen habe oder etwas anderes. Deshalb hab ich jetzt das Ganze mit einem Textfeld anstatt einer Textarea probiert und aus irgendeinen Grund verschwindet bei einem Textfeld der Text nicht wohingegen bei einem Submit der Text der Textarea verschwindet. Vielleicht komm ich noch auf den Fehler, aber jetzt sieht die Sache schon besser aus mit der Auftrennung. Klar, manche Dinge kann ich aus dem PHP nicht rauswerfen, aber das sollte nicht anders lösbar sein. (Dynamisch generierte Anzahl an kleinen Radiobuttons)
Falls ich Erfolg habe mit der jetzigen Form liegt es wahrscheinlich an der Auftrennung von PHP und Template, auf jeden Fall hast du mir gut weiter geholfen, denn eine spätere Auftrennung ist fast gar nicht mehr zu machen. Ich habs ja schon bei meinem kleinen Beispiel gesehen, wie viel Fehler zu machen sind usw.