Navigation Bar (Perl)

Bei Verwendung von Perl LoxBerry::Web::pagestart und LoxBerry::Web::lbheader bzw. PHP LBWeb::pagestart und LBWeb::lbheader kann oben, unterhalb der Titelzeile, eine Navigation Bar eingeblendet werden. Damit kann man beispielsweise innerhalb des Plugins über mehrere Einstellungsseiten navigieren. Es können auch Notification Bullets eingeblendet werden.


Es gibt dafür jeweils zwei Möglichkeiten. Beide Möglichkeiten arbeiten mit der globalen Variable %navbar bzw. $navbar.

Folgende Möglichkeiten gibt es dafür:

Perl (LoxBerry::Web)

Mittels Hash (%navbar)

In deinem Code muss die globale Variable %navbar erzeugt werden, und darin die Elemente abgelegt. Das muss vor dem Aufruf von pagestart bzw. lbheader passieren.

Hash definieren

our %navbar;
$navbar{1}{Name} = "First Menu";
$navbar{1}{URL} = 'index.cgi';
 
$navbar{2}{Name} = "Second Menu";
$navbar{2}{URL} = 'second.cgi';
$navbar{2}{active} = 1;
 
$navbar{3}{Name} = "External Website";
$navbar{3}{URL} = 'http://www.loxberry.de';
$navbar{3}{target} = '_blank';

Die Nummern bestimmen die Reihenfolge der Menüelemente. Diese müssen nicht fortlaufend sein (es geht also auch 10, 20, 30 ,40), die Elemente werden nach dieser Nummer sortiert.

Notification Bullets einblenden

Es können in der NavBar auch die Notification Bullets eingeblendet werden, wobei bei jeder Schaltfläche ein anderer Notification Name als Filter angewandt werden kann. Verwendet wird das beispielsweise im System-Widget Updates: Auf dem Tab LoxBerry Update werden die Notifications von neuen, verfügbaren Versionen angezeigt, auf dem Tab LoxBerry Update Verlauf die Notifications für neue, installierte Versionen.

Hier ein Beispiel-Code:

Hash definieren

our %navbar;
$navbar{1}{Name} = "First Menu";
$navbar{1}{URL} = 'index.cgi';
$navbar{1}{Notify_Package} = $lbpplugindir;
$navbar{1}{Notify_Name} = 'daemon';
 
$navbar{2}{Name} = "Second Menu";
$navbar{2}{URL} = 'second.cgi';
$navbar{2}{active} = 1;
$navbar{1}{Notify_Package} = $lbpplugindir;
$navbar{1}{Notify_Name} = 'cronjob';
 
$navbar{3}{Name} = "External Website";
$navbar{3}{URL} = 'http://www.loxberry.de';
$navbar{3}{target} = '_blank';

Wird der Notify_Name weggelassen, werden alle Notifications des Plugins als Nummer dargestellt.

Um unter der NavBar gleich die Notifications anzuzeigen, verwende im Script nach dem Header LoxBerry::Log::get_notifications_html.

Alle möglichen Parameter

Parameter Mandatory Description
Name (error) The text that is displayed (multilingual labels may use $L{YOUR.LANGSTRING_FROM_TRANSLATION})
URL (error) An internal or external URL to use, e.g. a link to your second settings page, or to the LoxWiki.
target The link target. (HTML target= tag). If omitted, it is opened in the same window, or use "_blank" to open a new window
active ( (error) )If it is True, that button is highlighted (see screenshot above)

The active element must be set to True, otherwise the button is not highlighted.
Notify_Package This defines that the notification bullets should be shown on that tab.

Notify_Package usually is $lbphomedir
Notify_Name Defines/filters the notification by the notification name.

If you provide a Notify_Package but no Notify_Name, all notifications for your plugin are counted.

Mittels String ($navbar)

In diesem Fall wird der String aus der globalen Variable $navbar direkt ins Template geschrieben. Um eine Navigation Bar auszugeben, wird dieser HTML-Code verwendet:

HTML-Code für Navbar Quelle erweitern

<div data-role="navbar">
    <ul>
        <li><a href="#">First</a></li>
        <li><a href="#" class="ui-btn-active">Second</a></li>
        <li><a href="#">Third</a></li>
    </ul>
</div>

Dies als String in die Variable our $navbar schreiben, so wird dies direkt ausgegeben.

Einmalige Verwendbarkeit

Sobald die Navigation Bar ins Template übernommen wurde, wird die Variable %navbar bzw. $navbar geleert.

Werden mehrere pages im Code generiert, muss diese Variable bei jedem Aufruf neu befüllt werden. 

So wird von LoxBerry::Web sichergestellt, dass in einer mod_perl Umgebung keine befüllten globalen Variablen übrig bleiben, die dann fälschlicherweise auf einer anderen Seite dargestellt werden.