Zum Inhalt springen

TypoScript per Flexform für Plugin setzen

Erstellt am 16. August 2010 · Noch keine Antworten

Tags: Frage

sunixzs ·

Hallo Typo3ler,

zu folgendem Problem fand ich bisher leider nichts:

Ich habe ein Plugin und im Backend beim cType Plugin ein Flexform. Dort gibt es ein Textarea-Feld "TS-Setup", in dem TypoScript stehen soll, welches für mein Plugin gilt:

subpartMarker.irgendwas = ###SP_IRGENDWAS###
subpartMarker.irgendwasAnderes = ###SP_IRGENDWAS_ANDERES###
foo = bar

Also genau das, was im normalen SETUP-Feld eines Template-Datensatzes stehen würde (nur ohne "plugin.tx_extkey_pi1." ):

plugin.tx_extkey_pi1 {
	subpartMarker.irgendwas = ###SP_IRGENDWAS###
	subpartMarker.irgendwasAnderes = ###SP_IRGENDWAS_ANDERES###
	foo = bar
}

(Da die Extension viele SETUP-Parameter haben kann, will ich ein freies Feld für das TS und nicht für jeden Parameter ein FF-Feld einbauen. Ein Redakteur soll aber keinen Zugriff auf das Modul "Template" bekommen.)

In meiner Plugin-Klasse lese ich das nun wie folgt aus (was ich ändern will):

$this->pi_initPIflexForm();
$ff['configuration'] = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'configuration', 'sDEF');

if ($ff['configuration']){
	$pairs = $this->lib->getPairsArray($ff['configuration'], chr(10), "=" );
	$tmpConf = Array();
	foreach ($pairs as $k => $v){
		$tmpConf = $this->lib->addTSToArray($k, $v, $tmpConf );
	}
	$GLOBALS['TSFE']->tmpl->setup['plugin.'][$this->prefixId.'.'] = array_merge($GLOBALS['TSFE']->tmpl->setup['plugin.'][$this->prefixId.'.'], $tmpConf);
	$this->conf = $GLOBALS['TSFE']->tmpl->setup['plugin.'][$this->prefixId.'.'];
}

Die Methode addTSToArray() sieht so aus:

public function addTSToArray($k, $v, $arr){
	$kPath = explode(".", $k);
	if ($kPath[count($kPath)-1] == $k){
		$arr[$k] = $v;
	} else {
		if (!is_array($arr[$kPath[0] . '.'])) $arr[$kPath[0] . '.'] = Array();
		$k2 = str_replace($kPath[0] . '.', "", $k);
		$arr[$kPath[0] . '.'] = self::addTSToArray($k2, $v, $arr[$kPath[0] . '.']);
	}
	return $arr;
}

Erklärung:
Die Konfiguration aus dem Flexform wird geholt - wenn vorhanden, hole ich mit getPairsArray() zeilenweise die Inhalte. Dann baue ich ein Array auf (addTSToArray()), welches dem Stil von $conf entspricht und merge es mit der Konfiguration aus $GLOBALS für mein Plugin. Zum Schluß setze ich die Konfiguration für mein Plugin.

Hier zum besseren verstehen $pairs:

$pairs = Array(
'subpartMarker.irgendwas' => '###SP_IRGENDWAS###',
'subpartMarker.irgendwasAnderes' => '###SP_IRGENDWAS_ANDERES###',
'foo' => 'bar'
);

So, das ganze funktioniert soweit auch - aber ist unschön, ein ziemliches gefriemel und man kann keine CONSTANTS benutzen.

Vorher probierte ich folgendes und ähnliches:

t3lib_extMng::addTypoScriptSetup("plugin.".$this->prefixId.".foo = bar" );
$GLOBALS['TSFE']->getConfigArray();
$this->conf = $GLOBALS['TSFE']->tmpl->setup['plugin.'][$this->prefixId.'.']

Das hat aber keine Auswirkung mehr auf $GLOBALS und ich kann beim Aufrufen der Plugin-Klasse das Setup nicht mehr ändern.

Nun zur Frage:
Gibt es in Typo3 irgendwelche Methoden, womit ich im Plugin aus Typoscript (Text) ein TypoScript-Array machen kann? Also der Text muss ja nicht unbedingt wie TypoScript verarbeitet werden - ich will ja nur eine einfache Methode, bzw. standardkonforme Methode, meine Konfiguration zu modifizieren.

Vielen Dank für Vorschläge.

Lieben Gruß

sunixzs

Edith sagt: Aus Script werden manchmal Smilies.