Im dritten Teil sehen wir uns nun an wie die Daten im Helper unseres Moduls mod_ajax verarbeitet werden. Hierzu sehen wir uns den Quelltext der helper.php an.
// no direct access defined('_JEXEC') or die('Restricted access'); /** * Helper Klasse für das Modul mod_ajax */ class modAjaxHelper { /** * Wird von com_ajax aufgerufen * @return array Rückgabe an com_ajax */ public static function getAjax() { // Objekt zum ermitteln der übermittelten Parameter erzeugen $input = JFactory::getApplication()->input; // Übermittelter Wert des Formulars $formvalue=$input->get('formvalue'); // Verarbeitung des Übermittelten Wert $result = 'Der übermittelte Wert: "'.strtoupper($formvalue).'"'; // Ergebniss zurück an com_ajax return $result; } }
We ihr seht behsteht die Klasse modAjaxHelper aus einer einzigen Funktion mit dem Namen getAjax(). Während der Name der Klasse vom Modulnamen abhängt muss die Funktion zwingent getAjax() heissen und wird ohne Parameter aufgerufen.
Wie bekommen wir nun die per AJAX gesendeten Daten? Die per AJAX gesendeten Daten werden mit den Methoden Post oder Get an den Serverübertragen und sind somit unter PHP in den Superglobalen Arrays $_GET, $_POST bzw. $_REQUEST zu finden. Joomla bietet jedoch eine eigene Vorgehensweise die wir auch benutzen sollten. Mit
$input = JFactory::getApplication()->input; erzeugen wir ein Instanz eines Jommla Objekts das uns den zugriff auf die übermittelten Daten ermöglicht. Mit $input->get(‚formvalue‘) erhalten wie den Wert des Input-Feldes formvalue aus unserem Formular. Den Wert können wir nun weiter verarbeiten und zum schluss geben wir den Bearbeiteten Wert als Ergebnis der Funktion an die aufrufende Komponente com_ajax zurück die das Ergebnis an den Browser sendet. Zum Schluß ist dann wieder unser Javascript aus den zweiten Teil mit der ausgabe an der Reihe.
Einschränkungen und Fallstricke
Soweit unser einfaches Modul mod_ajax. Um das Zusammenspiel zwischen Modul, Frontend, com_ajax und dem Modul Helper zu zeigen, habe ich so einiges weggelassen. Für einfache Aufgaben mag das schon ausreichen, aber ihr werdet wohl eher komplexere Module entwickeln. Auch das Thema Sicherheit, sprich die Überprüfung der Formular-Daten habe ich hier weggelassen.
Eine Besonderheit der Funktionen der Helper-Klasse ist das sie von Typ Static sind und somit auch aufgerufen werden können ohne das PHP eine Instanz der Klasse erzeugt. Dies müsst ihr berücksichtigen wenn ihr die Helper-Klasse ausbaut und dann auf diese Funktionen und Eigenschaften zugreifen wollt.
Wenn ihr schon Joomla Module entwickelt habt hattet ihr auch schon mit den Modul-Parameter zu tun. Also den Einstellungen zum Modul. Auf diese kann normalerweise über $params->get(‚NAME‘) in der Haupt-PHP-Datei sowie im Template es Moduls zugegriffen werden. In der Helper-Klasse sind diese jedoch nicht verfügbar. Dies hat einen einfachen Grund und hängt mit der Art und Weise zusammen wie ein Modul von Joomla erzeugt wird. Die helper.php ist nämlich nicht im selben Kontext wie das Modul. Die Helper-Klasse dient nur der Unterstützung und wird normalerweise vom Modul aus aufgerufen und wird von dort mit den Modul-Parametern versorgt.
Die Komponente com_ajax ruft die Helper-Klasse aber direkt auf ohne das die Modul-Einstellungen duch Joomla geladen werden. Somit stehen diese erst mal nicht zur Verfügung. Man kann sagen, dass die helper.php als vom Modul unabhäniger Code geladen wir. Die wird auch klar wenn wir in Frontend unseres Moduls mod_ajax per AJAX und com_ajax den Helper eines Modul mod_ajax2 aufrufen, also die Modulgrenzen überschreiten und ein ganz anders Modul aufrufen.
Wenn ich hier die ganze Zeit von Modul geschrieben habe so hatte ich immer das Modul als Quellcode gemeint also den in Joomla Backend installierten Code. Im Backend von Joomla können aber mehere Module gleichen Typs mit unterschiedlichen Einstellungen aber gleichem Quellcode angelegt werden. Wenn wir also mehere Module vom Typ mod_ajax angelegt haben, wie kommen wir dann im Helper an die richtigen Moduleinstellungen? Dies und mehr zeige ich euch im vierten Teil.
Joomla und AJAX: Teil 1 – Grundlagen
Joomla und AJAX: Teil 2 – Das Modul im Frontend
Joomla und AJAX: Teil 3 – Modul Helper
Joomla und AJAX: Teil 4 – Modul Parameter
Joomla und AJAX: Teil 5 – Weitere Möglichkeiten