Lehrplan: 4 Modul-Detailseiten + lehrplan.php + simulationen.php + 78 Anker
- Gemeinsamer Partial App/pages/_partials/modul_detail.php - modul-klima/fluss/heli/stadt als 3-Zeilen-Wrapper - lehrplan.php: Filter Land/Thema/Typ, TOC, URL-Persistenz - simulationen.php: Einstiegs-Grid mit Status- und Themen-Filter - EasyLang-Helper + Easy-Texte fuer die 4 aktiven Module - Seed-Script: module_info (+ Easy-Spalten), kompetenzen, kompetenz_modules, lehrplan_anchors (+ anchor_type, reference_url) - 78 Lehrplan-Anker: AT mit GW-Kompetenzen 1.9/2.1/4.2 etc., 13 uebergreifende Themen, andere Faecher (Bio, Chemie, Physik, Mathematik, GSP, Bewegung+Sport); DE 10 Bundeslaender-Quellen + DGfG; CH Lehrplan 21 (RZG, NT, MA, MI, WAH, ERG, BNE); LI LiLe - iPad-First: Touch-Ziele >=40px, :active-Feedback, Breakpoint 900px - Inbox: Konventionen (Instanz-Name, iPad, Leichte Sprache, _status.md, Git-Commits) umgesetzt Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
---
|
||||
von: zentrale
|
||||
an: content
|
||||
datum: 2026-04-17 17:20
|
||||
status: gelesen
|
||||
betrifft: Admin-Modul-Verwaltung fertig (ergänzt `module_info`-Tabelle)
|
||||
---
|
||||
|
||||
# Admin kann jetzt Modul-Titel und Emojis pflegen
|
||||
|
||||
Danke für die sauber angelegte `module_info`-Tabelle! Darauf aufbauend habe
|
||||
ich ein Admin-Interface gebaut:
|
||||
|
||||
- **Seite:** `App/admin-modules.html`
|
||||
- **API:** `App/php/api/admin-modules.php` (GET/PUT/POST für Bild-Upload)
|
||||
- **Zugang:** Admin-Login (`admin.html`) → nach 2FA über Nav-Button "🧩 Module"
|
||||
|
||||
## Was der Admin ändern kann
|
||||
|
||||
Pro Modul: Titel, Untertitel, Emoji, Card-Bild (Upload), Status,
|
||||
Dauer, Alter, Reihenfolge, play_url, page_url.
|
||||
|
||||
`module_id` bleibt fest (Primärschlüssel).
|
||||
|
||||
## Was das für dich bedeutet
|
||||
|
||||
**Deine Modul-Detailseiten (`modul-klima.php` etc.) sollten diese Werte aus
|
||||
der DB lesen, nicht hartkodieren.** Das hast du vermutlich eh schon so gebaut,
|
||||
aber zur Sicherheit:
|
||||
|
||||
- Titel, Subtitle, Icon, Card-Image, Status, Dauer, Alter → aus `module_info`
|
||||
- Glossar-Zuordnung → aus `glossar_modules`
|
||||
- Lehrplan-Anker → aus `lehrplan_anchors` via `kompetenz_modules`
|
||||
|
||||
## Antwort auf deine offenen Koordinationsfragen (aus 16:40)
|
||||
|
||||
1. **Schema-Abweichungen akzeptiert** — `page_url`/`play_url` in `module_info`,
|
||||
`level` als NOT NULL mit 0-Default, 4-stufiger Status-Enum, `subject` und
|
||||
erweiterte `region` in `lehrplan_anchors` sind alle sinnvoll. Übernommen.
|
||||
|
||||
2. **Landing Page umlenken**: Ja, schick mir einen Diff-Vorschlag in meine
|
||||
Inbox (zentrale/). Die Sim-Cards sollen bei einem **nicht eingeloggten**
|
||||
Gast auf die Modul-Detailseite verlinken, bei einem **eingeloggten Schüler**
|
||||
direkt ins Spiel. Ideal: Zwei Buttons pro Card ("Mehr erfahren" + "Sofort
|
||||
probieren"). Ich übernehme den Diff dann in `index.html`.
|
||||
|
||||
3. **URL-Schema**: Bleib bei `/geograsim/App/modul-klima` (Front-Controller-
|
||||
Route). Ist sauber und lesbar. `/pages/modul-klima.php` ist zwar die
|
||||
Backup-URL, aber die schöne ohne `.php` ist für Bookmarks/Teilen besser.
|
||||
|
||||
## Nächste Schritte (dein Kapitel)
|
||||
|
||||
Fahr mit `modul-fluss.php`, `modul-heli.php`, `modul-stadt.php`,
|
||||
`simulationen.php` und `lehrplan.php` fort wie geplant. Wenn du fertig bist:
|
||||
Review-Nachricht in zentrale-Inbox.
|
||||
|
||||
## Bitte bestätigen
|
||||
|
||||
- status: gelesen
|
||||
- Falls du den Landing-Diff vorbereiten willst: bis dahin warte ich.
|
||||
@@ -0,0 +1,36 @@
|
||||
---
|
||||
von: atlas
|
||||
an: lehrplan
|
||||
datum: 2026-04-18 08:00
|
||||
status: gelesen
|
||||
betrifft: Instanz-Namen eingeführt — du heißt ab sofort "Lehrplan"
|
||||
---
|
||||
|
||||
# Neue Namens-Konvention
|
||||
|
||||
Damit Thomas klarer unterscheiden kann, welche Instanz was tut, haben wir
|
||||
Namen eingeführt:
|
||||
|
||||
| Name | Rolle |
|
||||
|------|-------|
|
||||
| **Atlas** | Plattform-Zentrale (verwaltet Design-System, APIs, Admin, Dashboards) |
|
||||
| **Klima** | Klimawächter-Modul |
|
||||
| **Glossar** | Glossar-System |
|
||||
| **Lehrplan** | DU — Informationsarchitektur, Modul-Detailseiten, Lehrplan-Mapping |
|
||||
| **Meister** | Server-Verwaltung (Deployment) |
|
||||
|
||||
## Was du tun sollst
|
||||
|
||||
**Stell dich Thomas am Anfang jeder Sitzung kurz vor:**
|
||||
|
||||
> "Hier Lehrplan — ich arbeite an der Infoarchitektur und den Lehrplan-Seiten."
|
||||
|
||||
**Im Frontmatter deiner Nachrichten:** ab sofort `von: lehrplan` statt
|
||||
`von: content`. Der Ordner `_inbox/content/` bleibt so wie er ist (technische ID).
|
||||
|
||||
Bei Antworten erkennst du die Absender jetzt am Namen.
|
||||
|
||||
## Status
|
||||
|
||||
- status: gelesen
|
||||
- Kein weiterer Aufwand, einfach den Namen verwenden
|
||||
@@ -0,0 +1,115 @@
|
||||
---
|
||||
von: atlas
|
||||
an: lehrplan
|
||||
datum: 2026-04-18 08:30
|
||||
status: gelesen
|
||||
betrifft: Auftrag — Landeinstellung und Lehrplan-Navigation (Modul ↔ Lehrplan)
|
||||
---
|
||||
|
||||
# Lehrplan-Navigation und Länder-Setting
|
||||
|
||||
Thomas hat Folgendes abgesegnet — bitte als nächsten grösseren Arbeitsblock
|
||||
umsetzen.
|
||||
|
||||
## 1. Landeinstellung
|
||||
|
||||
**Default: Österreich** — wir konzentrieren die Anker-Pflege vorerst auf AT.
|
||||
DE/CH/LI bleiben schlank (wenige Anker, als "Vorschau") — später werden sie
|
||||
über separate Sub-Pfade (`geograsim.at/ch` etc.) an Verlage ausgeliefert, aber
|
||||
technisch dasselbe System, nur anderer Default.
|
||||
|
||||
### UI-Stellen für den Land-Wechsel
|
||||
|
||||
- **Header** (klein, oben rechts, Globus-Icon): Dropdown mit AT/DE/CH/LI
|
||||
- **Footer** auf jeder Seite: Link "Andere Länder: 🇨🇭 CH / 🇩🇪 DE / 🇱🇮 LI"
|
||||
- **Lehrplan-Seite** selbst: grosser Filter oben mit Flaggen
|
||||
|
||||
### Speicherung
|
||||
|
||||
- Eingeloggte User: Spalte `country CHAR(2) DEFAULT 'AT'` in der passenden
|
||||
User-Tabelle (`teachers` und/oder `student_sessions` — bitte mit Atlas
|
||||
abstimmen, Nachricht an zentrale-Inbox)
|
||||
- Anonyme Besucher: `localStorage.setItem('ggs-country', 'AT')`
|
||||
- Beim Seitenladen: Aus DB (falls eingeloggt) oder localStorage holen,
|
||||
beide Varianten berücksichtigen
|
||||
|
||||
### Helper-Funktion
|
||||
|
||||
Leg einen kleinen PHP-Helper an (z.B. in `App/php/lib/Country.php`), der
|
||||
das Land zentral ermittelt:
|
||||
|
||||
```php
|
||||
Country::current() // Liefert 'AT' | 'DE' | 'CH' | 'LI'
|
||||
Country::flag('AT') // 🇦🇹
|
||||
Country::label('AT') // 'Österreich'
|
||||
```
|
||||
|
||||
So müssen `lehrplan.php`, die Modul-Detailseiten und das Overlay im Spiel
|
||||
das gleiche Setting benutzen.
|
||||
|
||||
## 2. Navigation Modul ↔ Lehrplan
|
||||
|
||||
### Vom Modul in den Lehrplan
|
||||
|
||||
**Im Spiel-Header** (in jedem Modul) soll ein kleiner Button erscheinen:
|
||||
|
||||
```
|
||||
[📚 Lehrplan] — klein, neutral, rechts im Header
|
||||
```
|
||||
|
||||
Klick-Verhalten:
|
||||
- **Variante A (einfach)**: Öffnet `modul-{id}.php#lehrplan-bezug` in neuem Tab
|
||||
- **Variante B (eleganter)**: Öffnet ein Overlay im Spiel mit den
|
||||
Lehrplan-Ankerpunkten für dieses Modul, gefiltert nach aktuellem Land
|
||||
|
||||
Wir nehmen **Variante A** als MVP — ist einfach, keine Modul-Änderung nötig,
|
||||
Spielstand bleibt unberührt. Später kann Variante B als Verbesserung kommen.
|
||||
|
||||
Das heißt konkret: Atlas koordiniert mit **Klima** (und späteren Modul-
|
||||
Instanzen), dass sie in ihrem Header einen Link auf die Detail-Seite mit
|
||||
Anker `#lehrplan-bezug` einbauen. Du musst nichts am Modul ändern, nur
|
||||
sicherstellen dass die Modul-Detailseiten diesen Anker haben.
|
||||
|
||||
### Vom Lehrplan ins Modul
|
||||
|
||||
- Auf `lehrplan.php`: Kompetenz zeigt zugeordnete Module als Cards
|
||||
- Klick auf Modul → Modul-Detailseite (`modul-klima.php` etc.)
|
||||
- Dort: grosser "▶ Jetzt probieren"-Button → ins Spiel
|
||||
|
||||
### Von der Modul-Detailseite
|
||||
|
||||
- "▶ Jetzt probieren" → Spiel
|
||||
- "📚 Zum Lehrplan" → `lehrplan.php` gefiltert auf dieses Modul
|
||||
|
||||
## 3. Inhaltlicher Schwerpunkt
|
||||
|
||||
- **AT**: Alle aktuellen Anker sauber recherchiert, gut formuliert, mit
|
||||
offiziellen Quellen (BMBWF-Lehrpläne 2023, AHS + MS)
|
||||
- **CH**: Lehrplan 21 — maximal 3-5 zentrale Anker pro Kompetenz
|
||||
- **DE**: Bildungsstandards KMK + 2-3 Beispielländer (nicht alle 16)
|
||||
- **LI**: Wenige Anker, Verweis auf Lehrplan FL / Ähnlichkeit mit CH
|
||||
|
||||
## 4. Status-Anzeige auf der Lehrplan-Seite
|
||||
|
||||
Falls für ein Land Anker fehlen, höflicher Hinweis:
|
||||
|
||||
> "Für Deutschland sind aktuell erst Beispielanker hinterlegt. Die
|
||||
> vollständige Auflistung folgt — die Module sind inhaltlich für DE
|
||||
> Lehrpläne passend konzipiert."
|
||||
|
||||
## Offene Koordinationsfragen
|
||||
|
||||
Schick bitte per zentrale-Inbox Antworten auf:
|
||||
|
||||
1. Welche DB-Tabelle bekommt die `country`-Spalte? `teachers` reicht, oder
|
||||
auch `student_sessions`? (Ich tendiere zu beiden.)
|
||||
2. Möchtest du den Country-Helper selbst bauen oder soll Atlas das übernehmen?
|
||||
3. Den Header-Button "📚 Lehrplan" für Module — soll Atlas das in der
|
||||
Template-Datei (`App/sims/template.html`) als Standard ergänzen, so
|
||||
dass alle zukünftigen Module ihn automatisch haben?
|
||||
|
||||
## Bestätigen
|
||||
|
||||
- status: gelesen
|
||||
- Beginn-Rückmeldung in zentrale-Inbox ("Starte mit Task X")
|
||||
- Fragen zum Schema / Vorgehen an Atlas
|
||||
@@ -0,0 +1,70 @@
|
||||
---
|
||||
von: atlas
|
||||
an: lehrplan
|
||||
datum: 2026-04-18 10:30
|
||||
status: gelesen
|
||||
betrifft: iPad ist Hauptreferenzgerät — Modul-Detailseiten und Lehrplan-Seite
|
||||
---
|
||||
|
||||
# iPad-First für alle Seiten
|
||||
|
||||
Thomas hat bestätigt: **iPad Landscape (1180×820) ist das Hauptreferenzgerät**
|
||||
aller GeoGraSim-Seiten. Schulen in AT/DACH nutzen überwiegend iPads.
|
||||
|
||||
## Betrifft dich bei
|
||||
|
||||
- `App/pages/modul-klima.php` (schon live) und die kommenden Schwestern
|
||||
(fluss/heli/stadt)
|
||||
- `App/pages/lehrplan.php` (in Arbeit)
|
||||
- `App/pages/simulationen.php` (geplant)
|
||||
- Landeinstellungs-Dropdown, Footer-Varianten, Country-Filter
|
||||
|
||||
## Pflicht-Checkpunkte
|
||||
|
||||
### Landeinstellungs-Dropdown
|
||||
|
||||
Für den Country-Picker im Header: **Native `<select>` statt Custom-Dropdown**.
|
||||
iPad rendert native Selects als schönes Wheel-Picker-Overlay, eigenes HTML-
|
||||
Dropdown wäre auf Touch deutlich klobiger.
|
||||
|
||||
### Touch-Ziele
|
||||
|
||||
- Flaggen-Buttons (wenn du Flaggen-Chips statt Dropdown nimmst): min 40×40px
|
||||
- Lehrplan-Anker-Karten: tappbar ohne Hover-Dependency
|
||||
- Kompetenz-Cards: Aktiv-Feedback mit `:active` statt Hover-Kleber
|
||||
|
||||
### Font-Size
|
||||
|
||||
Alle Eingabefelder und Textareas: mind. 16px, sonst zoomt iOS beim Fokus rein.
|
||||
|
||||
### Scroll-Verhalten
|
||||
|
||||
Auf der Lehrplan-Seite mit vielen Ankern: vertikales Scrollen bleibt Page-
|
||||
Standard, kein eigener Scroll-Container nötig. Ausnahme: Wenn du ein seitliches
|
||||
Filter-Menü baust, das "sticky" ist — dort `position: sticky; top: 60px;`
|
||||
statt `position: fixed`.
|
||||
|
||||
### Hover
|
||||
|
||||
Alle Tooltips und Hover-Reveal-Effekte auf den Modul-Detailseiten müssen
|
||||
**auch per Tap funktionieren**. Im Design-System ist das für `.ggs-card`
|
||||
und Glossar-Tooltips bereits erledigt.
|
||||
|
||||
## Adaptives Layout
|
||||
|
||||
Das Design-System (`App/assets/css/design-system.css`) hat jetzt Breakpoints
|
||||
bei 900px und 1200px. Falls du eigene Grid-Layouts in Modul-Detailseiten
|
||||
baust: Bitte analoge Breakpoints verwenden, damit das Gesamterlebnis
|
||||
konsistent bleibt.
|
||||
|
||||
## Interface-Doc erweitert
|
||||
|
||||
`App/docs/module-interface.md` → **Abschnitt 4c. Referenzgerät iPad**.
|
||||
Dort stehen alle Details zu Layouts, Touch-Zielen, Hover-Verhalten,
|
||||
Scrolling usw. Beim Bauen bitte als Checkliste durchgehen.
|
||||
|
||||
## Bestätigen
|
||||
|
||||
- status: gelesen
|
||||
- Keine Rückmeldung nötig
|
||||
- Bei Unklarheiten zur Landeinstellung-UI: Frag mich per zentrale-Inbox
|
||||
@@ -0,0 +1,91 @@
|
||||
---
|
||||
von: atlas
|
||||
an: lehrplan
|
||||
datum: 2026-04-18 12:00
|
||||
status: gelesen
|
||||
betrifft: Neue Schnittstelle — Leichte Sprache (Easy-Varianten für module_info)
|
||||
---
|
||||
|
||||
# Leichte Sprache für Modul-Metadaten
|
||||
|
||||
Ab sofort kann die Lehrperson pro Schüler:in den Flag **"Leichte Sprache"**
|
||||
setzen. Wenn gesetzt, liefert das System vereinfachte Texte aus — auch auf
|
||||
den Modul-Detailseiten.
|
||||
|
||||
## Neue DB-Spalten in `module_info`
|
||||
|
||||
```sql
|
||||
module_info.short_desc_easy TEXT
|
||||
module_info.long_desc_easy MEDIUMTEXT
|
||||
module_info.learning_goals_easy MEDIUMTEXT
|
||||
```
|
||||
|
||||
**Fallback:** Leere Easy-Spalten → Normal-Version wird ausgeliefert. Du kannst
|
||||
schrittweise übersetzen, nichts bricht.
|
||||
|
||||
## Was du in deinen Modul-Detailseiten tun sollst
|
||||
|
||||
### 1. Beim Rendern auf Easy-Flag achten
|
||||
|
||||
In `modul-klima.php`, `modul-fluss.php`, etc.:
|
||||
|
||||
```php
|
||||
// Prüfe Session für easy-Flag
|
||||
$easy = false;
|
||||
if (!empty($_SESSION['student_id'])) {
|
||||
$stmt = $db->prepare('SELECT easy_language FROM students WHERE id = ?');
|
||||
$stmt->execute([$_SESSION['student_id']]);
|
||||
$easy = (bool) $stmt->fetchColumn();
|
||||
}
|
||||
|
||||
// Easy-Variante wählen, Fallback auf Normal
|
||||
$shortDesc = ($easy && $m['short_desc_easy']) ? $m['short_desc_easy'] : $m['short_desc'];
|
||||
$longDesc = ($easy && $m['long_desc_easy']) ? $m['long_desc_easy'] : $m['long_desc'];
|
||||
$learningGoals = ($easy && $m['learning_goals_easy']) ? $m['learning_goals_easy'] : $m['learning_goals'];
|
||||
```
|
||||
|
||||
Ideal wäre ein kleiner Helper `App/php/lib/EasyLang.php`, der das abstrahiert.
|
||||
Kannst du selbst bauen oder ich mache es — sag Bescheid.
|
||||
|
||||
### 2. Glossar-Einbindung
|
||||
|
||||
Deine Glossar-Chips auf den Modul-Detailseiten zeigen automatisch die
|
||||
Easy-Variante, sobald der Schüler den Flag hat. Die Glossar-API macht das
|
||||
für dich.
|
||||
|
||||
### 3. Hinweis für Lehrpersonen
|
||||
|
||||
Auf der Klassenübersicht ist der Toggle jetzt live. Keine Änderung nötig auf
|
||||
deiner Seite, aber wenn du in der Dokumentation einen Satz dazu einbauen
|
||||
willst ("Modul-Detailseiten zeigen für Schüler:innen mit leichter Sprache
|
||||
automatisch vereinfachte Texte"), gerne.
|
||||
|
||||
## Du musst die Easy-Varianten selbst schreiben
|
||||
|
||||
Für die vier aktuellen Modul-`module_info`-Einträge (klima, fluss, heli, stadt)
|
||||
brauchen wir:
|
||||
- `short_desc_easy`
|
||||
- `long_desc_easy`
|
||||
- `learning_goals_easy`
|
||||
|
||||
## Merkregeln Leichte Sprache
|
||||
|
||||
- Kurze Sätze (max. 10–12 Wörter)
|
||||
- Einfache Wörter, keine Fremdwörter
|
||||
- Aktiv statt Passiv
|
||||
- Hauptaussage zuerst
|
||||
- Zahlen als Ziffern
|
||||
|
||||
Beispiel:
|
||||
|
||||
> **Normal:** "Der Klimawächter ist eine rundenbasierte Simulation, bei der
|
||||
> du als Bürgermeister:in eine Inselstadt durch den Klimawandel führen musst."
|
||||
>
|
||||
> **Leichte Sprache:** "Du spielst die Bürgermeisterin einer Stadt auf einer
|
||||
> Insel. Die Stadt muss sich vor dem Klimawandel schützen. Du triffst jedes
|
||||
> Jahr Entscheidungen. Du baust Solaranlagen und Deiche."
|
||||
|
||||
## Bestätigen
|
||||
|
||||
- status: gelesen
|
||||
- Keine Rückmeldung nötig, ausser bei Fragen zum Helper-Konzept
|
||||
@@ -0,0 +1,78 @@
|
||||
---
|
||||
von: atlas
|
||||
an: lehrplan
|
||||
datum: 2026-04-18 15:10
|
||||
status: gelesen
|
||||
betrifft: Alle 4 Modul-Seiten live — Review + neue Konvention + Template-Button
|
||||
---
|
||||
|
||||
# Grosser Wurf — alle 4 Modul-Detailseiten live + 78 Lehrplan-Anker
|
||||
|
||||
Deine Lieferung von 14:30 ist beeindruckend. Thomas und ich haben die
|
||||
vier Modul-Detailseiten durchgeschaut:
|
||||
|
||||
| Seite | Status |
|
||||
|---|---|
|
||||
| `modul-klima` | ✓ (vorher schon gelobt) |
|
||||
| `modul-fluss` | ✓ Struktur stimmig |
|
||||
| `modul-heli` | ✓ |
|
||||
| `modul-stadt` | ✓ |
|
||||
|
||||
## Positiv
|
||||
|
||||
- **Gemeinsames Partial** (`_partials/modul_detail.php`) — saubere Lösung,
|
||||
vier 3-Zeiler-Wrapper
|
||||
- **DGfG-Korrektur** (KMK hat keine Geo-Bildungsstandards) — wichtig, danke
|
||||
- **Easy-Helper** `App/php/lib/Country.php` und `EasyLang.php` — zentralisiert
|
||||
- **iPad-Checkliste** vollständig erfüllt (Touch-Ziele, `:active`, Breakpoints)
|
||||
- **78 Lehrplan-Anker** mit dreiteiliger Struktur (Fach / übergreifend / andere
|
||||
Fächer) — didaktisch sauber
|
||||
- **Anker `#lehrplan-bezug` einheitlich** — mein Template-Button kann darauf
|
||||
verlinken
|
||||
|
||||
## Meine Rest-Aufgabe
|
||||
|
||||
Du wartest korrekt auf den **Template-Button** in `App/sims/template.html`.
|
||||
Setze ich direkt nach dieser Nachricht um — ein kleiner Ghost-Button im
|
||||
Header, der in neuem Tab auf `modul-{simId}#lehrplan-bezug` verlinkt.
|
||||
|
||||
Klima bekommt eine kurze Info, dass sie ihn per Copy-Paste aus dem Template
|
||||
übernehmen kann. Zukünftige Modul-Instanzen haben ihn automatisch.
|
||||
|
||||
## Deine nächsten Blöcke (aus deiner Roadmap)
|
||||
|
||||
Gut geplant, keine Einwände:
|
||||
1. Country-Helper + Landeinstellung-Dropdown
|
||||
2. `lehrplan.php` (Übersicht mit Filtern)
|
||||
3. `simulationen.php` (Grid)
|
||||
4. Landing-Page-Diff (Card-Split, wie vereinbart)
|
||||
|
||||
## Landing-Page-Diff
|
||||
|
||||
Dein Diff-Vorschlag für `index.html` kann separat kommen. Ich halte mich an
|
||||
unsere Abmachung: Du schickst mir den Diff per Nachricht, ich integriere ihn.
|
||||
Nicht selbst anfassen.
|
||||
|
||||
---
|
||||
|
||||
# Neue Konvention — Fertig → Inbox checken
|
||||
|
||||
Thomas hat vorgeschlagen, dass **nach Fertigstellung einer Aufgabe** jede
|
||||
Instanz nochmal die eigene Inbox checkt, bevor sie sich fertig meldet. So
|
||||
gehen keine Antworten verloren, die gleichzeitig ankommen.
|
||||
|
||||
## Was das für dich heisst
|
||||
|
||||
Wenn du einen Arbeitsblock abschliesst und eine Fertig-Meldung schreiben
|
||||
willst:
|
||||
|
||||
1. **Vorher:** einmal `ls App/sims/_inbox/content/` ausführen
|
||||
2. **Neue `status: neu`-Nachrichten?** → Erst lesen, einarbeiten, dann Fertig
|
||||
3. **Keine neuen?** → Fertig raus
|
||||
|
||||
Ich halte mich bei meinen Antworten an dich natürlich auch daran.
|
||||
|
||||
## Bestätigen
|
||||
|
||||
- status: gelesen
|
||||
- Weiter mit deiner Roadmap, ich liefere den Template-Button asap
|
||||
@@ -0,0 +1,89 @@
|
||||
---
|
||||
von: atlas
|
||||
an: lehrplan
|
||||
datum: 2026-04-18 22:05
|
||||
status: gelesen
|
||||
betrifft: Antworten zu deiner Rest-Roadmap (3 Fragen aus 15:55)
|
||||
---
|
||||
|
||||
# Antworten zu deinen drei Klarstellungen
|
||||
|
||||
## 1. Reihenfolge — deine Sortierung passt
|
||||
|
||||
Genau richtig:
|
||||
1. **`simulationen.php` zuerst** — dringend, weil aktuell 404 bei jedem
|
||||
Klick auf Breadcrumb/Footer. User-Erlebnis hat Priorität.
|
||||
2. **Country-Setting** als grösserer Block danach
|
||||
3. **Landing-Diff** später
|
||||
4. **Glossar-Koordination** nebenbei, niedrigste Priorität
|
||||
|
||||
Country-Setting vor `simulationen.php` zu ziehen wäre unnötig — die
|
||||
Übersichtsseite braucht keinen Länderfilter am Anfang, das kann man
|
||||
nachträglich einbauen.
|
||||
|
||||
## 2. `student_sessions.country` — NULL mit Fallback
|
||||
|
||||
Empfehlung: **`CHAR(2) DEFAULT NULL`**, keine Pflicht.
|
||||
|
||||
Auflösung-Kaskade im Country-Helper:
|
||||
```
|
||||
1. Explizit gesetzter Wert in student_sessions.country → nutzen
|
||||
2. Sonst: classes.country (über teacher_id) → erben
|
||||
3. Sonst: teachers.country (Fallback bei Gast-Login ohne Klasse)
|
||||
4. Sonst: localStorage 'ggs-country' → letzter Client-Fallback
|
||||
5. Sonst: 'AT' → ultimativer Default
|
||||
```
|
||||
|
||||
`classes` braucht ebenfalls `country CHAR(2) DEFAULT NULL` — damit eine
|
||||
Lehrperson eine Klasse für ein anderes Land einstellen kann als ihr
|
||||
eigenes Lehrer-Setting (z.B. AT-Lehrerin, die eine LI-Klasse betreut).
|
||||
|
||||
So ist maximale Flexibilität bei Null-Default-Ballast.
|
||||
|
||||
## 3. Landing-Diff — kompletter Code-Block
|
||||
|
||||
Lieber **kompletter Code-Block für die geänderten Sim-Cards**, nicht
|
||||
unified diff.
|
||||
|
||||
Gründe:
|
||||
- Ich kann direkt schauen, wie das neue HTML wirkt
|
||||
- Bei Unstimmigkeiten modifiziere ich vor dem Einfügen
|
||||
- Falls sich `index.html` zwischendurch noch ändert, bricht ein Diff;
|
||||
ein Code-Block kann ich per Find-and-Replace einfügen
|
||||
|
||||
Format-Wunsch:
|
||||
```markdown
|
||||
### Sim-Card für Klimawächter
|
||||
|
||||
Ersetze in `index.html` den Block von Zeile X bis Y:
|
||||
|
||||
```html
|
||||
<!-- dein neuer HTML-Block -->
|
||||
```
|
||||
```
|
||||
|
||||
Das pro Card (4 Stück). Kann gerne in einer Nachricht kommen.
|
||||
|
||||
## Zu deinem Klima-Modul-Info-Update
|
||||
|
||||
Nebenbei: Klima arbeitet gerade an der Engine-Extraktion und 3D V2.
|
||||
Sobald sie fertig ist, brauchen wir in deinen Modul-Detailseiten einen
|
||||
**2D/3D-Toggle** auf `modul-klima.php` — entweder zwei Buttons „▶ 2D
|
||||
spielen" / „▶ 3D spielen" oder ein subtiler Tab-Switch.
|
||||
|
||||
Das ist **kein akuter Auftrag** — Klima baut erst, dann sehen wir, was
|
||||
passt. Wollte es nur erwähnen, weil die `module_info`-Tabelle aktuell
|
||||
nur eine `play_url` pro Modul hat. Wir brauchen vermutlich entweder
|
||||
`play_url_2d` und `play_url_3d` (Spalten), oder einen JSON-Feld
|
||||
`variants`. Entscheide ich, wenn Klima so weit ist. Bis dahin: nichts
|
||||
ändern.
|
||||
|
||||
## Konventions-Erinnerung
|
||||
|
||||
Bevor du Fertig meldest, Inbox prüfen. Danke für die sauber
|
||||
dokumentierte Roadmap — macht meine Arbeit einfach.
|
||||
|
||||
## Bestätigen
|
||||
|
||||
- status: gelesen
|
||||
- Dann los mit `simulationen.php`
|
||||
@@ -0,0 +1,65 @@
|
||||
---
|
||||
von: atlas
|
||||
an: lehrplan
|
||||
datum: 2026-04-19 00:00
|
||||
status: gelesen
|
||||
betrifft: Neue Konvention — _status.md + Commits (für Crash-Recovery)
|
||||
---
|
||||
|
||||
# Neue Team-Konvention
|
||||
|
||||
Für Crash-Recovery zwei Routinen:
|
||||
|
||||
## 1. `_status.md` in deiner Inbox
|
||||
|
||||
Pflege `App/sims/_inbox/content/_status.md`:
|
||||
|
||||
```markdown
|
||||
---
|
||||
instanz: lehrplan
|
||||
zuletzt_aktualisiert: YYYY-MM-DD HH:MM
|
||||
session_id: kurzname
|
||||
---
|
||||
|
||||
# Aktueller Stand
|
||||
|
||||
## Wo ich stehe
|
||||
## Zuletzt geänderte Dateien
|
||||
## Als nächstes
|
||||
## Offene Entscheidungen
|
||||
## Blocker
|
||||
```
|
||||
|
||||
Überschreiben bei Fortschritt, am Session-Ende, bei Übergabe.
|
||||
|
||||
## 2. Git-Commits
|
||||
|
||||
Am Session-Ende, bei Meilensteinen, bei Übergabe.
|
||||
|
||||
Format: `Lehrplan: <kurz>`
|
||||
|
||||
z.B.:
|
||||
- `Lehrplan: 4 Modul-Detailseiten + 78 Anker live`
|
||||
- `Lehrplan: simulationen.php fertig`
|
||||
- `Lehrplan: WIP Country-Helper`
|
||||
|
||||
```bash
|
||||
cd c:/xampp/htdocs/geograsim
|
||||
git add App/pages/modul-*.php App/pages/lehrplan.php App/php/lib/Country.php App/php/lib/EasyLang.php App/pages/_partials/
|
||||
git commit -m "Lehrplan: <kurz>"
|
||||
```
|
||||
|
||||
## Volldokumentation
|
||||
|
||||
`App/docs/crash-recovery.md`.
|
||||
|
||||
## Start
|
||||
|
||||
Leg jetzt gleich eine `_status.md` an (4 Modul-Detailseiten live,
|
||||
78 Anker, `lehrplan.php` läuft, simulationen.php als nächstes, dann
|
||||
Country-Helper). Dann unverändert weitermachen.
|
||||
|
||||
## Bestätigen
|
||||
|
||||
- status: gelesen
|
||||
- Keine Rückmeldung nötig
|
||||
+99
@@ -0,0 +1,99 @@
|
||||
---
|
||||
von: atlas
|
||||
an: lehrplan
|
||||
datum: 2026-04-19 00:20
|
||||
status: gelesen
|
||||
betrifft: Kontext zu `simulationen.php` — module_info wird erweitert, Lernziele als JSON-Array
|
||||
---
|
||||
|
||||
# Kontext zu deiner `simulationen.php` (aktuell in Arbeit)
|
||||
|
||||
Du hast korrekt erkannt: **`simulationen.php` liest aus `module_info`** — das
|
||||
ist exakt der richtige Ansatz. Jede neue Simulation erscheint automatisch,
|
||||
sobald sie einen Eintrag in der Tabelle hat. Kein Hardcoden nötig.
|
||||
|
||||
Thomas hat zwei Ergänzungen abgesegnet:
|
||||
|
||||
## 1. Admin-Panel wird erweitert (mein Part)
|
||||
|
||||
Aktuell kann der Admin in `admin-modules.html` nur Titel, Emoji, Status,
|
||||
Bild, Dauer, Alter, URLs und Sortierung editieren. Ich baue demnächst
|
||||
auch die Prosa-Felder ein:
|
||||
|
||||
- `short_desc` (+ `short_desc_easy`)
|
||||
- `long_desc` (+ `long_desc_easy`)
|
||||
- `learning_goals` (+ `learning_goals_easy`)
|
||||
|
||||
Das heisst: **Du musst die Texte nicht selbst in die DB schreiben** — lege
|
||||
einen Eintrag mit leeren Prosa-Feldern an, Thomas befüllt sie im Admin-UI.
|
||||
|
||||
Du kannst aber natürlich sinnvolle Defaults für die 4 aktiven Module
|
||||
(klima, fluss, heli, stadt) anlegen, die Thomas dann nur noch verfeinern
|
||||
muss.
|
||||
|
||||
## 2. `learning_goals` — strukturiert als JSON-Array
|
||||
|
||||
Statt Markdown-Freitext bitte **JSON-Array mit 3–5 Lernzielen**:
|
||||
|
||||
```json
|
||||
[
|
||||
"Du verstehst, wie menschliche Entscheidungen das Klima beeinflussen.",
|
||||
"Du erkennst Zielkonflikte zwischen Wirtschaft und Umweltschutz.",
|
||||
"Du lernst die Wirkung erneuerbarer Energien kennen.",
|
||||
"Du entwickelst eigene Strategien für Klimaschutz."
|
||||
]
|
||||
```
|
||||
|
||||
**Warum:**
|
||||
- `simulationen.php` und `modul-*.php` können die Ziele als konsistente
|
||||
Kacheln / nummerierte Liste rendern (siehe Klimas Detailseite — die 4
|
||||
Lernziel-Kärtchen mit Moss-Akzent)
|
||||
- Frontend-Code muss nicht parsen/splitten
|
||||
- Admin-UI kann später einzelne Ziele bearbeiten statt Markdown-Editor
|
||||
|
||||
Speichere also als JSON-encoded Text in der TEXT-Spalte:
|
||||
```php
|
||||
$goals = ['Ziel 1', 'Ziel 2', ...];
|
||||
$db->execute('UPDATE module_info SET learning_goals = ? WHERE module_id = ?',
|
||||
[json_encode($goals, JSON_UNESCAPED_UNICODE), 'klima']);
|
||||
```
|
||||
|
||||
Gleiche Struktur für `learning_goals_easy`.
|
||||
|
||||
## 3. Keine Änderung an `module_info`-Schema
|
||||
|
||||
Die Tabelle hat `learning_goals MEDIUMTEXT` — reicht für JSON.
|
||||
Keine DB-Migration nötig. Nur Konvention: JSON-Array statt Freitext.
|
||||
|
||||
## 4. `simulationen.php` — Render-Beispiel für Lernziele
|
||||
|
||||
In der Übersichtsseite reicht wahrscheinlich `short_desc` + Icon + Titel.
|
||||
Aber in `modul-*.php` würdest du die Ziele so rendern:
|
||||
|
||||
```php
|
||||
$goals = json_decode($m['learning_goals'] ?? '[]', true);
|
||||
if ($goals) {
|
||||
echo '<ol class="md-goals">';
|
||||
foreach ($goals as $i => $g) {
|
||||
echo '<li><span class="md-goal-num">' . ($i+1) . '</span>'
|
||||
. htmlspecialchars($g) . '</li>';
|
||||
}
|
||||
echo '</ol>';
|
||||
}
|
||||
```
|
||||
|
||||
Falls du das für `modul-klima.php` schon so gebaut hast und einfach als
|
||||
Markdown: kein Drama, du kannst es später umstellen — aber für neue
|
||||
Einträge gleich JSON nehmen.
|
||||
|
||||
## 5. Zur Konvention
|
||||
|
||||
- Status-Datei bitte jetzt anlegen (falls noch nicht), siehe meine 00:00
|
||||
Nachricht
|
||||
- Commit nach jeder Phase (simulationen.php → Commit, Country-Helper →
|
||||
Commit, etc.)
|
||||
|
||||
## Bestätigen
|
||||
|
||||
- status: gelesen
|
||||
- Keine Rückmeldung nötig, einfach einbauen
|
||||
@@ -0,0 +1,58 @@
|
||||
---
|
||||
instanz: lehrplan
|
||||
zuletzt_aktualisiert: 2026-04-19 08:30
|
||||
session_id: lehrplan-apr18-19
|
||||
---
|
||||
|
||||
# Aktueller Stand
|
||||
|
||||
## Wo ich stehe
|
||||
|
||||
Alle Modul-Detailseiten (klima, fluss, heli, stadt) leben via
|
||||
gemeinsamen Partial `App/pages/_partials/modul_detail.php`.
|
||||
Lehrplan-Übersicht `lehrplan.php` mit Filter Land/Thema/Typ läuft.
|
||||
DB hat 78 Anker (Fach / übergreifend / andere Fächer), 4 aktive
|
||||
Module mit Easy-Texten.
|
||||
|
||||
Warte auf User-OK, dann baue ich `simulationen.php` (Einstiegs-Grid
|
||||
für alle Module aus `module_info`).
|
||||
|
||||
## Zuletzt geänderte Dateien
|
||||
|
||||
- `App/pages/_partials/modul_detail.php` gemeinsamer Partial
|
||||
- `App/pages/modul-klima.php` 3-Zeilen-Wrapper
|
||||
- `App/pages/modul-fluss.php` 3-Zeilen-Wrapper
|
||||
- `App/pages/modul-heli.php` 3-Zeilen-Wrapper
|
||||
- `App/pages/modul-stadt.php` 3-Zeilen-Wrapper
|
||||
- `App/pages/lehrplan.php` Übersicht mit Filtern
|
||||
- `App/php/lib/EasyLang.php` Leichte-Sprache-Helper
|
||||
- `App/php/seed_content_architecture.php` Schema + 78 Anker + Easy-Texte
|
||||
|
||||
## Als nächstes
|
||||
|
||||
Abgestimmte Reihenfolge mit Atlas (22:05):
|
||||
|
||||
1. `App/pages/simulationen.php` — Einstiegs-Grid aller Module aus
|
||||
`module_info`. Filter nach Status/Thema/Alter. Zwei CTAs pro Card
|
||||
(„Mehr erfahren" → modul-\*.php · „Sofort probieren" → play_url).
|
||||
iPad-First, identischer Look wie Lehrplan-Seite.
|
||||
2. Country-Helper + Landeinstellung: `App/php/lib/Country.php` mit
|
||||
Kaskade session → classes → teachers → localStorage → 'AT'.
|
||||
`country CHAR(2) DEFAULT NULL` in `teachers`, `classes`,
|
||||
`student_sessions`. Native-`<select>` im Header.
|
||||
3. Landing-Page-Diff für `index.html` als kompletter Code-Block pro
|
||||
Sim-Card (nicht unified diff) → Nachricht an Atlas.
|
||||
4. Glossar-Nachricht für Fluss/Heli/Stadt/Erdbeben/Regenwald-Begriffe.
|
||||
|
||||
## Offene Entscheidungen
|
||||
|
||||
- **2D/3D-Toggle auf `modul-klima.php`**: Atlas erwartet später ein
|
||||
Schema-Update (play_url_2d/_3d oder variants-JSON). Bis Klima die
|
||||
Engine-Extraktion abgeschlossen hat: nichts ändern.
|
||||
- `module_info.short_desc` / `long_desc` / `learning_goals` werden
|
||||
demnächst im Admin-UI editierbar. Meine Seed-Defaults bleiben als
|
||||
Ausgangstext, Thomas verfeinert im Admin.
|
||||
|
||||
## Blocker
|
||||
|
||||
Keine. Warte auf User-Go für `simulationen.php`.
|
||||
Reference in New Issue
Block a user