Auslesen und Umwandeln vom Datenbankfeld "flexform" [Gelöst]

  • infastra infastra
    Padawan
    0 x
    46 Beiträge
    0 Hilfreiche Beiträge
    02. 07. 2013, 09:59

    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


  • 1
  • krisc krisc
    T3PO
    0 x
    12 Beiträge
    0 Hilfreiche Beiträge
    04. 07. 2013, 12:42

    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.

    1. $records = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
    2. 'tx_fed_page_flexform',
    3. 'pages',
    4. 'uid=2',
    5. '',
    6. ''
    7. );

    Das Ergebnis kann dann mit solchen Funktionen wie mysql_fetch_assoc oder mysqli_fetch_array ausgelesen werden.

    Viele Grüße

    Christian

  • infastra infastra
    Padawan
    0 x
    46 Beiträge
    0 Hilfreiche Beiträge
    16. 07. 2013, 22:55

    Hallo,

    mittlerweile habe ich dafür eine Lösung gefunden. Sie geht in Deine Richtung, Christian:

    1. $table = 'tt_content';
    2. //Anfertigen der Where-Bedingung
    3. $whereClause = 'uid = ' . intval($requestElements['elementId']);
    4. $whereClause.= ' AND list_type = "extensionName_pluginName"';
    5. $whereClause.= $GLOBALS['TSFE']->sys_page->enableFields($table);
    6. $specialData = $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow('pi_flexform', $table, $whereClause);
    7. $flexformService = t3lib_div::makeInstance('Tx_Extbase_Service_FlexFormService');
    8. $flexArr = $flexformService->convertFlexFormContentToArray($specialData['pi_flexform']);

    Der Schlüssel war die Klasse FlexFormService. Diese wandelt das XML automatisch um. Der Zugriff erfolgt nun über

    1. $flexArr['feldA']

    Vielleicht hilft es ja jemanden.

    Viele Grüße
    Mathias

  • Ei-Dotter Ei-Dotter
    Jedi-Ritter
    0 x
    137 Beiträge
    1 Hilfreiche Beiträge
    29. 01. 2016, 00:54

    Mir hat es total geholfen, vielen Dank!

    Zeile 7 und 8 sind jetzt (Typo3 6.2) ein bisschen anders:

    1. $flexformService = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Service\\FlexFormService');
    2. $flexArr = $flexformService->convertFlexFormContentToArray($specialData['pi_flexform']);

  • 1