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.