Immer mal wieder steht man als Entwickler vor der Aufgabe eine Extension zu entwickeln, die sowohl eine Standardkonfiguration, entweder aus der Extension oder aus dem Seiten-Typoscript bekommt, die aber zusätzlich auch noch über ein Flexform an jeder eingesetzten Stelle individuell konfiguriert werden kann.

Da ich im Extbase-Framework nichts gefunden habe um diese „Zusammenführung“ zu machen, habe ich nach kurzer Suche im Netz in paar Teile aus dem Netz mit eigenen Überlegungen gepaart und folgendes ist dabei rausgekommen.

1. Typoscript-Setup (per Extension oder per TS-Template)

[crayon]
plugin.tx_example {
settings{
setup{
sample_1 = 0
sample_2{
sample_2a = X
sample_2b = X
}
}
}
}
[/crayon]

2. Flexform
[crayon lang=“xml“]




input
10
trim







input
10
trim







input
10
trim



[/crayon]

3. Extbase-Controller
[crayon lang=“php“]
class Tx_Example_Controller_ExampleController extends Tx_Extbase_MVC_Controller_ActionController {

/**
* Deletes empty Items from $array
* @return array
*/
private function array_clean ($array, $todelete = false, $caseSensitive = false) {
foreach($array as $key => $value) {
if(is_array($value)) {
$array[$key] = $this->array_clean($array[$key], $todelete, $caseSensitive);
}
else {
if($todelete) {
if($caseSensitive) {
if(strstr($value ,$todelete) !== false)
unset($array[$key]);
}
else {
if(stristr($value, $todelete) !== false)
unset($array[$key]);
}
}
elseif (empty($value)) {
unset($array[$key]);
}
}
}
return $array;
}

/**
* Global Initializing
*/
public function initializeAction(){
$this->settings = array_replace_recursive((array) $this->settings[‚setup‘], (array) $this->array_clean($this->settings[‚flexform‘]));
}
}
[/crayon]

Der Aufruf in der „initializeAction“ fasst die Daten aus dem TS-Setup und dem Flexform zusammen und überschreibt nur die im Flexform gesetzten Werte in den unter „$this->settings“ verfügbaren Einstellungen. Somit werden die Werte aus dem TS-Setup als Standard gesetzt und nur die im Flexform wirklich gesetzten Werte werden eingesetzt.

Wenn jemand eine einfachere Möglichkeit kennt, die Konfigurationen zusammenzufassen, einfach einen Kommentar hinterlassen.