Zum Inhalt springen

Dynamisches füllen von Selectboxen

Erstellt am 5. November 2007 · 4 Antworten · letzte Antwort am 6. November 2007

Tags: TCA, Frage

bpaulsen ·

Hallo Zusammen,

ich habe eine Extension geschrieben. Dort soll im Backen ein DropDown (Select) Feld angezeigt werden. Das tut es auch wunderschön. Die Extension habe ich mit dem Kickstarter erstellt.

Dort habe ich für das Feld den Wert "Selectorbox" ausgewählt. Einmal für den Datensatz in einer eigenen Tabelle und einmal als Ergänzung zum "tt_content". Aber ich muss dann ja die Werte für die Selectorbox in beiden Fällen hardcoden:

# ext_tables.php
"config" => Array (
  "type" => "select",
  "items" => Array ( Array("LLL:EXT:freetextarea/locallang_db.xml:tt_content.tx_freetextarea_show_category.I.0","0"),
Array("LLL:EXT:freetextarea/locallang_db.xml:tt_content.tx_freetextarea_show_category.I.1","1"),
Array("LLL:EXT:freetextarea/locallang_db.xml:tt_content.tx_freetextarea_show_category.I.2","2"),
Array("LLL:EXT:freetextarea/locallang_db.xml:tt_content.tx_freetextarea_show_category.I.3","3"),
  )
,
"size" => 1,	
"maxitems" => 1,

Das möchte ich aber nicht, ich möchte diese aus einer Datei lesen, vielleicht auch später aus der Datenbank, aber jedenfalls irgendwie dynamisch, ohne die immer in die tca.php oder ext_tables.php einzutragen.

Ich hab da einfach mal versucht diese Werte mit einem eigenen Array zu überschreiben, funktioniert auch soweit, es werden die richtigen Daten im Backend angezeigt, nur leider gibt er immer die Fehlermeldung "Dieser Wert ist nicht erlaubt" aus, sobald ich speichere. Könnt ihr mir helfen und vielleicht einen Tipp geben?

Achso, so habe ich das mit dem Array gemacht:

#ext_tables.php

$handle=fopen(t3lib_extMgm::extPath('myExt').'MeineWerte.txt',r);
$GLOBALS['myArray']->MeineWerte=array();
while(!feof($handle))
	{
	$werte=fgets($handle);
	array_push($GLOBALS['myArray']->MeineWerte,explode(';',$werte));
	}

... ... ...
"config" => Array (
"type" => "select",
"items" => $GLOBALS['myArray']->MeineWerte,
"size" => 1,	
"maxitems" => 1,
... ... ...
bpaulsen ·

Hey Hendrik,

ne FlexForms ist da nicht drin. Sollte ja eigentlich auch so gehen, es muss ja nur ne Einstellung sein, die den Wert noch irgendwie Prüft.

Gruß

Björn

bpaulsen ·

Hallo,

Danke für eure Tipps.

die itemsProcFunc hab ich nicht zum laufen gebracht irgendwie hat der da gar nichts angezeigt. Aber mein Ansatz war schon funktionstüchtig nur habe ich die Arrays falsch gefüllt. Das "items" ist kein Mehrdimensionales Array, sondern nur ein einfaches #paralyzed#

Dann klappt das auch alles 😉

hier jetzt mal der ganze Code, falls ihn jemand noch braucht:

ext_tables.php
direkt nach der Sicherheitsabfrage

if (!defined ('TYPO3_MODE')) die ('Access denied.');

Die Funktion einfügen

function test()
	{
$handle=fopen(t3lib_extMgm::extPath('MyExtension').'filename.txt',r);
$mySelect=array();
while(!feof($handle))
	{
	$cats=fgets($handle);
	$catname=substr($cats,0,strpos($cats,';'));
	$catnr=stristr($cats,';');
	$catnr=substr($catnr,1,strlen($catnr)-2);
	$mySelect[]=array($catname, $catnr);
	}

und dann unten beim select nur noch folgendes eintragen:

"config" => Array (
"type" => "select",
"items" => test(),
"size" => 1,	
//"maxitems" => 1,
)

für die tca.php braucht nur noch das Select Feld angepasst werden. Die Funktion ist auch dort verfügbar und braucht nicht erneut rein geschrieben werden