Hallo,
ich stehe so ein bisschen auf'm Schlauch, wie ich folgendes Problem lösen könnte:
Mithilfe eines AJAX-Request möchte ich mehrere Select-Boxen dynamisch (je nach Auswahl) befüllen. Die Einstellungen werden in einem Plugin-Content-Element gefüllt, das ich mittels flexform in das entsprechende Datenbankfeld schreibe. Ich möchte diese Einstellungen nicht in das Anfrage-Formular schreiben und stattdessen die Einstellungen aus der Datenbank laden und via PHP-Array in der Anfrage verwenden. Soweit der Plan, bei der Realisierung stehe ich an dem Punkt, wie kann ich die Daten aus der Datenbank lesen und die entsprechende Form bringen?
Im Forum habe ich leider nur die Möglichkeit gefunden, wie "seitenfremde" Inhaltselemente gerendert werden. Allerdings benötige ich ja nur die Einstellungen aus dem Feld flexform?
Kann mir jemand einen Denkanstoß in die richtige Richtung geben?
Viele Grüße
Mathias
Hallo,
ich weiß nicht genau, welches deine Hauptfrage ist, aber wenn es um die Datenbankabfrage geht, dann lautet die Frage vermutlich wie du an den Inhalt des Feldes pages.tx_fed_page_flexform bzw. content.pi_flexform kommst. Ich würde eine solche Datenbankabfrage mit exec_SELECTquery lösen, z.B.
$records = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
'tx_fed_page_flexform',
'pages',
'uid=2',
'',
''
);
Das Ergebnis kann dann mit solchen Funktionen wie mysql_fetch_assoc oder mysqli_fetch_array ausgelesen werden.
Viele Grüße
Christian
Hallo,
mittlerweile habe ich dafür eine Lösung gefunden. Sie geht in Deine Richtung, Christian:
$table = 'tt_content';
//Anfertigen der Where-Bedingung
$whereClause = 'uid = ' . intval($requestElements['elementId']);
$whereClause.= ' AND list_type = "extensionName_pluginName"';
$whereClause.= $GLOBALS['TSFE']->sys_page->enableFields($table);
$specialData = $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow('pi_flexform', $table, $whereClause);
$flexformService = t3lib_div::makeInstance('Tx_Extbase_Service_FlexFormService');
$flexArr = $flexformService->convertFlexFormContentToArray($specialData['pi_flexform']);
Der Schlüssel war die Klasse FlexFormService. Diese wandelt das XML automatisch um. Der Zugriff erfolgt nun über
$flexArr['feldA']
Vielleicht hilft es ja jemanden.
Viele Grüße
Mathias
Mir hat es total geholfen, vielen Dank!
Zeile 7 und 8 sind jetzt (Typo3 6.2) ein bisschen anders:
$flexformService = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Service\\FlexFormService');
$flexArr = $flexformService->convertFlexFormContentToArray($specialData['pi_flexform']);