AddOn-Entwicklung #4 - Frontend-Ausgabe

Die Ausgabe im Frontend erfolgt gewöhnlich mit einer normalen SQL-Abfrage.

Den Ausgabecode könnten wir direkt in ein Modul eintragen und dieses auf der gewünschten Seite platzieren. Im Workshop entscheiden wir uns aber dafür, den Code in einer Datei innerhalb unseres AddOn-Verzeichnisses zu deponieren.

Dafür legen wir dort ein Verzeichnis output an und eine Datei mit folgendem PHP-Code (die Abfrage-Erweiterung $add_query spielt erst weiter unten eine Rolle):

<?php
$sql = new rex_sql();
$sql_query = 'SELECT * FROM FROM '.$REX['TABLE_PREFIX'].'553_adressen as adressen, '.$REX['TABLE_PREFIX'].'553_gruppen as gruppen WHERE r_gruppe = gruppen.id '.$add_query.' ORDER BY name, vorname';
$sql->setQuery($sql_query);
echo '<ul>';
for ($i=0; $i<$sql->getRows(); $i++) {
echo '<li>'.$sql->getValue('vorname').' '.$sql->getValue('name').'<br />
'.$sql->getValue('strasse').'<br />
'.$sql->getValue('plz').' '.$sql->getValue('plz').'</li>';
$sql->next();
}
echo '</ul>';
?>

Als nächstes inkludieren wir diese Datei z.B. in einem Modul und setzen es auf die dafür vorgesehene Adresslisten-Seite.

<?php
include($REX["INCLUDE_PATH"].'/addons/adressen/output/adressen.inc.php');
?>

AddOn in sieben Schritten

Voila! Die Adressen werden als Liste ausgegeben.

Als letzte Verbesserung wollen wir nun noch Links anbieten, um die Adressliste auf eine bestimmte Gruppe zu beschränken. Es sollen alle Gruppen der Gruppen-Tabelle ausgelesen und mit einem Link versehen werden. Nach der Wahl der Gruppe soll die Seite neu geladen und nur noch die selektierten Adressen angezeigt werden. Dazu fügen wir zu Beginn unserer Datei eine weitere SQL-Abfrage ein, die uns die Gruppen ausliest. Um einen Link zusammenbauen, nutzen wir die Funktion rex_getUrl(). Die benötigten Parameter sind die Seiten-ID, die Sprache und ggf. ein Array der Get-Variablen. In unserem Beispiel übergeben wir die aktuelle Seiten-ID, aktuelle Sprache und in der Get-Variable die ID der jeweiligen Gruppe: rex_getUrl($this->article_id, $this->clang, array('gid'=>$g_sql->getValue('id'))).

Komplett also:

$g_sql = new rex_sql;
$g_query = 'SELECT * FROM '.$REX['TABLE_PREFIX'].'553_gruppen ORDER BY gruppe';
$g_sql->setQuery($g_query);

for ($i=0;$i<$g_sql->getRows();$i++) {
echo '<p><a href="'.rex_getUrl($this->article_id, $this->clang, array('gid'=>$g_sql->getValue('id'))).'">Zeige alle Adressen der Gruppe '.$g_sql->getValue('gruppe').'</a></p>';
$g_sql->next();
}

Als letzte Aufgabe bleibt uns lediglich, die selektierten Adressen auf die gewählte Gruppe zu beschränken. Dazu erweitern wir unseren SQL-Befehl:

$add_query = '';
$gruppen_id = rex_get('gid','int');
if (isset($gruppen_id)) {
$add_query = 'AND gruppen.id = "'.$gruppen_id.'"';
}

Bei nicht gewählter Gruppe soll unsere weiter oben im Select-Kommando bereits angelegte $add_query leer sein, also keine weitere Filterung erfolgen. Wenn per URL eine Gruppe gewählt ist, wird – nach dem Säubern der GET-Variable – die Adress-Ausgabe auf die gewählte Gruppe beschränkt.

Weiter zum Teil 5 - Extension Points

Zurück zum Teil 3 - rex_list und rex_form