Erstellen eigener Seitenleisten in Serendipity

Da ich mich ein wenig problematisch angestellt habe in der Erstellung eigener Seitenleisten in Serendipity, habe ich einen sehr langen thread hervorgerufen, bis ich auf die Lösung des Problems kam. YellowLed sprach mich an, doch meinen Geistesblitz in schriftlicher Form niederzulegen und das werde ich auf jeden Fall machen, denn dann dürfte auch weiterhin Einigen die Erstellung eigener Themes mit mehr als einer Sidebar leichter fallen.

Bei der Erstellung eigener Sidebars ist der Dreh- und Angelpunkt in Serendipity die Datei confic.inc.php , die sich im Verzeichnis des Themes befindet, welches man selbst erstellt hat. Innerhalb der Datei config.inc.php lassen sich Variablen für das Theme erstellen, welche später für das Aussehen des Blogs zuständig sind. Als Beispiel nehme ich einmal das Theme von diesem Blog, auch wenn es noch nicht ganz fertig ist.
Das Theme besitzt eine sidebar, welche sich oben und eine sidebar welche sich im unteren Bereich direkt über den footer befindet.
Die obere sidebar spreche ich mit:

{if $is_single_entry !=true and $staticpage_pagetitle ==''}
<div id="sidebar_top">{if $topSidebarElements > 0}
 {serendipity_printSidebar side="top"}
 {/if}</div>
<!-- /#sidebar -->
 {else}
 {/if}

an.
Zeilen:
1. Wenn Du kein Einzeleintrag und keine statische Seite bist dann zeige an
2. DIV für die sidebar_top, div teilt den Inhalt in einzelne Abschnitte. Jeder Abschnitt kann seinen eigenen Format, der durch CSS bestimmt wird, haben und dies wird dann in der style.css definiert. Sprich Ort, Aussehen etc.
3. Wenn es Inhalte/Elemente gibt, welche größer als 0 sind dann gebe aus, die
4. sidebar Namens top
5-9 schliessen das Ganze, welches oben geöffnet wurde ab

Das Gleiche könnte man nun auch mit der unteren sidebar Namens footer machen, jene wird aber bei mir überall angezeigt und damit ist auch dementsprechend das Statement in der index.tpl kürzer:


Um diese beiden sidebars in der Konfiguration für die Plugins anzusprechen muss nun die config.inc.php angepasst werden:

$template_config = array(
array(
‘var’ => ‘sidebars’,
‘name’ => SIDEBAR_TITLE,
‘type’ => ‘hidden’,
‘default’ => ‘top,hide,footer,’
),
…. etc

Normalerweise startet innerhalb der config.inc.php des Templates ein array mit den Einstellungen für das Theme. An dieser Stelle wird definiert, welche Einstellungen das Theme besitzt. Siehe auch Was ist ein Array. In der index.tpl wurde in Zeile 4 im ersten Beispiel die sidebar top definiert und im zweiten Beispiel die sidebar footer. Diese finden wir in Zeile 6 wieder und haben sie als default definiert. Der Typ versteckt (hidden) in Zeile 5 bewirkt, dass ich nicht möchte, dass in den Themeeinstellung eine à„nderung vorgenommen werden kann und sie somit versteckt sind. Wenn dieser Typ ein string wäre, könnte man z.B. die sidebar top oder footer löschen.
Damit ich diese sidebars nun auch in der Oberfläche Plugins verwalten ansprechen kann und auch in meinem Theme vorhanden sind, stellt man an das Ende von seiner config.inc.php noch für jede sidebar eine Definierung für smarty:

$topSidebarElements = serendipity_plugin_api::count_plugins(‘top’);
$serendipity['smarty']->assign_by_ref(‘topSidebarElements’, $topSidebarElements);

$footerSidebarElements = serendipity_plugin_api::count_plugins(‘footer’);
$serendipity['smarty']->assign_by_ref(‘footerSidebarElements’, $footerSidebarElements);

In diesen Zeilen werden einmal für die obere sidebar ( top) und einmal für die untere sidebar (footer) die Anzahl der Plugins pro sidebar gezählt und smarty bekannt gemacht. Wenn der Zähler höher als 0 ist werden die Plugins ausgegeben, siehe dazu auch die Abfrage in dem Beispiel 1 Zeile 3 für die obere sidebar ( top).
Was man nun beachten sollte, ist die Zukunftssicherheit für das Theme, falls es noch unter einer späteren Smartyversion verfügbar sein soll.
Bei smarty hat sich der Aufruf der Funktion assign_by_ref geändert, welches sich in einer späteren Version von Serendipity widerspiegelt.
Das ganze würde dann für die ersten zwei Zeilen so aussehen:

$topSidebarElements = serendipity_plugin_api::count_plugins(‘top’);
if (strpos($serendipity['smarty']->_version, ’2′, 1)) {
assign_by_ref(‘topSidebarElements’, $topSidebarElements);
} else {
assignByRef(‘topSidebarElements’, $topSidebarElements);
}

Es wird abgefragt, welche Version von Smarty genutzt wird, handelt es sich noch um die Version 2 nutze assign_by_ref , wenn nicht nutze das neue assignByRef.
Hoffe ein wenig geholfen zu haben.