Antwort
 
LinkBack (1) Themen-Optionen Thema bewerten Ansicht
  #1  
Alt 28.08.08, 10:31
Forum Zuschauer
 
Registriert seit: 27.08.08
Beiträge: 7

Select: dynamisch Optionen einfügen


Hallo,
ich will für ein SELECT Feld in einem mehrstufigen PM Formular Optionen dynamisch erzeugen. Es werden bei einer Buchungsanfrage zu Reisen mögliche Reisetermine für eine bestimmte (vorher ausgewählte) Reise angeboten.
Die Ausgabe (zur Vereinfachung beschreibend, nicht als HTML) soll z.B. so sein:

option '' => Select tourdate (leere Option)
option 24 => 24. Mai - 1. Juni 2009
option 29 => 2. - 10. Juni 2009
...
(Modell ist dabei: option tourdateUid => optionDescriptive)

Die Optionen (uids und dazu die beschreibenden Werte) können dabei nicht so einfach als Werte aus der db ausgelesen werden, sondern müssen erst über ein USER object zusammengestellt werden, da verschiedene GET Parameter und TS Einstellungen verarbeitet werden müssen, die dafür sorgen, dass im jeweiligen Kontext die richtigen Termine ausgewählt werden.
Wird ein entsprechender Parameter ("tx_tdtour_pi1[tourdateUid]") mitübergeben, der eine UID übermittelt, soll z.B. auch gleich die jeweilige Option vorselektiert sein.

Mir fällt zur Zeit eigentlich nur ein, das komplette powermail-artige HTML des Select Felds im PHP nachzubauen und das dann über TS im Formular einzubinden, also etwa so:

TS-SETUP:
...
plugin.tx_powermail_pi1.dynamicTyposcript {
tourdateoptions = USER
tourdateoptions {
userFunc = user_tdtour->getTourdateOptions
dateFormat = {$plugin.tx_tdtour_pi1.dateFormat}
layout = ###STARTDATE###-###ENDDATE###
...
}
}
...
Dann im Formular ein Feld vom Typ TS-Objekt erzeugen und das obige da einfügen.

Die user Funktion macht dann den kompletten Output, aber ich habe den Verdacht, dass man das irgendwie eleganter lösen müsste, so dass PM letztlich drauf aufpasst und die USER-Funktion nur die Optionen übergeben muss. Dann müsste auch die Auswahl des Benutzers bim Blättern im Formular stehenbleiben etc.

Meine Frage bzw Bitte um Hilfe wäre also:
- Welche Strategie schlägt man am besten ein?


Im Voraus vielen Dank!

Tom
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #2  
Alt 28.08.08, 10:42
Benutzerbild von einpraegsam.net
Forum Stammgast
 
Registriert seit: 11.05.07
Ort: Nürnberg
Alter: 29
Beiträge: 487

Ich würde im Prinzip eigentlich genauso wie du vorgehen:
- Neues Feld in Powermail anlegen vom Typ Typoscript
- Dann soll eine userFunc das Selectfeld zusammenbauen:
Typoscript-Code:
1:
2:
temp.select = USER
temp.select.userFunc... - ERROR: Line 1: Object Name String, "temp.select.userFunc..." was not preceeded by any operator, =<>({

So etwas in der Art habe ich hier umgesetzt:
TYPO3.net - Powermail: Dynamisches Datum im Dropdown

Grüße, Alex
__________________
einpraegsam.net alias wunschtacho

Powermail :: Einprägsam :: Xing Profil :: Wunschtacho :: JustPowder :: conject
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #3  
Alt 28.08.08, 10:47
Forum Zuschauer
 
Registriert seit: 27.08.08
Beiträge: 7

Vielen Dank, Alex!
Ich werde das dann mal so weiterverfolgen...
Gruß, Tom
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #4  
Alt 28.08.08, 11:04
Benutzerbild von einpraegsam.net
Forum Stammgast
 
Registriert seit: 11.05.07
Ort: Nürnberg
Alter: 29
Beiträge: 487

Hier habe ich das Ergebnis zu dem Howto wenn es dich interessiert:
conject.com-Online Demo
__________________
einpraegsam.net alias wunschtacho

Powermail :: Einprägsam :: Xing Profil :: Wunschtacho :: JustPowder :: conject
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #5  
Alt 28.08.08, 11:33
Forum Zuschauer
 
Registriert seit: 27.08.08
Beiträge: 7

Ja, das ist hilfreich. Dann ist mir nur noch eine Sache nicht ganz klar:

1) Die Optionen werden wie in dem Beispiel oben über das USER Obj erzeugt. OK.
2) Das HTML drumherum dagegen besteht aus einem DIV, Label und dem Select Tag um die Option herum.
--------------
<div class="tx_powermail_pi1_fieldwrap_html ... /div>
<label for="uid62">Bevorzugter Termin</label>
<select name="tx_powermail_pi1[uid62]" class="... >
... (hier dann die options vom USER obj)
---------------
Das <div> und den <label> macht PM ja bereits selbst, wenn man das Feld im BE anlegt.
Das SELECT tag muss aber wohl doch noch manuell per TS oder über ein Template um die Ausgade der Optionen vom USER Obj gewrappt werden, wobei man nur noch manuell die ID des Felds in die Konfiguration mit übergeben muss:
...
PMfieldUid = 62 (im TS setup bei der configuration des USER function)
bzw: PMfieldUid.field = uid
...

