Problembeschreibung

Wer selbst Joomla-Extensions programmiert, wird bei der eleganten Verwendung von Ajax immer mal wieder auf das Problem stoßen, wie man Inhalte per Ajax-Request innerhalb von Joomla aufrufen soll. In Komponenten noch relativ einfach, stellt sich das bei Modulen etwas komplizierter da. Beispiele hierfür sind z.B. Instant-Search, Instand-Menüs/Navigationen oder Konfiguratoren an Modulpositionen.

Es herrscht die allgemeine Auffassung, dass man Module eigentlich nicht alleine aufrufen kann, sondern immer über eine Komponente gehen muss. Wie kann ich Modulbestandteile, wie z.B. Formularelemente aktualisieren ohne das komplette Joomla-Template in den Zielbereich zu laden.

Vorwegschicken muss man, dass es nicht nur eine Möglichkeit gibt. Jedoch teilen sich die Varianten wesentlich in "schlechte" und "joomla-konforme" Lösungen. Auch sind bei der Entscheidung für die eine oder andere Variante weitere Kriterien relevant, auf die eingegangen werden soll.

 



Übersicht über die Varianten

Diese Aufsstellung zeigt nicht nur die Möglichkeiten, die ei Modul-Aktualisierung möglich sind, sondern auch für andere Extensions genutzt werden können.

jexit() Dies ist ein eigentlich unsauberer Weg, bei dem Joomla zwangsabgeschlossen wird und somit nur gesendet wird was z.B. vom Modul vorher erzeugt wurde.
eigenes Joomla-Template-Script Ein eigenes Script im Template-Verzeichnis von Joomla wird aufgerufen, welches quasi nur die gewünschten Inhalte liefert.
URL-Parameter &format=raw Dieser URL-Parameter an einem Ajax-Request verhindert sämtliche Template-Ausgaben von Joomla. Es wird das componenten-Script ausgeführt und der Controller veranlasst seine Ausgaben ohne das Joomla-Template zu machen.
Componenten-Controllerscript mit Ajax-Funktion Die für diesen Zweck genutzte Komponente erhält ein neues Controler-Script mit einer speziellen Ajax-Funktion die den Ajax-Request bedient. Dazu wird am URL folgendes gehängt: &tast=ajax.meine_funktion. Die Funtion kann in ein bestehendes Komponentenscript eingefügt werden oder als neuer Controller.

 

siehe dazu auch: stackoverflow

 

Die Varianten im Detail

 

Alternativ zur notwendigen Komponente, hatte ich mir schon mal ein Workaround erarbeitet, bei dem man dies umgehen kann, in dem man einfach über Template-Scripte arbeitet.

In Diesem Beitrag soll eine weitere noch elegantere Möglichkeit aufgezeigt werden,

{jcomments on}