Zum Inhalt springen

TypoScript und FlexForm => leere Einstellung ignorieren

Erstellt am 20. Januar 2014 · 2 Antworten · letzte Antwort am 29. Januar 2014

Tags: Frage

intensivstation ·

Früher konnte man ja selbst bestimmen, wann FlexForm-Einstellungen die TypoScript-Einstellung überschreiben soll. Bei Extbase geschieht dies automatisch so: FlexForm überschreibt TypoScript, auch wenn über FlexForm nichts gewählt wurde.
Das ist blöd so. Wenn ich z.B. eine singlePid über TypoScript angebe, möchte ich, dass die übernommen wird, wenn man keine singlePid über die FlexForms auswählt.
Im Moment wird die TypoScript-Einstellung auch mit einer leeren FlexForm-Einstellung überschrieben.
Wie kann man das am besten verhindern?

intensivstation ·

Das haut in Typo3 6.1 nicht mehr hin, da CONFIGURATION_TYPE_FRAMEWORK schon die gemergten Settings zurück liefert. Aber ich wurde hier noch fündig:
https://svn.typo3.org/TYPO3v4/Extensions/me_google_calendar/trunk/Classes/Controller/CalendarController.php
Damit sieht dann meine Lösung nun so aus:

	public function injectConfigurationManager(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface $configurationManager) {
		$this->configurationManager = $configurationManager;

		$tsSettings = $this->configurationManager->getConfiguration(
			\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT
		);
		$tsSettings = $tsSettings['plugin.']['tx_camaliga.']['settings.'];
		$originalSettings = $this->configurationManager->getConfiguration(
			\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_SETTINGS
		);
		
		// start override
		if (isset($tsSettings['overrideFlexformSettingsIfEmpty']) && $tsSettings['overrideFlexformSettingsIfEmpty']==1) {
			// if flexform setting is empty and value is available in TS
			foreach ($tsSettings as $key=>$value) {
				if ($key == 'img.') continue;
				if (!$originalSettings[$key] && isset($value)) $originalSettings[$key] = $value;
			}
			foreach ($tsSettings['img.'] as $key=>$value) {
				if (!$originalSettings['img'][$key] && isset($value)) $originalSettings['img'][$key] = $value;
			}
		}
		$this->settings = $originalSettings;
	}