AJAX + Extension

  • anj anj
    Jedi-Meister
    0 x
    320 Beiträge
    0 Hilfreiche Beiträge
    28. 09. 2006, 18:54

    Hi!

    Baue gerade an einer Ajax Extension und das Problem dabei ist das zugreifen auf die flexform felder ...

    Die Extension befindet sich ganz normal auf einer Seite. Diese hat flexforms, auf die ich auch ganz normal zugreifen kann. Baue ich jetzt aber eine Ajax Antwort für den Client: (auf der gleichen Seite)

    [TS]responseToBrowser = PAGE
    responseToBrowser{
    typeNum = 1
    config {
    disableAllHeaderCode = 1
    additionalHeaders = Content-type:text/xml
    no_cache = 1
    xhtml_cleaning = 0
    }
    10 < plugin.tx_pmtree_pi1
    10.userFunc = tx_pmtree_pi1->ajaxResponse
    }
    [/TS]

    ist das Array nicht mehr erreichbar. Wird somit das Inhaltselement nicht verfügbar gemacht? Muss man hierbei die Daten per Hand auslesen? Gibt es da sonst noch einen trick?


  • steffenk steffenk
    Obi-Wan Kenobi
    0 x
    4666 Beiträge
    0 Hilfreiche Beiträge
    28. 09. 2006, 18:58

    das liegt dann an der Ajax-Methode. Da Du dafür einen eigenen PAGE-Typ definierst, werden die xml-Daten als Inhalt angesehen und nicht mehr als Konfiguration.

    Es gibt passendere Ajaxmethoden - entweder die eID-Technik oder xAjax.
    Ein lauffähiges Beispiel mit xAjax habe ich in meiner Ext FLV-Player verwendet
    (siehe http://www.sk-typo3.de/FLV-Player-mit-xAjax.185.0.html)

  • anj anj
    Jedi-Meister
    0 x
    320 Beiträge
    0 Hilfreiche Beiträge
    28. 09. 2006, 19:06

    hmmm, das verstehe ich aber trotzdem nicht ganz...
    Ich möchte ja nur auf die FlexForms der eingefügten Extension zugreifen. Das geht natürlich direkt mit dem sql select ... das möchte ich ja vermeiden...

    und mit der Userfunc möchte ich eigentlich nur die Extension aufrufen die eigentlich schon eingefügt wurde (auf der gleichen Seite), nur mit einer anderen Methode.

    ist das der falsche ansatz?

    ich gucke mir auch eben die anderen extension an ...

    p.s.: was ist eigentlich die eID Technik?

  • steffenk steffenk
    Obi-Wan Kenobi
    0 x
    4666 Beiträge
    0 Hilfreiche Beiträge
    28. 09. 2006, 19:12

    naja, bei Content-type:text/xml kannst Du die xml ja nicht mehr einfach auslesen.

    Ich versteh noch nicht was Du mit der Flexform überhaupt willst ?
    Oder ist das eine TV-spezifische Angelegenheit ? Dann muss ich eh passen ...

    eID ist die eingebaute Ajaxmethode - in einem Podcast erklärt Kasper die Wirkungsweise, ich meine das ist der Podcast mit der Whiteboard-Extension.

  • anj anj
    Jedi-Meister
    0 x
    320 Beiträge
    0 Hilfreiche Beiträge
    28. 09. 2006, 19:18

    Ne, es geht nicht um TV.

    Die Extension soll einen Baum aus einer anderen DB darstellen, als AJAX variante, da sehr viele Einträge ...
    Dabei habe ich einfach flexforms für die Konfiguration der Extension gewählt, also Datenbank, tabelle etc. ... diese sind dann einfach nicht verfügbar wenn ich die Extension über userfunc aufrufe ... ist auch klar, weil damit die extension quasi noch einmal eingefügt wurde.
    Die Frage ist jetzt ob ich die eingefügte Extension aufrufen kann? Vielleicht über CONTENT? Das weiss ich halt nicht ...
    Oder sollte ich einfach die flexforms über ein SQL select auslesen?

    und danke schon mal für die schnellen Antworten ;D

    P.S. was ist denn die eID - Technik?

  • steffenk steffenk
    Obi-Wan Kenobi
    0 x
    4666 Beiträge
    0 Hilfreiche Beiträge
    28. 09. 2006, 19:25

    Ah, jetzt versteh ich was Du meinst :)

    Die Konfiguration geht doch nicht verloren, da das Plugin als Klasse instanziert ist.

    Sorge einfach dafür, das die über Flexform übergebenen Parameter in der Klasse global zur Verfügung stehen (z.B. $this->conf[]). Dann kannst Du über Ajax eine Funktion in der Klasse aufrufen und hast alles für die Abfrage.

    eID ist eine getvariable, die dafür sorgt, das die Auswertung über Ajax gemacht wird. In Typo3 4.0 hat diese Methode die alte thumb.php-Methode abgelöst. Am besten Du schaustDir den entsprechenen Podcast mal an (typo3.org)

  • anj anj
    Jedi-Meister
    0 x
    320 Beiträge
    0 Hilfreiche Beiträge
    28. 09. 2006, 19:31

    [quote="steffenk"]
    Die Konfiguration geht doch nicht verloren, da das Plugin als Klasse instanziert ist.

    Sorge einfach dafür, das die über Flexform übergebenen Parameter in der Klasse global zur Verfügung stehen (z.B. $this->conf[]). Dann kannst Du über Ajax eine Funktion in der Klasse aufrufen und hast alles für die Abfrage.
    [/quote]

    Hmm wie mache ich das denn ? ;D
    Das hier ist meine Initialisation:
    In $this->flexConf werden die flexforms gespeichert...

    1. /**
    2.  * initializes the flexform and all config options ;-)
    3.  */
    4. function init($conf){
    5. $this->conf=$conf;
    6. $this->pi_loadLL(); // Loading language-labels
    7. $this->pi_setPiVarDefaults(); // Set default piVars from TS
    8. $this->pi_initPIflexForm(); // Init FlexForm configuration for plugin
    9. $this->pi_USER_INT_obj=1; // Configuring so caching is not expected. This value means that no cHash params are ever set. We do this, because it's a USER_INT object!
    10.  
    11.  
    12. $this->flexConf = array(); // Setup our storage array...
    13. // Assign the flexform data to a local variable for easier access
    14. $piFlexForm = $this->cObj->data['pi_flexform'];
    15. // Traverse the entire array based on the language...
    16. // and assign each configuration option to $this->lConf array...
    17. foreach ( $piFlexForm['data'] as $sheet => $data )
    18. foreach ( $data as $lang => $value )
    19. foreach ( $value as $key => $val )
    20. $this->flexConf[$key] = $this->pi_getFFvalue($piFlexForm, $key, $sheet);
    21. }

  • steffenk steffenk
    Obi-Wan Kenobi
    0 x
    4666 Beiträge
    0 Hilfreiche Beiträge
    28. 09. 2006, 19:39

    ist völlig korrekt. Wahrscheinlich liegts dann an Deinem Ajax-Aufruf, so das nicht auf die Klasse zugegriffen wird.

    In meinem FLV-Player mache ich das ja auch - ich konfigurier die Ext über Flexform. In der Ext binde ich xajax ein und in den Funktionen, die über xajax aufgerufen werden, wird der komplette Inhalt der Ext neu generiert, natürlich unter Berücksichtigung der Flexform-Konfiguration.

    Schau mal rein: http://typo3.org/extensions/repository/view/sk_simpleflvplayer/0.0.2/info/pi1%252Fclass.tx_sksimpleflvplayer_pi1.php/

  • anj anj
    Jedi-Meister
    0 x
    320 Beiträge
    0 Hilfreiche Beiträge
    28. 09. 2006, 20:07

    Habe bei dir keine großen unterschiede bezüglich flexforms finden können.. ?

    [quote="steffenk"]
    ist völlig korrekt. Wahrscheinlich liegts dann an Deinem Ajax-Aufruf, so das nicht auf die Klasse zugegriffen wird.
    [/quote]

    Ja, also die Klasse wird natürlich aufgerufen nur die Settings sind nicht verfügbar. Habe noch festgestellt das das conf Array dann nur mit den Page Infos gefüttert ist. Somit ist natürlich das flexform nicht erreichbar.

    Wenn ich allerdings die Extension so aufrufe:

    [TS]responseToBrowser = PAGE
    responseToBrowser{
    typeNum = 1
    config {
    disableAllHeaderCode = 1
    additionalHeaders = Content-type:text/xml
    no_cache = 1
    xhtml_cleaning = 0
    }

    10 = CONTENT
    10 {
    table = tt_content
    select {
    pidInList = this
    }
    }
    }
    }
    [/TS]

    Sind die Einstellungen verfügbar .... es ist genau das was ich eigentlich brauche, jetzt müsste ich halt nur noch als userFunc nicht die main aufrufen. Kann ich das bei einem CONTENT element noch ändern?

  • steffenk steffenk
    Obi-Wan Kenobi
    0 x
    4666 Beiträge
    0 Hilfreiche Beiträge
    28. 09. 2006, 23:20

    Du kannst doch auch über TS die userfunc definieren

    [TS]plugin.tx_ext_pi1.userfunc = tx_ext_pi1->secondFunction[/TS]