Zum Inhalt springen

powermail: prefill für checkbox / selectbox

Erstellt am 14. November 2008 · 25 Antworten · letzte Antwort am 15. Februar 2011 · Seite 1 von 2

Tags: Powermail, Frage

Julian.​Hofmann ·

Hallo.

Versuche ein powermail-Formular mit bereits gespeicherten Werten eines FE-Users vorzubelegen. Bei "normalen" Felder klappt das auch prima mit

prefill.uid3 = TEXT
prefill.uid3.data = TSFE:fe_user|user|name

Wie aber setze ich Werte bei Checkboxen und Selectboxen via TS?

Viele Grüße
Julian

Julian.​Hofmann ·

Darf ich das als "steht jetzt auf der TODO-Liste" interpretieren?

Hätte durchaus aktives Interesse an dem Feature, d.h. würde auch selbst mit Hand anlegen, damit es am besten 2008 noch machbar wird. Um die Extension bzw. deren Logik konsistent zu halten, wäre ich aber für ein paar Vorgaben dankbar, bevor ich rumbasteln würde.

einpraegsam.​net ·
Julian.Hofmann schrieb

Darf ich das als "steht jetzt auf der TODO-Liste" interpretieren?

Hätte durchaus aktives Interesse an dem Feature, d.h. würde auch selbst mit Hand anlegen, damit es am besten 2008 noch machbar wird. Um die Extension bzw. deren Logik konsistent zu halten, wäre ich aber für ein paar Vorgaben dankbar, bevor ich rumbasteln würde.

Unterstützung ist immer Willkommen.

Derzeit werden die Felder in pi1/class.tx_powermail_html.php in Zeile 891 gefüllt. Das geht vermutlich so nur für die erste Ebene.

Julian.​Hofmann ·

Eine Frage in die Runde:

Wie ist es logisch/sinnvoll Vorbelegungen für eine (multiple) Boxen anzugeben?

  • Eine kommaseparierte Liste der Indizes?

    prefill.uid1_1.selectedItems = 1,4,5
    
  • Eine kommaseparierte Liste der Values?

    prefill.uid1_1.selectedValues = Wert1,Wert4,Wert5
    
  • Die Options direkt ansprechen?

    prefill.uid1_1 = TEXT
    prefill.uid1_1.value = Wert1
    prefill.uid1_4 = TEXT
    prefill.uid1_4.value = Wert4
    
einpraegsam.​net ·

Gute Frage,

ich schwanke zwischen Variante 1 und 3

Warum?

1) Geht einfach und schnell und außerdem geht es nur um einen gesetzten Haken und nicht um Werte

3) Weil der prefill für normale Textfelder genau so funktioniert (auch wenn ein stdWrap hier kein Sinn macht)

PS: Es muss überall prefill.uid1 und nicht prefill.uid1_1 heißen, schätze ich

Julian.​Hofmann ·

Ansich stimme ich Dir zu. Beim umsetzen bzw. testen in meinem Anwendungsfall kam ich dann aber auf folgende Aspekte:

zu 1)
Nicht immer ist fix, an welcher Stelle welcher Wert steht. Wird nach der Definition der prefill-Werte das Formular nochmal angepasst, und verschieben sich dadurch die Indizes, hat man falsche Vorauswahl. Daher würde ich eher zu 2) bzw. 1) und 2) tendieren.

zu 3)
Wenn die Selektion an Bedingungen geknüpft ist, dann macht IMHO der stdWrap schon Sinn. Wie soll sonst eine Abhängigkeit gebastelt werden?
Beispiel: 3 Checkboxen, in der Datenbank ist Wert 3 (=2^0+2^1) gespeichert. Um daraus jetzt die gecheckten Boxen zu rekonstruieren muss man ja einen Größenvergleich durchführen.

einpraegsam.​net ·

Hmm, hast mich überzeugt - ich plädiere für 3

Ich würde dich dem Powermail Projekt auf forge.typo3.org hinzufügen, wenn du dich schon engagierst. Leider ist das typo3.org Login bekannterweise derzeit out of order...

Julian.​Hofmann ·

Wobei sich dann bei 3) immernoch die Frage stellt, ob der value dann ein true/false sein sollte oder der String, der auch als value im options-Tag steht. (Also ansich genau der Unterschied zwischen 1 und 2)

Spricht eigentlich etwas gegen die Umsetzung aller 3/4 Varianten? Oder wird das zu verwirrend?

einpraegsam.​net ·
Julian.Hofmann schrieb

Spricht eigentlich etwas gegen die Umsetzung aller 3/4 Varianten? Oder wird das zu verwirrend?

