Zum Inhalt springen

Extbase und Flexform

Erstellt am 14. Dezember 2009 · 5 Antworten · letzte Antwort am 15. Juli 2010

Tags: Frage

timo_s ·

Hallo.

Ich versuche gerade eine Extension mit extbase zu programmieren, leider wird die flexform.xml erfolgreich ignoriert.

In der ext_tables.php melde ich sowohl das Plugin als auch die flexform.xml an.

  // Plugin anmelden
Tx_Extbase_Utility_Extension::registerPlugin(
  $_EXTKEY,                                 // The name of the extension in UpperCamelCase
  'Pi1',                                    // A unique name of the plugin in UpperCamelCase
  'MyExtension'                             // A title shown in the backend dropdown field
);

$extensionName = t3lib_div::underscoredToUpperCamelCase($_EXTKEY);
$pluginSignature = strtolower($extensionName) . '_pi1';
$TCA['tt_content']['types']['list']['subtypes_excludelist'][$pluginSignature] = 'layout,select_key,recursive';

  // Flexform
$TCA['tt_content']['types']['list']['subtypes_addlist'][$pluginSignature] = 'pi_flexform';
t3lib_extMgm::addPiFlexFormValue($pluginSignature, 'FILE:EXT:'.$_EXTKEY.'/Configuration/FlexForms/flexform.xml');

Die Datei flexform.xml ist natürlich vorhanden und darf gelesen/ausgeführt werden.

In der entsprechenden Action des Controllers kann ich mittels '$this->settings' auf die 'settings' aus derm TypoScript zugreifen.
Wie bekomme ich nun die Daten aus dem Flexform in die Action des Controllers?

Über produktive Vorschläge wäre ich sehr dankbar, denn Onkel Google hat mir bis dato nicht weiterhelfen können.

Danke

manuelstofer ·

Würde mich auch sehr interessieren, habs auch nicht rausgefunden.

Hatte bei der Extension blog_example nachgeschaut. Dort wird jedoch auch versucht über $this->settings auf die Flexform Werte zuzugreifen, was zu einem Fehler führt.

Handelt es sich um einen Fehler im extbase framework?

steffenk ·

Extbase (Configuration): Made it possible to override controller and action from FlexForm by defining a FlexForm field "switchableControllerActions" which is a semicolon-separated list of Controller->Action combinations. Also, all flexform values are merged on top of the framework configuration. This change is not backwards-compatible in case you used FlexForm settings. Before this change, a flexform setting "foo" has been merged onto "settings.foo". Now, the flexform setting needs to be called "settings.foo" to be merged correctly into the settings (note the prefixing). This enables to override ALL TypoScript configuration from FlexForms, not just extension specific settings.

Also alle Felder in der Flexform mit settings.xyz benennen

afoeder ·

@einpraegsam: nicht ganz; und aufgrund Deines Eintrags habe ich meine gesuchte Information überlesen 😉

Daniel @ npostnik.de schreib lediglich, dass mittels "switchableControllerActions" der Standard- bzw. die erlaubten Controller per FF konfigurierbar gemacht werden können; das interessante, was Steffen jedoch zitiert hat und meint, ist:

wenn im FlexForm die Felder mit setting.myFieldName benannt werden, dann sind sie im Controller mittels (array)$this->settings ebenfalls zugreifbar.
Sonst ist lediglich das, was im TS unter plugin.tx_myExtname.settings { } definiert ist, aus dieser Variable lesbar.

Perfekt, genau was ich gesucht habe! Danke 🙂

Das ist im blog_example nicht korrekt gepflegt, da gibt's zwar ein FlexForm, aber nicht mit der setting....-Variante...

Beste Grüße!
Adrian

einpraegsam.​net ·

Thx ich habe wieder nur mit einem Auge gelesen...

Beispiel Flexform von wt_twitter:

<T3DataStructure>
	<meta>
		<langDisable>1</langDisable>
	</meta>
	<sheets>
		<main>
			<ROOT>
				<TCEforms>
					<sheetTitle>LLL:EXT:wt_twitter/Resources/Private/Language/locallang_db.xml:pi_flexform.sheet_main</sheetTitle>
				</TCEforms>
				<type>array</type>
				<el>
					<settings.flexform.account>
						<TCEforms>
							<exclude>1</exclude>
							<label>LLL:EXT:wt_twitter/Resources/Private/Language/locallang_db.xml:pi_flexform.account</label>
							<config>
								<type>input</type>
								<size>20</size>
							</config>
						</TCEforms>
					</settings.flexform.account>
				</el>
			</ROOT>
		</main>
	</sheets>
</T3DataStructure>
$account = $this->settings['flexform']['account'];

Eine Hilfsfunktion in Classes/Utility/ schraubt bei mir die Flexform und TypoScript Werte zusammen - vielleicht kann es jemand brauchen:

public static function mergeTypoScript2FlexForm(&$settings) {
	$tmp_settings = array();
	
	if (isset($settings['setup']) && is_array($settings['setup'])) {
		$tmp_settings = $settings['setup']; // copy typoscript part to conf part
	}
	
	if (isset($settings['flexform']) && is_array($settings['flexform'])) {
		$tmp_settings = array_merge((array) $tmp_settings, (array) $settings['flexform']); // copy flexform part to conf part
	}
	
	$settings = $tmp_settings;
}