Inhaltsverzeichnis
Zurück: edwiki
structbox – DokuWiki-Plugin
Füllt eine Vorlagenseite mit den Struct-Daten der angezeigten Seite – z. B. als Infobox in der rechten Spalte. Die Gestaltung ist normale Wiki-Syntax in der Vorlage; das Plugin bringt kein eigenes Layout mit.
Benutzung
1. Vorlage anlegen – Seite im Vorlagen-Namensraum (Standard vorlagen), z. B. vorlagen:schiffe:
^ $$name$$ ^^ | Hersteller | $$manufacturer$$ | | Höchstgeschwindigkeit | $$top_speed$$ | | Landeplatz | $$landing_pad$$ | | Quelle | Frontier |
2. In die Seite einbinden – z. B. in der 1/3-Spalte deines WRAP-Layouts:
<WRAP group>
<WRAP twothirds column>
Artikeltext …
</WRAP>
<WRAP third column>
{{schiffe:python.png?200}}
{{structbox>schiffe}}
</WRAP>
</WRAP>
Daten einer anderen Seite (''%%@seite%%'')
Hinter @ steht die Seite, deren Daten die Box zeigen soll – geschrieben wie ein Wiki-Link:
| Schreibweise | Daten kommen von |
|---|---|
{{structbox>factions}} | der Seite selbst (wie bisher) |
{{structbox>factions@start}} | start im selben Namensraum |
{{structbox>factions@codex:federal:start}} | genau dieser Seite |
{{structbox>factions@..:start}} | start im übergeordneten Namensraum |
Beispiel: Die Daten der Föderation liegen nur auf codex:federal:start; die Kapitelseiten codex:federal:1_history usw. zeigen mit {{structbox>factions@start}} dieselbe Box. Gepflegt wird nur einmal, das Schema bleibt nur start zugewiesen.
- Alles in der Box bezieht sich auf die angegebene Seite: Platzhalter, ausgeblendete Zeilen/Abschnitte und struct-Abfragen in der Vorlage (
$ID$,$NS$,$PAGE$,$STRUCT.feld$= die angegebene Seite). Ein Abschnitt „Konzerne dieser Fraktion“ erscheint also auch auf den Kapitelseiten. - Platzhalter im Seitentext (außerhalb der Box) zeigen weiterhin die Daten der Seite selbst.
- Leserechte: Darf der Leser die angegebene Seite nicht lesen, bleibt die Box leer. Ist sie nicht für alle lesbar, wird die Seite nicht gecacht.
- Aktualisierung: Ändern sich Daten oder Text der angegebenen Seite, oder wird sie neu angelegt, zeigt die Box das sofort.
- Sprachseiten:
en:codex:federal:1_historymit@startzeigten:codex:federal:start– und damit (wie immer bei Sprachseiten) die Daten voncodex:federal:start. - Kachelbild (nspages): Eine Box mit
@bestimmt das erste Bild der Seite immer: das Bild der angegebenen Seite, auch wenn im Seitentext andere Bilder stehen. Hat die angegebene Seite kein Bild, hat auch die Seite keins (nspages zeigt sein Standardbild). Bei mehreren@-Boxen zählt die erste. - Gibt es die angegebene Seite nicht oder hat sie keine Daten, bleibt die Box leer (wie eine Seite ohne Daten).
- Ohne
@(oder mit leerem@) verhält sich structbox genau wie 0.4.0.
Platzhalter
| Schreibweise | Bedeutung |
|---|---|
$$feld$$ | Feld aus einem der Schemas, die der Seite zugewiesen sind |
$$schema.feld$$ | Feld aus genau diesem Schema (falls eine Seite mehrere Schemas hat) |
- Werte werden von struct selbst dargestellt: Seiten-Felder als Link, Bilder als Bild, Prefix/Postfix (z. B. „m/s“) inklusive, alles sicher escaped.
- Feldnamen müssen mit einem Buchstaben beginnen –
$$100$$bleibt normaler Text. - Platzhalter funktionieren auch direkt im Seitentext (ohne Vorlage).
Abschnitte, die sich selbst ausblenden
Teile der Vorlage, die nur manchmal Inhalt haben (z. B. Produktlisten), kommen in einen Abschnitt:
<structbox-section> **Schiffe** ---- struct list ---- schema: ships cols: %title% filter: manufacturer = $ID$ ---- </structbox-section>
- Der Abschnitt verschwindet samt Überschrift, wenn alle Platzhalter und struct-Listen/-Tabellen darin leer sind.
- Ein Abschnitt ohne Platzhalter und ohne Liste wird immer angezeigt.
- Abschnitte dürfen verschachtelt werden; jeder Abschnitt wird als
<div class="structbox__section">ausgegeben. - So kann eine Vorlage pro Seitentyp alle möglichen Verknüpfungen enthalten (Schiffe, Waffen, Galnet …) – jede Seite zeigt nur, was es für sie gibt.
Verhalten
- Leere Felder: Tabellenzeilen, deren Platzhalter alle leer sind, werden ausgeblendet. Zeilen ohne Platzhalter (z. B. „Quelle“) bleiben.
- Zwischenüberschriften (Zeilen nur aus
^-Zellen ohne Platzhalter, z. B.^ Verteidigung ^^) verschwinden, wenn alle Zeilen darunter bis zur nächsten Zwischenüberschrift ausgeblendet wurden. Bleibt von einer Tabelle nichts übrig, verschwindet sie ganz. - Vorlage ändern: Seiten, die die Vorlage nutzen, werden automatisch neu gerendert.
- Daten anderer Seiten: Struct-Abfragen in der Vorlage (z. B. „alle Schiffe dieses Herstellers“) und verlinkte Titel aktualisieren sich, sobald sich irgendwo struct-Daten ändern.
- Struct-eigene Tabelle: Auf Seiten mit Struct-Box wird struct's automatische Datentabelle ausgeblendet; auf allen anderen Seiten bleibt sie.
- Vorlagenseite selbst zeigt die Feldnamen statt Werten.
- Alte Revisionen zeigen die Daten von damals.
- Fehler (Vorlage fehlt, liegt außerhalb des Namensraums, verschachtelt) erscheinen als Hinweis statt der Box.
- Sicherheit: Nur Seiten im Vorlagen-Namensraum können eingebunden werden – so lassen sich keine geschützten Seiten über die Box auslesen.
Bilder in Übersichten (nspages & Co.)
Bilder aus struct-Medienfeldern (z. B. $$bild$$) werden in die Seiten-Metadaten eingetragen – genauso, als stünde {{bild.png}} im Seitentext:
- Erstes Bild der Seite (
relation firstimage): Übersichten wie<nspages schiffe -pictures>zeigen das Box-Bild als Kachel. - Medienverwendung: Der Medienmanager führt die Seite unter „Verwendung“ des Bildes.
Regeln:
- Es zählt die Reihenfolge: Das erste ausgefüllte Medienfeld der Vorlage wird zum ersten Bild. Steht im Seitentext vor der Box schon ein Bild, bleibt dieses das erste Bild.
- Feste Bilder in der Vorlage selbst (z. B. ein Logo) zählen nicht – nur Bilder aus struct-Daten.
- Gilt für Boxen und für Platzhalter direkt im Seitentext.
- Die Metadaten werden automatisch erneuert, wenn sich Seite, Vorlage, struct-Daten oder das Plugin selbst ändern.
Mehrsprachigkeit (Translation-Plugin)
Mit dem translation-Plugin liegt die Hauptsprache ohne Präfix, Übersetzungen in Sprach-Namensräumen:
| Sprache | Seite | struct-Daten |
|---|---|---|
| Hauptsprache | hangar:ships:adder | ja – hier wird gepflegt |
| Englisch | en:hangar:ships:adder | keine nötig |
| Französisch | fr:hangar:ships:adder | keine nötig |
Daten – eine Sprachseite zeigt die Daten der ersten passenden Seite in dieser Reihenfolge:
- die Seite in der Hauptsprache (
hangar:ships:adder) - die Seite in den Ersatzsprachen (Einstellung
fallback, Standarden) - ihre eigenen Daten
„Passend“ heißt: Die Seite existiert, hat mindestens einen ausgefüllten Wert und der Leser darf sie lesen.
So pflegst du alles nur einmal. Artikel, die es nur auf Englisch gibt, tragen ihre Daten auf der en:-Seite; alle anderen Sprachen zeigen dann diese.
Bekommt so ein Artikel später eine Seite in der Hauptsprache, übernimmt sie erst, sobald dort etwas eingetragen ist.
Vorlagen – {{structbox>schiffe}} sucht in dieser Reihenfolge:
- Vorlage in der Sprache der Seite (
fr:vorlagen:schiffe) - Vorlage in den Ersatzsprachen (
en:vorlagen:schiffe) - die Vorlage selbst (
vorlagen:schiffe)
Es genügt also eine englische Vorlage, damit alle Sprachen englische Beschriftungen haben.
Hinweise:
- Das struct-Schema nur den Bereichen der Hauptsprache zuweisen (z. B.
hangar:**) – unden:…, wenn es Artikel nur auf Englisch gibt (z. B.en:galnet:**). Den übrigen Sprachen kein Schema zuweisen. - Werte selbst werden nicht übersetzt: Auswahllisten-Werte und Seitenlinks (z. B. Hersteller) bleiben wie in der Hauptsprache.
- struct-Abfragen in der Vorlage mit
$ID$beziehen sich auf die angezeigte Seite, nicht auf die Datenseite. - Ist die Seite der Hauptsprache nicht für alle lesbar (ACL), wird die Sprachseite nicht gecacht, damit jeder Leser nur sieht, was er sehen darf. Ins Seiten-Bild (Metadaten) gehen nur öffentlich lesbare Daten ein.
- Ohne Translation-Plugin oder mit
translation= aus verhält sich structbox wie 0.3.0.
Konfiguration
| Option | Standard | Bedeutung |
|---|---|---|
namespace | vorlagen | Namensraum der Vorlagenseiten |
hide_empty | an | Zeilen mit nur leeren Platzhaltern ausblenden |
hide_struct_output | an | struct's eigene Tabelle auf Seiten mit Box ausblenden |
translation | an | Mehrsprachigkeit mit dem Translation-Plugin (siehe oben) |
fallback | en | Ersatzsprachen für Daten und Vorlagen, durch Leerzeichen getrennt |
Hinweise
- Seiten-Felder zeigen den Seitennamen (z. B.
hersteller:faulcon_delacy). Mit der DokuWiki-Optionuseheading(Erste Überschrift als Seitenname) wird daraus „Faulcon DeLacy“. - Struct-Listen in Vorlagen mit benutzer- oder datumsabhängigen Filtern (
$USER$,$TODAY$) werden nicht pro Benutzer/Tag neu berechnet. - Tipp: Den Vorlagen-Namensraum per ACL für normale Leser ausblenden ist möglich – die Box wird trotzdem angezeigt.
Installation
Ordner structbox nach lib/plugins/structbox/ hochladen. Voraussetzung: struct + sqlite; für das Layout das wrap-Plugin; für Mehrsprachigkeit (optional) das translation-Plugin.
Versionen
- 0.5.0 – Daten einer anderen Seite:
{{structbox>vorlage@seite}}(relativ wie ein Wiki-Link oder absolut); Leserechte der Seite werden geprüft; struct-Abfragen in der Vorlage beziehen sich auf diese Seite; Kachelbild immer von dieser Seite; Seiten werden neu gerendert, wenn die angegebene Seite entsteht oder sich ändert - 0.4.0 – Mehrsprachigkeit mit dem Translation-Plugin: Sprachseiten zeigen die Daten der Seite in der Hauptsprache (sonst Ersatzsprache, sonst eigene), Vorlagen pro Sprache mit Rückfall auf Englisch und Hauptsprache; Bilder der Sprachseiten in den Metadaten; Seiten werden neu gerendert, wenn Gegenstück oder Sprachvorlage entstehen
- 0.3.0 – Bilder aus struct-Medienfeldern landen in den Seiten-Metadaten (erstes Bild für nspages
-pictures, Medienverwendung); Metadaten hängen an Vorlage, struct-Daten und Plugin-Version - 0.2.0 – selbst ausblendende Abschnitte (
<structbox-section>), leere Zwischenüberschriften und leere Tabellen werden ausgeblendet - 0.1.1 – Seiten mit Box hängen an der struct-Datenbank (Abfragen in Vorlagen bleiben aktuell)
- 0.1.0 – erste Version
Getestet
DokuWiki 2026-07-14c „Mort“, PHP 8.3, struct (Stand 2026-09-22), wrap: Box in 1/3-Spalte, leere Zeilen, Abschnitte (Firma mit Schiffen / nur Waffen / ohne Produkte), Zwischenüberschriften, Escaping, Seiten-Link, Postfix, Vorlage ändern, alte Revision, Fehlermeldungen, Namensraum-Schutz.
0.3.0 zusätzlich mit nspages (-pictures): Box-Bild als Kachel, leeres Bildfeld (Standardbild), Bild im Seitentext vor der Box, Platzhalter im Seitentext, Vorlagenseite selbst, Vorlage ändern, Update von 0.2.0 ohne Neuspeichern.
0.4.0 zusätzlich mit translation (Stand 2025-05-20), Sprachen en en-us es fr pt-br ru: Daten von der Hauptsprache auf en/fr/en-us, nur-englischer Artikel (fr folgt en), leere Hauptsprachen-Seite (übernimmt erst mit Daten), gesperrte Hauptsprachen-Seite (anonym/Leser/Admin, kein Cache), Daten ändern, Gegenstück neu anlegen, FR-Vorlage neu anlegen, EN-Vorlage als Rückfall, alte Revision, Platzhalter im Seitentext, nspages-Kacheln in en:, Metadaten auf der Kommandozeile wie bei bin/indexer.php (ohne ACL-System), Ausgabe ohne Mehrsprachigkeit identisch mit 0.3.0.
0.5.0 zusätzlich (DokuWiki 2026-07-14c, struct und translation aktueller Stand, nspages): @start, absolute Angabe, @ auf Sprachseite (Daten der Hauptsprache), gesperrte Quellseite (anonym/Leser leer, Admin sieht Daten, kein Cache), nicht vorhandene Quellseite (leer, erscheint nach Anlegen), Quellseite ohne Daten, leeres @, Daten der Quellseite ändern (Box und Kachelbild ziehen nach), struct-Liste mit $ID$ in der Vorlage, Platzhalter im Seitentext neben einer @-Box, Kachelbild bei eigenem Bild im Text (Quellbild gewinnt) und bei Quelle ohne Bild (kein Bild), nspages-Übersicht, alte Revision; Seiten ohne @ liefern HTML und Metadaten identisch zu 0.4.0; keine PHP-Warnungen.
Lizenz: GPL 2
