WCF: Sidebar im Template korrekt einbinden


Vorab sei zu diesem Artikel gesagt, dass er sich hauptsächlich an Entwickler richtet und erfahrene Administratoren, die das Aussehen ihrer Community anpassen möchten. Es geht in diesem Artikel um die einklappbare rechte Sidebar.


Mit der 2.x Generation des WCF (bzw. der 4.x Generation des WBB) hat WoltLab die anpassbare Sidebar inklusive Dashboardboxen eingeführt, die nahezu systemweit zur Verfügung stehen. Dabei gibt es zum einen die vom Administrator der Seite frei wählbaren Dashboardboxen und es gibt solche Boxen, die vom Entwickler der Anwendung/ des Plugins fest vorgegeben sind.


Ein typisches Beispiel für vom Entwickler vorgebene Sidebarboxen ist zum Beispiel die Mitgliedersuche im Template membersList oder auch die Autorenbox in der Community Gallery.


Schaut man sich das gewollte Verhalten der Sidebar z.B. im Template boardList vom Burning Board an, dann wird die Sidebar ausgeblendet, sobald der Administrator dort keine Dashboardboxen zu gewiesen hat. Im Gegensatz dazu wird im Template membersList die Sidebar auch dann angezeigt, wenn der Administrator alle Dashboardboxen für dieses Template im ACP entfernt hat.


Beim Anpassen von Templates stoße ich immer wieder auf Anwendungen und Plugins, die dieses Verhalten nicht aufweisen. Ein Grund hierfür ist sicher die - nennen wir es bescheidene - Dokumentation seitens WoltLab. Deshalb zeige ich im Folgenden wie's richtig gemacht wird.


Die Ursache für das automatische (Nicht-)Einklappen


Schauen wir uns zunächst einmal exemplarisch die Sidebareinbindung im Template an.


Smarty
{capture assign='sidebar'}{event name='boxes'}{@$__boxSidebar}{/capture}


So sieht eine einfache rechte Sidebar im Template aus - ohne vorgegebene hard gecodete Boxen. Problem dabei: Entfernt der Administrator der Seite sämtliche Boxen, so wird eine leere Sidebar anzeigt - nicht gerade besonders professionell.


Ein Blick ins Template boardList des WBB offenbart die Lösung: der Code muss umschlossen werden. Damit die Sidebar ausgeblendet wird, wenn keine Dashboardboxen vorhanden sind, erfolgt die Einbindung wie folgt:


Smarty
{if $__boxSidebar|isset && $__boxSidebar}{capture assign='sidebar'}{event name='boxes'}{@$__boxSidebar}{/capture}{/if}


Nun wird geprüft ob die boxSidebar gefüllt ist. Wenn ja, wird die Sidebar inklusive der Boxen ausgegeben, ansonsten wird sie nicht ausgegeben. Problem gelöst.


Aber Achtung: Sollen im Template Boxen in der Sidebar hard gecodet ausgegeben werden, die der Administrator aber nicht selbst an- und abwählen kann, dann darf die Sidebar im Template nicht umschlossen werden. Denn sonst würde die Sidebar ausgeblendet werden, sowie keine Dashboardboxen zugewiesen sind. Ein Beispiel dafür wäre folgender Code:


Smarty
{capture assign='sidebar'}{include file='authorSidebarBox'}{event name='boxes'}{/capture}


Bist du selbst Entwickler und wusstest du um diese Art der Einbindung oder verzichtest du sogar bewusst auf diese Einbindung? Lass es mich gern in den Kommentaren wissen.