Die Überlegung ist, dass ich mehrere Städte habe, in diesen Städten Veranstaltungslokale sind und Künstler dort auftreten. Meine Website soll über die Künstler berichten, weshalb die Künstlerbeiträge als Joomla!-Beiträge abgespeichert werden. Sowohl die Stadtauswahl als auch die einzelnen Veranstalter werden lediglich in der Datenbank gespeichert, sollen aber als Auswahllisten in den Künstlerbeiträgen zur Verfügung stehen.
Dazu benötige ich drei Inhaltstypen:
- Eingabe der Städte, die anschließend dynamisch ausgewählt werden.
- Eingabe der Veranstalter, die bei den Events ebenfalls dynamisch ausgewählt werden.
- Das Event.
Alles kommt in die App Veranstaltungen.
Bild 13.1: Drei Inhaltstypen für die Veranstaltungen.
In der Abbildung sehen Sie, dass ich lediglich dem Inhaltstyp Event Ausgaben im Frontend gebe, die beiden anderen Inhaltstypen bekommen nur ein Adminformular.
13.1 Die Städte
Die Städte möchte ich als Auswahlliste bei den Veranstaltern haben. Später will ich eine Suchliste erstellen und mir so alle Veranstaltungslokale in einer Stadt anzeigen lassen. Dazu erstelle ich zuerst eine neue Tabelle in meiner Datenbank. Dabei gehe ich so vor, wie in Kapitel 4.8 »Eigene Tabelle erstellen« beschrieben. Neben der ID lege ich eine Spalte mit dem Namen stadt an und nenne die Tabelle #__veranstaltungen.
Nun wird ein neuer Inhaltstyp angelegt, der App Veranstaltungen zugeordnet und ein Feld von Typ Text im Admin Formular angelegt. Im Speicherbereich wähle ich zunächst Standard aus und dann Frei, damit ich meine gerade angelegte Datenbanktabelle und die Tabellenspalte stadt auswählen kann.
Bild 13.2: Speicherung des Textfeldes.
Das war es bereits, um die Städte einzugeben. Wenn Sie nun in die Beiträge gehen und dieses Formular aufrufen, sehen Sie ein unscheinbares Eingabefeld. Völlig unspektakulär. Dadurch, dass wir aber in einer eigenen Tabelle speichern, erscheinen die einzelnen Städte nicht in der Beitragsübersicht.
13.2 Veranstalter
Für die Veranstalter lege ich wieder eine neue Datenbanktabelle an, diesmal aber neben der ID mit drei weiteren Spalten:
- id
- stadt
- veranstaltungsname
- anschrift
Bild 13.8: Die Datenbanktabelle mit einigen Einträgen.
Die drei weiteren Spalten sind alle als Text angelegt. Genannt habe ich die Tabelle #__veranstalter.
Im Admin Formular erstelle ich nun drei neue Felder. Name und Anschrift sind einfache Textfelder, wobei Sie die Anschrift auch als Textarea anlegen können. Alle drei Felder speichern Sie als Standard und Frei in die neu angelegte Tabelle.
Die Stadt lege ich vom Typ: Dynamisch an. Damit kann ich auf die Datenbanktabelle mit den Städten zugreifen und diese als Auswahlliste anzeigen.
Lassen Sie die Query auf Konstruktion stehen und tragen Sie in Table: #__veranstaltungen ein – genau so, wie ich es hier geschrieben habe, also mit #__ (dem doppelten Unterstrich). In Optionsname kommt der Spaltenname, dessen Inhalte Sie angezeigt bekommen möchten, und in Optionswert, welcher Inhalt abgespeichert werden soll. In unserem Fall ist das sehr einfach, weil wir nur eine Tabellenspalte haben, die wir gebrauchen können: die Spalte mit den Städten.
Gemacht ist das so, weil es ja gut sein könnte, dass Sie neben dem Stadtnamen auch noch die PLZ haben. Dann können Sie die Stadt beispielsweise per Auswahlliste anzeigen, die zugehörige PLZ aber beim Veranstalter speichern. Näheres zu diesem Feldtyp erhalten Sie im Kapitel 8 »Alle Felder«. In unserem Fall kommt also in beiden Feldern stadt hinein.
Alternativ können Sie auch bei Query auf Frei umschalten und die SQL-Syntax direkt
eingeben:
001 |
SELECT stadt FROM fj51l_veranstaltungen |
Dann müssen Sie aber das Präfix Ihrer Datenbanktabellen mit angeben. In der Konstruktion brauchen Sie das nicht.
Wenn Sie nun in der Beitragsübersicht einen neuen Veranstalter eingeben wollen, erhalten Sie eine dynamische Auswahlliste der bisher eingetragenen Städte.
Bild 13.4: Dynamische Auswahllisten
Auch diese Einträge werden nicht als Joomla!-Beiträge gespeichert, weil wir sie in einer eigenen Datenbanktabelle abgespeichert haben.
13.3 Das Event
Das eigentliche Event wird nun endlich unser Beitrag, den wir entsprechend ausgeben können. In diesem kleinen Beispiel mache ich es mir einfach und lege lediglich den Künstler und das Auftrittsdatum an. Den Veranstaltungsort hole ich mir wieder als dynamisches Feld, allerdings diesmal von der Datenbanktabelle #__veranstalter. Der Optionsname ist der veranstaltername, und diesmal speichere ich die id ab, die ich im Optionenwert eintrage.
Bild 13.5: Die id wird abgespeichert.
Das mache ich deswegen, weil ich in der Ausgabe nicht nur auf den Veranstalternamen, sondern auch auf die anderen Spalten zugreifen möchte.
Veranstaltungsort und Datum speichere ich jeweils benutzerdefiniert im introtext des Artikels. Den Künstlernamen speichere ich als Standard im Artikel und in der Spalte title ab. Damit kann ich meine einzelnen Events optimal in der Beitragsübersicht wiederfinden. Das Intro und den Inhalt gestalten Sie nach eigenem Gusto.
Rufen Sie nun einen Beitrag im Frontend auf, dann erhalten Sie zwar die ID des Veranstaltungsorts, aber mehr leider nicht. Um Stadt, Anschrift und Name des Veranstaltungsorts anzuzeigen, benötigen wir ein Plug-in, das leider nicht standardmäßig bei SEBLOD dabei ist. Aber unter der Product-Site[1] auf SEBLOD gibt es das Plug-in SD Databaser zum kostenlosen Download.
Mit dem SD Databaser können Sie Ausgaben von Datenbanktabellenzellen machen, auf die Ihr Beitrag zwar verweist, die aber nicht direkt ausgeben werden können. Also genau das, was wir vorliegen haben: Wir haben eine ID gespeichert, die auf einen Datensatz verweist, den wir aber nicht direkt anzeigen können.
Das Plug-in installieren Sie so, wie in Joomla! üblich – also über Erweiterungen/Erweiterungen/Paketinstallation. Eventuell müssen Sie das Plug-in in der Plug-inÜbersicht von Joomla! noch aktivieren. Wechseln Sie nun zu Ihrem Formular & Inhaltstyp und rufen Sie den Inhalt Ihres Eventformulars auf (wahlweise das Intro). Klicken Sie hier die Nummer 3 an. Damit wechseln Sie in die Typografie. Bei dem Feld für den Veranstaltungsort wählen Sie in der Spalte Typografie ganz unten SD Databaser aus. Sie erhalten nun ein kleines Pluszeichen, das Sie bitte anklicken.
Bild 13.6: Auswahl des SD Databaser
Das Plug-in ist eines der wenigen Plug-ins auf SEBLOD, das wirklich sehr gut dokumentiert ist. Das Video beim Download dieses Plug-ins zeigt einige Möglichkeiten auf. Bei mir sieht leider das Plug-in nicht so hübsch aus wie auf dem Video, erfüllt aber dennoch seinen Zweck.
Wir benötigen den Veranstalternamen, die Stadt des Veranstaltungsorts und die Anschrift. Somit müssen wir zuerst eine SQL-Anweisung formulieren und in das Feld SQL Query eingeben. In unserem Fall lautet sie wie folgt:
001 |
select veranstaltername, stadt, anschrift from #__veranstalter where id=*value* |
Sie können hier mit #__ arbeiten. Die Datenbanktabelle hatten wir zuvor selber angelegt. Übergeben müssen wir die ID, die wir gespeichert haben. Das tun wir mit der Variablen value, die in Sternchen eingefasst werden muss. Wenn Sie das speichern und ins Frontend zurückkehren, werden Sie leider immer noch unsere abgespeicherte ID sehen. Aber in Column(s) AS Value tragen wir nun endlich ein, welches oder welche Felder ausgegeben werden sollen, in unserem Fall also die drei Felder, die auch in der SQL-Abfrage bereits genannt sind. Allerdings müssen wir die drei Felder mit zwei senkrechten Strichen trennen (||). Sie kommen an die senkrechten Striche, indem Sie auf der Windows-Tastatur [AltGr]+[<] drücken. Der korrekte Eintrag lautet:
001 |
veranstaltername||stadt||anschrift |
Damit die einzelnen Daten untereinanderstehen, tragen Sie in Column(s) Seperator einen HTML-Zeilenumbruch ein:
001 |
<br/> |
Multiple Row Seperator benötigen Sie, wenn Sie mehrere Datensätze ausgeben und die einzelnen Datensätze optisch voneinander trennen möchten. Beispielsweise könnten Sie unsere Veranstalterdaten auch mit einem Komma trennen, indem Sie als Column(s) Seperator ein Komma mit einem nachfolgenden Leerzeichen eintragen und in Multiple Row Seperator den HTML-Zeilenumbruch. Zum Testen ändern Sie die SQLAbfrage am Ende auf id >= 1:
001 |
select veranstaltername, stadt, anschrift from #__veranstalter where id>=1 |
Vorausgesetzt, Sie haben mindestens zwei Veranstalter eingetragen, werden diese auch entsprechend ausgegeben.
Fazit: Ein kleines Beispiel, wie Sie mit mehreren Tabellen Ihre Daten sauber trennen und am Ende wieder zusammenfügen können. Einziger Nachteil bei dieser Methode: Sie müssen sich ein wenig mit SQL vertraut machen. SQL selber ist aber einfach zu erlernen, und für unsere Belange reicht Ihnen das Grundwissen, um alles Benötigte umsetzen zu können.
[1] http://www.seblod.com/products/2239