[Frage] Extbase und Ajax und PageType [Gelöst]

  • 0 x
    64 Beiträge
    4 Hilfreiche Beiträge
    09. 01. 2014, 15:47

    Hallo alle miteinander!

    Ich hänge mal wieder bei der Arbeit mit Extbase. Mein Ziel ist es, via Ajax vom Frontend aus eine Action in meinem Controller aufzurufen, damit diese irgend etwas tut und evtl. noch einen Wert zurück gibt.
    Es handelt sich hierbei erstmal nur um einen Testaufruf, um zu verstehen, wie das Zusammenspiel von Extbase und Ajax funktioniert.

    Ich habe mich bei dem Test an folgende Beschreibung gehalten, wobei ich mich für die Variante mit dem PageType entschieden habe:
    [url]http://daniel.lienert.cc/blog/blog-post/2011/04/23/typo3-extbase-und-ajax/[/url]

    Erstmal zu meinem Code:

    [b]TypoScript:[/b]

    1. # Prototyp für alle Ajax-Aufrufe
    2. lib.AJAXPrototype= PAGE
    3. lib.AJAXPrototype {
    4. typeNum = 100000
    5. config {
    6. disableAllHeaderCode = 1
    7. xhtml_cleaning = 0
    8. admPanel = 0
    9. debug = 0
    10. no_cache = 1
    11. additionalHeaders = Content-type:text/plain
    12. }
    13. }
    14.  
    15. # Testaufruf für bestimmtes Plugin
    16. AJAX_Plugintyp < lib.AJAXPrototype
    17. AJAX_Plugintyp{
    18. typeNum = 100001
    19. 10 < tt_content.list.20.tx_myextension_pi1blubb
    20. }

    [b]Controller-Action:[/b]

    1. /**
    2.  * action for ajax-test
    3.  *
    4.  * @return void
    5.  */
    6. public function myajaxAction(){
    7. file_put_contents("BLUBB.txt", "TEST");
    8. echo "erfolg"; exit;
    9. }

    [b]Ajax-Aufruf:[/b]

    1. function testAjax(){
    2. var url_controller = 'tx_myextension_pi1blubb[controller]=Myextension';
    3. var url_action = 'tx_myextension_pi1blubb[action]=myajax';
    4. var url_data = 'tx_myextension_pi1blubb[uid]=7';
    5. var url_type = 'type=100001';
    6.  
    7. $.ajax({
    8. url: 'index.php',
    9. data: url_controller + '&' + url_action + '&' + url_data + '&' + url_type,
    10. success: function(result){
    11. alert(result);
    12. }
    13. });
    14. }

    Der Ajax-Aufruf an sich scheint zu funktionieren (er führt zumindest die success-Funktion aus). Die Ausgabe der alert-Methode in der success-Funktion ist allerdings leer. Um zu prüfen, ob wenigstens meine Action aufgerufen wird, wollte ich mit der Zeile file_put_contents("BLUBB.txt", "TEST"); eine existierende (mit vollen Rechten versehene) Textdatei beschreiben. Diese bleibt aber leer. Also gehe ich davon aus, dass die Action nicht aufgerufen wird.
    Folgendes habe ich schon geprüft und soweit als Fehlerquelle ausgeschlossen:
    - Die Action myajax ist eine erlaubte und ungecachte Aktion für das Plugin.
    - Die Action habe ich mit und ohne Template-Datei getestet - gleiches Resultat.
    - Ich habe die Zeile echo "erfolg"; exit; zum Testen rausgenommen und eingefügt - gleiches Resultat.
    - Ich habe nach jeder Änderung den Konfig- und Alle Seitencaches geleert.

    Hat irgend jemand eine Idee, wo mein Fehler liegen könnte? Ich arbeite mit der Typo3 6.2 beta3 - falls das hier eine Rolle spielt. Ich habe das Gefühl, dass es an folgender TypoScript-Zeile liegt:
    10 < tt_content.list.20.tx_myextension_pi1blubb
    Diese sollte - soweit ich das verstehe - doch dazu führen, dass das Plugin aufgerufen und die übergebene Aktion im entsprechenden Controller ausgeführt wird. Oder verstehe ich das falsch?

    Danke schonmal für eure Hilfe :)

  • 0 x
    64 Beiträge
    4 Hilfreiche Beiträge
    20. 01. 2014, 09:51 - Lösung

    Also ich habe heut mein Typo3 6.2 beta3 auf beta4 geändert, was dazu führte, dass ich endlich wieder die Extension "Template" in meiner Funktionsliste links (unter "web") nutzen kann. Hier habe ich nun nochmal nachgeschaut, ob der Pfad zu meiner Extension im TypoScropt so wirklich existiert (der Teil: 10 < tt_content.list.20.tx_myextension_pi1blubb). Und sieh da: es muss nicht heißen "tx_myextension_pi1blubb" sondern nur "myextension_pi1blubb" (ohne "tx_")!
    Ich finde es ziemlich bescheiden, dass Typo3 nicht darauf hinweist, dass der angegebene "Pfad" im Typo3Script falsch ist... Wie auch immer - mein Ajax-Skript kann nun zumindest auf meinen Controller zugreifen.

    ABER: Typo3 ignoriert dabei die übergebene Action, die aufgerufen werden soll. Es ist egal, ob ich die Action im Ajax-Aufruf mit großem oder kleinem Buchstabe beginnen lasse - Typo3 ruft meine editAction auf. Die editAction ist die erste Funktion in meinem Cotnroller und auch die erste, die ich in der ext_localconf.php für das Plugin angegeben habe. Die erste Funktion, die in der ext_localconf.php angegeben wird, wird ja standardmäßig genutzt, wenn keine Action übergeben wurde. Da ich aber eine Action übergeben habe, wundert es mich, dass Typo3 trotzdem die Standard-Action nutzt.

    Kann es sein, dass ich für den Aufruf einer Controller-Action via Ajax ein eigenständiges Plugin erstellen muss, das nur Zugriff auf diese eine Controller-Action hat, die ich für den Ajax-Aufruf benötige? Oder kann man doch irgendwie auf eine erlaubte Funktion des bestehenden Plugins zugreifen und ich mache nur irgendwo einen Fehler? (Ich fände es unpraktisch, wenn man Funktionalitäten, die eigentlich zusammen gehören, auseinander reißen und in unterschiedliche Plugins packen muss)