11) Feld: SQL
Abweichungen / Änderungen gegenüber älteren Joomla-Versionen (3 / 4 / 5)
- Die Felder basieren jetzt vollständig
auf der Web-Component-UI (WCA / Bootstrap 5-Basis) → Darstellung moderner, aber Funktion identisch. - Die Eigenschaft „Mehrere“
heißt in der Oberfläche teilweise „Mehrfachauswahl“ (engl. multiple). Bedeutung unverändert. - Die Option „Query“
wurde sprachlich klarer bezeichnet → meist „SQL-Abfrage“ im Backend. - Platzhalter #__ bleibt erhalten
(automatisches Tabellen-Prefix), aber direkte DB-Tabellenaufrufe ohne ACL-Filter sind weiterhin möglich → Vorsicht! - Ergebnisse müssen jetzt zwingend value + text liefern —
alte Beschreibungen „erste Spalte = Wert“ sind technisch noch richtig, aber unvollständig. - Leere Auswahl („– auswählen –“)
wird automatisch erzeugt, wenn Feld nicht Pflichtfeld ist (früher teilweise manuell nötig).
Feldtyp: SQL
Das SQL-Feld erstellt eine Auswahlliste, deren Inhalte direkt aus der Datenbank gelesen werden. Du kannst damit z. B.:
- Module auswählen
- Benutzer anzeigen
- Kategorien listen
- eigene Tabellen nutzen
Funktionsprinzip (wichtig zu verstehen)
Die Abfrage muss zwei Spalten liefern:
| Spalte | Bedeutung |
|---|---|
| value | Wird gespeichert |
| text | Wird angezeigt |
also:
value = interne ID
text = sichtbarer Name
Mehrfachauswahl Erlaubt mehrere Werte auszuwählen.
→ Speichert dann JSON-Array statt Einzelwert.
SQL-Abfrage Hier kommt die Datenbankabfrage hinein. Beispiel — installierte Module:
FROM #__modules
ORDER BY title
Sehr wichtige Praxis-Regeln
1. Niemals SELECT *
Das funktioniert nicht zuverlässig.
Falsch: SELECT * FROM #__modules
Richtig: SELECT id AS value, title AS text FROM #__modules
2. Ohne Alias funktioniert das Feld oft leer
Du brauchst AS value und AS text.
3. ACL wird NICHT automatisch berücksichtigt
Das Feld zeigt ALLES an, was die DB liefert.
Du musst selbst filtern: Beispiel — nur veröffentlichte Module:
SELECT id AS value, title AS text
FROM #__modules
WHERE published = 1
ORDER BY title
4. Kategorien anzeigen (sehr häufig)
SELECT id AS value, title AS text
FROM #__categories
WHERE extension = 'com_content'
AND published = 1
ORDER BY title
5. Benutzerliste
SELECT id AS value, name AS text
FROM #__users
WHERE block = 0
ORDER BY name
- Einzelwahl → Zahl (z. B. 17)
- Mehrfachwahl → JSON ([3,8,12])
Darum funktionieren manche Layout-Overrides nicht mehr wie in alten Tutorials.