Das finde ich zu heftig

ich würde es easy umsetzen:

if ($variable) ' checked="checked"';

Somit wird auf Inhalt der Varible geschaut und diese könnte man mit stdWrap setzen (auch userFunc oder ähnliches nehmen)

Leinad ·

Hallo, ich hatte das gleiche Problem und hab es über einen Hook gelöst:

  function PM_FieldWrapMarkerHookInner($uid, $xml, $type, $title, &$markers, $piVarsFromSession, $form){
    if($form->fe_field AND $type=='check'){
      $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($form->fe_field, 'fe_users', 'uid='.$GLOBALS['TSFE']->fe_user->user['uid']);
      $row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
      $value = strrev(decbin($row[$form->fe_field]));
      
      $nr = explode('_', $markers['###LABEL_NAME###']);
      $nr = end($nr);

      if($value[$nr]==1)$markers['###CHECKED###'] = 'checked="checked" ';
      else $markers['###CHECKED###'] = '';
    }
  }

Die fe_users ist durch Spalten vom Typ checkbox erweitert.

Vielleicht kann man das in die nächste Version mit einbauen... kann vielleicht noch optimiert werden, bei mir funktioniert es jedenfalls so, wie gewollt.

typoDAU ·

das ist ja klasse!
nur muss ich dann die ursache woanders suchen 😢

mir ist es bisher weder gelungen, eine selectbox noch checkboxen zu befüllen:

plugin.tx_powermail_pi1.prefill {
	uid123_0 = RECORDS
	uid123_0 {
		wrap = |
		source.data = GPvar:tx_cal_controller|uid
		tables = tx_cal_event
		conf.tx_cal_event = TEXT
		conf.tx_cal_event.field = nameDesFeldes
		}
	
	uid123_1 = RECORDS
	uid123_1 {
		[...]
		}
	}
malisch01 ·

Ich verstehe es auch nicht. #angry#
Ich will eine Selectbox für die Anrede mit fe_user Daten befüllen.

Also wenn 0 dann Frau und bei 1 Herr selected="selected".

Ist das implementiert? Aus http://forge.typo3.org/issues/show/3709 werde ich nicht richtig schlau. Dort steht folgendes:

prefill.uid123.selectedIndexes   TEXT /w stdWrap    Fields values (CSV)
prefill.uid123.selectedValues    TEXT /w stdWrap    Fields labels (CSV)
prefill.uid123_12                boolean            Preselects option with index 12

Habe es mit

prefill.uid123.selectedIndexes= 0,1
prefill.uid123.selectedValues= Frau,Herr
prefill.uid123_0 = TEXT
prefill.uid123_0 = Frau 
prefill.uid123_1 = TEXT
prefill.uid123_1 = Herr

in allen Möglichen Kombinationen versucht. Ein einfaches Beispiel würde mir und Anderen sicher helfen.
Ich werde mir die Funktion html_select() wohl genauer anschauen, falls ich Zeit finde.

Julian.​Hofmann ·

Ich gebe zu, die Implementierung ist nicht auf Anhieb verständlich, dafür sollte sie aber größtmögliche Flexibilität bei der Nutzung bieten.

@malisch01 & @typoDAU:
Falls ihr euer echtes TS gepostet habt, dann tauscht bitte noch in "uid123" die 123 gegen die Feld-UID, die powermail für euer Feld vergeben hat (zu sehen z.B. via HTML-Quelltext)

@malisch01:
Die drei Möglichkeiten haben jeweils ihre Daseinsberechtigung. Denn je nach Anwendungsfall macht es Sinn
- nach Feldwerten zu selektieren (z.B. weil diese aus einer DB ausgelesen wurden)
- nach Indizes zu selektieren (z.B. weil mittels TS/stdWrap die Selektierung erst ermittelt wird
- einen Wert direkt anzusprechen (z.B. um auch hier alle Möglichkeiten des stdWrap zu haben)

Es reicht, wenn ein Weg gewählt ist. Welcher Option die höchste Priorität hat, weiß ich gerade nicht mehr.

@typoDAU:
Die Selektierung über die einzelnen Punkte ist nur als Boolean möglich. D.h. es wird nur geprüft, ob der TS-Wert gesetzt ist (PHP-Funktion empty() !== false). Die Option hat keine stdWrap-Eigenschaften, d.h. Dein RECORDS-Objekt wird nicht ausgewertet, sondern es wird als Wert der String "RECORDS" gesetzt (dadurch ist die Option nicht leer und es sollten alle Deine Auswahlmöglichkeiten gesetzt sein)