Oder gibt es eine Möglichkeit, PM zu erzählen, das die Ausgabe des USER Objekts für ein Select (und nicht etwa ein Textfeld oder sonstwas) ist?

Ich hoffe, da ist kein Denkfehler von meiner Seite drin. Danke jedenfalls,- das dürfte jetzt eigentlich nicht mehr schwerfallen. Tom
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #6  
Alt 28.08.08, 11:49
Benutzerbild von einpraegsam.net
Forum Stammgast
 
Registriert seit: 11.05.07
Ort: Nürnberg
Alter: 29
Beiträge: 487

Wenn du ein Typoscript Feld mit Powermail anlegst, macht Powermail (so weit ich mich erinnern kann) überhaupt keinen Wrap.
Die Wraps die du haben willst (oder in meinem Beispiel) habe ich in PHP mit eingefügt, thats all
__________________
einpraegsam.net alias wunschtacho

Powermail :: Einprägsam :: Xing Profil :: Wunschtacho :: JustPowder :: conject
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #7  
Alt 28.08.08, 12:41
Forum Zuschauer
 
Registriert seit: 27.08.08
Beiträge: 7

Das stimmt und es funktioniert auch schon. Man muss div, label und select manuell per TS oder php drumherum legen. Dazu muss man an die USER Funktion die UID des Formulars und das Label übergeben. Nur dazu meine letzte Frage, falls das leicht geht und ich auf dem Schlauch stehe:
wie kann man die Werte des Formulars (uid und label) dynamisch per TS bekommen ?

"fieldUid.field = uid" liefert mir ja die UID des Formulars, nicht des in Frage kommenden Felds.

Man kann natürlich für jedes solche Feld "fieldUid = 265" direkt eingeben, aber dann muss man das für jede Sprache gesondert so machen und immer aufpassen...

Vielen Dank für die schnelle und gute Hilfe!!
tom

Wenn's jemanden interessiert, kann ich das Ergebnis ja hier dann posten.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #8  
Alt 28.08.08, 12:54
Benutzerbild von einpraegsam.net
Forum Stammgast
 
Registriert seit: 11.05.07
Ort: Nürnberg
Alter: 29
Beiträge: 487

Zitat:
Zitat von volcanodiscovery Beitrag anzeigen
"fieldUid.field = uid" liefert mir ja die UID des Formulars, nicht des in Frage kommenden Felds.
Das sollten wir noch integrieren, da hast du absolut Recht - bei Interesse kannst du ja hier ein Feature Request setzen:
powermail - Issues - TYPO3 Forge


Zitat:
Zitat von volcanodiscovery Beitrag anzeigen
Wenn's jemanden interessiert, kann ich das Ergebnis ja hier dann posten.
Klar!
__________________
einpraegsam.net alias wunschtacho

Powermail :: Einprägsam :: Xing Profil :: Wunschtacho :: JustPowder :: conject
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #9  
Alt 29.08.08, 01:20
Forum Zuschauer
 
Registriert seit: 27.08.08
Beiträge: 7

sorry - bin noch am schreiben und komme mit dem Löschen / Formatieren nicht zurecht...

Geändert von volcanodiscovery (29.08.08 um 01:38 Uhr).
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #10  
Alt 29.08.08, 01:21
Forum Zuschauer
 
Registriert seit: 27.08.08
Beiträge: 7

Entschuldigt, dass ich mit dem online Editor zum Formatieren von Einträgen in diesem Forum nicht umgehen kann und den Code unten nicht besser lesbar darstellen kann... Vielleicht brauche ich nen Crash-Kurs hier...

So, aber hier nun doch noch das fertige Produkt, falls mal jemand auf ein ähnliches Problem stößt. Dank Eurer Hilfe, Alex' tollem Support und dieser großartigen Extension ist unser Formular nun um einiges leichter zu pflegen (und netter anzuschauen) als vorher mit mailformplus...:

Ergebnis zuerst:

HTML-Code:
http://www.volcanodiscovery.com/volcano-tours/reisebuchung.html?&tx_tdtour_pi1[tourdateUid]=122&tx_tdtour_pi1[showUid]=76&cHash=ce5dc7674a
der Link dazu


- Es werden hier vom plugin, das die Touren darstellt (tx_tdtour_pi1) 2 Parameter mitübergeben, die sagen, welche Tour gewählt ist und davon welche Variante.

