FlexForm Konfiguration leer in eigenem Page Type?

  • SeveQ SeveQ
    R2-D2
    0 x
    101 Beiträge
    0 Hilfreiche Beiträge
    05. 08. 2008, 00:16

    Hi Leute,

    ich hab für einen Ajax Request einer eigenen Extension folgendermaßen eine Response Page gebaut.

    EXT:blubb/pi1/static/setup.txt:
    [TS]includeLibs.blubbediblubb = EXT:blubb/pi1/class.tx_blubb_pi1.php

    blubb_page >
    blubb_page = PAGE
    blubb_page {
    typeNum = 12345
    config {
    language = de
    locale_all = de_DE
    disableAllHeaderCode = 1
    sendNoCacheHeaders = 1
    metaCharset = utf-8
    no_cache = 1
    admPanel = 0
    xhtml_cleaning = 0
    additionalHeaders = Content-Type:text/plain;charset=utf-8
    }

    10 < plugin.tx_blubb_pi1
    10.userFunc = tx_blubb_pi1->getAjaxResponse
    }
    [/TS]

    Das funktioniert soweit auch schon sehr gut. Bis auf eine Sache:

    ich hab im Kontext dieser Seite aus irgendeinem Grund keine Werte aus der FlexForm Konfiguration zur Verfügung.

    Ich lese die FlexForm Config in einer eigenen Funktion ein.

    1. function initFF()
    2. {
    3. $content = "";
    4.  
    5. $this->pi_initPIflexForm();
    6. $this->lConf = array();
    7. $piFlexForm = $this->cObj->data['pi_flexform'];
    8.  
    9. foreach($piFlexForm['data'] as $sheet => $data)
    10. {
    11. foreach( $data as $lang => $value )
    12. {
    13. foreach( $value as $key => $val )
    14. {
    15. $this->lConf[$key] = $this->pi_getFFvalue($piFlexForm, $key, $sheet);
    16. }
    17. }
    18. }
    19.  
    20. return $content;
    21. }

    Im Kontext der Hauptseite funktioniert das zu 100%. Im Kontext der Response Seite ist $this->cObj->data['pi_flexform']; nicht existent.

    Wie kommt das? Und wie erreiche ich, daß auch im Kontext der Response Page die Konfiguration zur Verfügung steht?

    Danke

    Grüße,
    Hendrik


  • 1
  • SeveQ SeveQ
    R2-D2
    0 x
    101 Beiträge
    0 Hilfreiche Beiträge
    05. 08. 2008, 02:28

    Mir isses gerade wie Schuppen von den Augen gefallen:

    weil es gar keine Konfiguration für diese Page gibt. Die vorgenommenen Einstellungen sind nicht für das Plugin global, sondern nur für ein spezifisches Contentitem gültig...

    Oh man! #angry# #angry# #angry#

  • just2b just2b
    TYPO3-Yoda
    0 x
    18741 Beiträge
    2 Hilfreiche Beiträge
    05. 08. 2008, 06:10

    und damit du zugriff auf das TS hast, müsstest du noch den Parameter $conf übergeben, so wie in deinem plugin

    georg

  • michelfontaine michelfon...
    Sternenflotten-Admiral
    0 x
    164 Beiträge
    0 Hilfreiche Beiträge
    03. 03. 2009, 15:48

    Ich habe das gleiche Problem und die Schuppen sind bei mir noch auf den Augen. Was bedeutet denn

    Die vorgenommenen Einstellungen sind nicht für das Plugin global, sondern nur für ein spezifisches Contentitem gültig
    ?

    Warum steht $this->cObj->data['pi_flexform'] in meinem Plugin nur bei Pagetype 0 zur Verfügung (während andere Werte aus dem data-Array auch bei anderen Pagetypes zur Verfügung stehen)? Wo wird die Auswahl getroffen? Und wo muss ich $conf übergeben? Im TS oder wo? Bin leider aus Euren Aussagen nicht schlau geworden...

    Viele Grüße
    Mic

  • tylfaril tylfaril
    Typ im Roten Hemd
    0 x
    2 Beiträge
    0 Hilfreiche Beiträge
    04. 05. 2010, 17:08

    hi.

    ich hab leider ein ähnliches, um nicht zu sagen identes problem.

    ich hab auf meiner hauptseite einen datenbankzugriff der von einem paramter aus einer flexform abhängig ist.

    mache ich dann einen ajax call kann die flexform nicht mehr initialisiert werden und meine abfrage geht in der datenbank ins leere.
    mein typoscript für meine extension sieht so aus:

    1. #AJAX call
    2. ajaxCall = PAGE
    3.  
    4. ajaxCall {
    5. typeNum = 5001
    6. 10 < plugin.tx_infproject_pi1
    7. 10.pid_list >
    8. 10.pid_list = 37
    9. config {
    10. disableAllHeaderCode = 1
    11. xhtml_cleaning = 0
    12. admPanel = 0
    13. debug = 0
    14. no_cache = 1
    15. }
    16. }

    jetzt soll die 37 aber aus der aktuellen $conf['pidList'] kommen.

    bei meinem AjaxCall füge ich dann der URL "&type=5001" hinzu.

    1. $.ajax({
    2. type: "POST",
    3. url: document.URL + '&type=5001',

    mir ist leider nicht klar wie ich den Parameter $conf übergeben soll, so wie just2b meinte bzw wie ich die Konfiguration für mein Objekt mit der typeNum 5001 von meiner hauptseite übernehmen kann.

    einen weiteren Lösungsansatz habe ich mit eID unternommen.
    obwohl ich den noch nicht zum Laufen gebracht habe und daher nicht weiß ob mir auf diesem weg die $this->piVars bzw $conf erhalten bleibt.

    bei meiner JS behandlung füge ich dann ein "&eID=ajaxCall" hinzu.

    1. $.ajax({
    2. type: "POST",
    3. url: document.URL + '&eID=ajaxCall',

    in meiner ext_localconf.php hab ich ebenfalls die Zeile

    1. $GLOBALS ['TYPO3_CONF_VARS']['FE']['eID_include']['ajaxCall'] = 'EXT:inf_project/ajaxCall.php';

    hinzugefügt.

    jedoch gibt mein php script ajaxCall.php
    (

    1. <?php
    2. echo "ajaxCall.php"; ?>
    )
    nichts zurück.

    Hat jemand Erfahrungen gemacht?
    Oder sogar eine Lösung?

    Ich bräuchte nach dem Ajax Aufruf einen Zugriff auf die Daten in der FlexForm.

    lg
    Matthias

  • Shark1982 Shark1982
    Padawan
    0 x
    49 Beiträge
    0 Hilfreiche Beiträge
    18. 07. 2011, 11:45

    Gibts es denn dafür jetzt eine Möglichkeit ? Stehe vor dem gleichen Problem.

    Zitat:
    und damit du zugriff auf das TS hast, müsstest du noch den Parameter $conf übergeben, so wie in deinem plugin

    Wo genau muss ich den Parameter $conf übergeben in PHP oder TS steh auf dem Schlauch ?

  • tylfaril tylfaril
    Typ im Roten Hemd
    0 x
    2 Beiträge
    0 Hilfreiche Beiträge
    21. 07. 2011, 14:26

    also bei mir rufe ich einfach

    $this->initPIflexForm();

    auf
    ich schätze das habe ich aus der tt_news:

    1. $this->pi_initPIflexform();
    2. // Copy the flexform data to a new object
    3. $piFlexForm = $this->cObj->data['pi_flexform'];
    4.  
    5. // Combine FlexForm and TS values
    6. if ($piFlexForm['data']) {
    7. foreach ($piFlexForm['data'] as $sheet => $data) {
    8. foreach ($data as $lang => $value) {
    9. foreach ($value as $key => $val) {
    10. $val = $this->pi_getFFvalue($piFlexForm, $key, $sheet);
    11. /* If value exists in Flexform, overwrite existing Typoscript value or create new array entry */
    12. if ($val != null) {
    13. $this->conf[$key] = $val;
    14. }
    15. }
    16. }
    17. }
    18. }

    die flexform daten sind dann richtig gefüllt
    wenn der ajaxCall richtig eingerichtet ist sollten die variablen normal befüllt sein und zur verfügung stehen.
    oder war das nicht genau das problem?

  • bithostgmbh bithostgm...
    Typ im Roten Hemd
    0 x
    3 Beiträge
    0 Hilfreiche Beiträge
    07. 01. 2019, 15:08

    Wir haben das so gelöst, dass wir bei der URL für den Ajax Request die ID des Content Elements mitgeben und dann in der Ajax Action die Flexform Konfiguration mit dem FlexformService laden.

    URL erstellen im Controller:

    1. $url = $this->uriBuilder->setTargetPageType(1234)->uriFor(
    2. 'ajaxAction',
    3. [
    4. 'contentUid' => (int) $this->configurationManager->getContentObject()->data['uid']
    5. ]
    6. );

    Controller Action:

    1. class SomeController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController
    2. {
    3. protected $flexFormService;
    4. protected $flexformSettings = [];
    5.  
    6. public function injectFlexFormService(\TYPO3\CMS\Extbase\Service\FlexFormService $flexFormService): void
    7. {
    8. $this->flexFormService = $flexFormService;
    9. }
    10.  
    11. public function initializeAction(): void
    12. {
    13. parent::initializeAction();
    14.  
    15. if ($this->request->hasArgument('contentUid')) {
    16. $recordUid = (int) $this->request->getArgument('contentUid');
    17. $record = TYPO3\CMS\Backend\Utility\BackendUtility::getRecord('tt_content', $recordUid, 'pi_flexform');
    18.  
    19. if (!empty($record['pi_flexform'])) {
    20. $this->flexformSettings = $this->flexFormService->convertFlexFormContentToArray($record['pi_flexform']);
    21. }
    22. }
    23. }
    24.  
    25. public function ajaxAction(): void
    26. {
    27. //access $this->flexformSettings;
    28. }
    29. }

  • 1