Joomla Logo

Joomla und AJAX: Teil 4 – Modul Parameter

In diesem Teil geht es um die Modul Parameter für unser Joomla Modul mod_ajax. Be vor wir loslegen müssen wir uns klar werden wie die Modulparameter und der Quellcode der Joomla Module zusammen hängen.

Wird ein Modul im Backend installiert, so wird erst einmal nur der Quellcode und die Sprachdateien in die richtigen Ordner kopiert. Zur Erinnerung, bereits jetzt könnten wir den Helper über die Komponente com_ajax ansprechen. Wenn wir nun im Joomla Backend ein neues Modul anlegen, so erzeugt Joomla für jedes so angelete Modul ein Datensatz in der Datenbank mit den Einstellungen und dem Modul Titel. Welche Einstellungen möglich sind hängt von den Angaben in der Modul XML-Datei ab. Diese Einstellungen sind die Modul Parameter die wir abfragen wollen.

Wichtig für uns:

  1. Der Quellcode existiert immer nur ein einziges mal
  2. Es können mehrere Module gleichen Typs mit Titel und zugehörigen Modul Parameter existieren
  3. Module können Default Modul Parameter haben

Um die Modul Parameter zu erhalten gibt es die Joomla Funktion JModuleHelper::getModule(string $name, string $title = null). Abhänig von den Parametern die wir der Funktion übergeben geht Joomla bei der Abfrage der Modul Parameter wie folgt vor:

  1. Gibt es ein Datenbankeintrag der zum Modul Typ und Titel passt?
  2. Gibt es ein Modul auf das der Typ passt? Es wird dann das erste genommen.
  3. Wird keines gefunden, wird ein Dummy Ergebniss zurückgegeben.

in der Joomla Dokumentation zu JModuleHelper/getModule findet ihr weitere Details hierzu.

Um also die gewünschten Modul Parameter zu erhalten brauchen wir neben dem Modul Typ, den wir ja wissen, auch den Titel des Moduls. Problematisch ist nur wenn es mehere Module gleichenTyps und Titel gibt. Dann bekommen wir eventuell nicht die richtigen Werte.

Woher weis der der Helper den Titel des Moduls?

Unser Modul mod_ajax müssen wir nun etwas umbauen so das der Titel des Moduls mit dem AJAX Request übertragen wird und im Modul Helper abrufbar ist. Im Modul kann man den Titel ganz einfach mit dem folgenden Code ausgeben.

<?php
  echo $module->title;
?>

Wir müssen nun dafür sorgen, dass der Titel auch unser JavaScript erreicht. Dazu müssen wir den JavaScript Code wie folgt abändern:

function mod_ajax_send(){
	// AJAX-Parameter als JavaScript Objekt
	var	ajax_params = {
		'option' : 'com_ajax',
		'module' : 'ajax',
		'format' : 'json',
		'formvalue': jQuery('.mod_ajax_form input[name=formvalue]').val(),
		'modultitle': jQuery('.mod_ajax_form input[name=modultitle]').val()
	};

	// AJAX Verarbeitung
	jQuery.ajax({
		type   : 'POST',
		data   : ajax_params,
		context: this,
		success: function (response) {
			// AJAX Aufruf erfolgreich
			if(response.success){
				// Verarbeitung von com_ajax erfolgreich
				jQuery('.mod_ajax_result').html(response.data);
			}
			else
			{
				// Fehler in der Verarbeitung von com_ajax
				jQuery('.mod_ajax_result').html('Fehler');
			}
		},
		error :function () {
			// AJAX Aufruf fehlgeschlagen
			jQuery('.mod_ajax_result').html('AJAX Fehler');
		}
	});
}

(function ($) {
	$(document).ready(function(){
		// Klick-Ereigniss auf den Button abfangen und Funktion
		// mod_ajax_send()aufrufen
		$(document).on('click', '.mod_ajax_submit', function () {
			mod_ajax_send();
			return false;
		});
	});
})(jQuery);

Im Modultemplate fügen wir nun noch ein vertecktes Feld ein dem wir den Modul Titel als Wert geben.

<div class="mod_ajax">
	<form class="mod_ajax_form">
		<input type="hidden" name="modultitle" value="<?php echo $module->title; ?>"/>
		<input type="text" name="formvalue" style="width: 80%;"/>
		<br />
		<input type="button" class="mod_ajax_submit" value="Absenden" />
	</form>
	<div class="mod_ajax_result"></div>
</div>

Das waren auch schon die Änderungen im Forntend.

Modulparameter im Helper abfragen

Damit wir in unserem Modul auch Parameter abfragen können, müssen wir in die Modul Koniguration natürlich noch ein Feld einfügen und dann auch im Joomla Backend mit einem Wert versehen. Dieses Feld soll den Namen ‚resulttext‘ haben. An dieser Stelle setze ich voraus, dass ihr wisst wie das geht. Zur veranschaulichung ändern wir auch etwas die Funktion des Moduls. Es soll nun im Backend ein Text mit Platzhalter eingegeben werden. Als Platzhalter dient ein $ Zeichen. Das Modul ersetz nun das $ Zeichen im Text durch den übermittelten Wert. Der Code sieht dann so aus:

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');

		//Modul Titel
		$modultitle=$input->get('modultitle);

		// Modul Laden
		jimport('joomla.application.module.helper');
		$module = JModuleHelper::getModule('gu_tarifrechner', $modultitel);

		// Modul Parameter
		$params = new JRegistry();
		$params ->loadString($module->params);

		// Verarbeitung des Übermittelten Wert
		$text = $params->get('resulttext','Der übermittelte Wert "$"');
		$result = str_replace('$',strtoupper($formvalue),$text);

		// Ergebniss zurück an com_ajax
		return $result;
	}
}

Nun haben wir die Modulparameter in der Variaben $params und können mit $params->get(‚PARAMETERNAME'[,’DEFAULTWERT‘]) auf die einzelnen Werte zugreifen. In $module sind Eigenschaften wie z.B. der Modul Titel, Position usw. gespeichert.

Bitte beachtet das im Beispiel Code keine Prüfung auf gültige Formularwerte oder Modulparameter vorhanden ist. Dies müsst ihr vor einem realen Einsatz des Moduls unbedingt noch hinzufügen.

Wie gehts weiter

Im nächten Teil schauen wir uns an, wie unser Modul auf verschiedene AJAX Requests reagieren kann.

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

Schreibe einen Kommentar