Navigationsportlet
Das verwendete Portlet ist in der Datei bwl_portlets/portlet_navBwl.py Es ersetzt das standard-Portlet und wird wie folgt in die left_slots eingetragen:
here/portlet_navBwl/macros/portlet
Viele der Ordnernamen sind fest verdrahted. Das macht im Kontext, in dem das Portlet entwickelt wurde, Sinn. Die Ordnerstruktur lehnt sich and die Kapitelstruktur eines gedruckten Buches an. Diese Kapitelstruktur ist im Ordner "daten" zu finden.
Der zur Lösung gewählte Ansatz lässt sich aber auch ohne diese Restriktion anwenden.
Die "echte" Site, die unter http://bwl.fh-aargau.ch zu finden sein wird, nutzt Produkte, die im abgegebenen bwl.zexp nicht installiert sind. Das Navigieren erzeugt deshalb Fehler.
Das Navigationsportlet besteht aus 3 Bereichen:
Dieser Bereich wird von einem Template (bwl_portlets/extraNaigation) dargestellt. Es nutzt ein Script (bwl_scripts/getListOfMenus), das den Datenordner scannt. Dabei stellt es fest, welcher Ordner aktiv ist und gibt eine Liste der "oben" liegenden Bereiche zurück (bwl_scripts/getMenuPosition).
Der aktive Bereich ist ein "normaler" Navtree, der um die Bereiche "oberes menu" und "unteres menu" ergänzt ist. Ausserdem "berechenet" er die anzuwendende Farbe. Dazu wird auf Zeile 30 folgendes Konstrukt gebraucht:
<div tal:define="info python:here.getDecoClassName();
decoration python:info[0];titel python:info[1]"
tal:attributes="class python:' navitem_deco%s' % decoration">
Die Farben werden über eine CSS-Klasse zugeordnet. Diese wird mit dem Script bwl_scripts/getDecoClassName ermittelt. Dieses schlägt den aktiven Folder in einem Dictionary nach:
if not active_dir_name:
L, active_dir_name = context.getMenuPosition()
obj = getattr(context,active_dir_name, '')
if not obj:
obj = context.daten.objectValues()[0]
classDic = {
'100KapitelOrdner': '_100',
'200KapitelOrdner': '_200',
'300KapitelOrdner': '_300',
'400KapitelOrdner': '_400',
'500KapitelOrdner': '_500',
'600KapitelOrdner': '_600',
}
return classDic.get(active_dir_name, '_100'), obj.Title()
Beispiel eines resultierenden Klassennamens: navitem_deco_300
Menü unterhalb des aktiven Bereiches ^^^^^~^^^^^^^^ Dieser Bereich wird analog dem oberen Bereich gehandhabt. Einziger Unterschied ist, dass ein Start-Parameter übergeben wird, der bestimmt, ab welchem Ordner die Menues dargestellt werden sollen.