---
title: "TypoScript per Flexform für Plugin setzen"
url: "https://www.typo3.net/d/100651-typoscript-per-flexform-fuer-plugin-setzen"
source: "typo3.net"
tags: ["Extensions","Entwicklung","Frage"]
created: "2010-08-16"
last_reply: "2010-08-16"
replies: 0
solved: false
page: 1
pages: 1
lang: "de"
---

# TypoScript per Flexform für Plugin setzen

Extensions › Entwicklung · 0 Antworten · gestartet 2010-08-16

## Eröffnungsbeitrag

**sunixzs** · 2010-08-16 · [Beitrag #1](https://www.typo3.net/d/100651-typoscript-per-flexform-fuer-plugin-setzen/1)

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:

```typoscript
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." ):

```typoscript
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):

```php
$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:

```php
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:

```php
$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:

```php
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.

---

Quelle: „TypoScript per Flexform für Plugin setzen“, typo3.net, https://www.typo3.net/d/100651-typoscript-per-flexform-fuer-plugin-setzen
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
