Sehr schön! Am Ende geschmeidiger als die IFrame Lösung wenn man sich eh einmal mit dem Einsatz von Javascript abgefunden hat. Wie hast du es realisiert? Haben die Actions eine getAjax Methode oder läuft es noch über die Template Engine mit einem speziellen Ajax Template? Oder ganz anders?
Claude sagt:
Der Unified Skin folgt einem SPA-ähnlichen Ansatz: Der Server liefert nur eine leere App-Shell (board.tpl), der gesamte Content wird per AJAX nachgeladen.
Alle State-Daten (brdid, thrdid, msgid, csrf, sid, login-Status) werden als data-* Attribute auf #app vom Server gerendert und beim Init von JS ausgelesen.
JavaScript (app.js)
3 zentrale AJAX-Funktionen
Funktion Endpoint Antwort Panel
loadThreadlist() ?mode=threadlistajax HTML-Fragment #panel-threadlist
loadThread(thrdid) ?mode=threadajax JSON (Baum-Daten) #panel-thread
loadMessage(msgid) ?mode=messageajax HTML-Fragment #panel-message
loadMessageForm(msgid) ?mode=messageformajax HTML-Fragment #panel-message
Wichtig: loadThread ist der einzige Endpoint, der JSON liefert. Die Baumstruktur wird clientseitig via renderTree() / renderTreeNode() aus dem JSON rekursiv zu HTML gerendert (Zeilen 344-374).
Alle Klicks werden über Event Delegation auf den 3 Panels abgefangen:
- Threadlist-Klick (a[data-thrdid]): preventDefault() → loadThread() → loadMessage() → pushState()
- Thread-Baum-Klick (a[data-msgid]): preventDefault() → loadMessage() → pushState()
- Antwort-Link (a[href*="mode=messageform"]): preventDefault() → loadMessageForm(msgid)
Wiederverwendung bestehender Funktionen
Was Vorhandene Klasse Anpassung
Board App Shell cActionBoard Vereinfacht: rendert nur board.tpl mit Config-Daten, kein Content
Threadliste cActionThreadlistajax Bereits vorhanden (aus pcx-modern), liefert HTML-Fragment
Thread-Baum cActionThreadajax Bereits vorhanden, liefert JSON
Nachricht cActionMessageajax Bereits vorhanden, liefert HTML-Fragment
Formular laden cActionMessageformajax Neu erstellt - nutzt aber bestehende cBoardMessage, cMessageQuoteParser
Nachricht speichern cActionMessagesave Erweitert um if($bAjaxMode) Branch: bei ajax=1 → JSON statt Redirect
Zusammengefasst: Der Unified Skin ist eine Client-Side-Shell, die 3 bestehende AJAX-Endpoints (threadlistajax, threadajax, messageajax) parallel nutzt, einen neuen Endpoint (messageformajax) hinzufügt, und die bestehende cActionMessagesave um einen AJAX-Branch erweitert.
----
Die Ajax Endpoints hatte ich bereits für das Mobile Skin.
Hört sich das sinnvoll an für dich?