- Die ersten 3 Felder (Name des Programms und die beiden Auswahlboxen darunter werden von USER Funktionen gemacht:

1. TS setup für das Feld:

tourversion = USER
tourversion {
userFunc = user_tdtour->getVersionOptions
fieldUid = 265
fieldUid.lang.de = 277
label = Select tour version
label.lang.de = Version
}

2. Die aufgerufene Funktion sieht dann so aus:


PHP-Code:
function getVersionOptions($content,$conf) {
// uid and label of field (manually given via TS powermail)
$fieldUid $this->cObj->stdWrap($conf['fieldUid'],$conf['fieldUid.']);
$label $this->cObj->stdWrap($conf['label'],$conf['label.']);
 
// Get/Post vars from calling plugin 
$GP t3lib_div::GPvar('tx_tdtour_pi1');
 
// session data for this form
$PMsessionData $GLOBALS['TSFE']->fe_user->getKey('ses','powermail_'.$this->cObj->data['uid']);
 
// these are the table and field where the options come from (these params can be given through conf, to make it more general)  
$table 'tx_tdtour_itineraries';
$field 'title';
 
// this method (can be replaced dep. on context) actually gets me the valid UIDs from $table (versions) where the options come from
$versions $this->getVersionsFromProgram($GP['showUid']);
 
// loop through the items and construct options 
foreach ($versions as $versionUid) {
// select DB record
$res $GLOBALS['TYPO3_DB']->exec_SELECTquery('*',$table,'uid='.$versionUid.$this->cObj->enableFields($table).' AND (sys_language_uid=0 OR sys_language_uid=-1)');
$row $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
//language overlay
$row $GLOBALS['TSFE']->sys_page->getRecordOverlay($table,$row,$GLOBALS['TSFE']->sys_language_uid);
if (!
$row) continue;
 
 
/* Kommentar zur Einstellung des vorselektieren Werts
->check 1. if value is already in sesssion; 2. if not, perhaps it is given through Get/Post from calling plugin
if we want the uid as values, use these 3 lines instead of the next ones (but then, we need to re-translate this in the confirmation page and emails, to make a readable output
 
$selected = ($versionUid === $PMsessionData['uid'.$fieldUid]) ? ' selected="selected"' : '';
if (!$selected) $selected = ($row['uid'] == $GP['versionUid']) ? ' selected="selected"' : '';
$options .= '<option value="'.$versionUid.'"'.$selected.'>'.$row[$field].'</option>';
*/
 
// we go the way that the value equals the displayed option (label), as PM does naturally
$selected = ($row[$field] === $PMsessionData['uid'.$fieldUid]) ? ' selected="selected"' '';
if (!
$selected$selected = ($row['uid'] == $GP['versionUid']) ? ' selected="selected"' '';
$options .= '<option value="'.$row[$field].'"'.$selected.'>'.$row[$field].'</option>';
$count++;
}
 
// wrap select around options (if any were found), or return placeholder
if (!$options) return $this->cObj->cObjGetSingle($conf['emptyItem'],$conf['emptyItem.']);
else 
$select '<select name="tx_powermail_pi1[uid'.$fieldUid.']" class="powermail_select powermail_uid'.$fieldUid.'" id="uid'.$fieldUid.'">'.$options.'</select>';
 
// add div label around the select field
$content '<div class="tx_powermail_pi1_fieldwrap_html tx_powermail_pi1_fieldwrap_html_text tx_powermail_pi1_fieldwrap_html_'.$fieldUid.'">';
$content .= '<label for="uid'.$fieldUid.'">'.$label.'</label>';
$content .= $select.'</div>';
return 
$content;


3. das Feld im Plugin vom Typ TS-Object lautet dann:
plugin.tx_powermail_pi1.dynamicTyposcript.tourversion
...


Viele Grüße,

Tom
PS: 10% Rabatt auf Buchungen wenn Ihr von hier da obenreinkommt...;-)

Geändert von volcanodiscovery (29.08.08 um 02:01 Uhr).
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an

LinkBacks (?)
LinkBack to this Thread: http://www.typo3forum.net/forum/powermail/31873-select-dynamisch-optionen-einf-gen.html
Erstellt von For Type Datum
powermail - Feature #1419: Make DB-fields from tx_powermail_fields records available through stdWrap in TS - TYPO3 Forge This thread Refback 05.10.08 12:54

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Plugin Optionen anlegen Kage Extension modifizieren oder neu erstellen 2 13.08.08 09:58
BE Extension Optionen Ausrichten eventhorizon Alle anderen Extensions 0 11.03.08 12:26
Bild Optionen bei Redakteuren alkativo TYPO3 4.x Backend 2 27.08.07 10:38
safemode optionen micho TYPO3 4.x Installation und Updates 2 22.06.07 23:52
Themen Optionen am Ende der Seite chrimp Änderungen 1 28.05.06 00:59


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:20 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.1.0