Die Minibar erweitert das Backend und Frontend um eine schwebende Leiste, die mit verschiedenen Elementen bestückt ist. Dazu gehören u.a. Systeminformationen, Informationen zum aktuellen Artikel, Buttons und Links zur Bearbeitung im Backend. Sie kann um weitere Elemente erweitert werden.
Einstellungen zur Minibar finden sich in den Systemeinstellungen.
- nur für im Backend angemeldete Benutzer
- Elemente via api registrierbar
- Unterstützt Lazy-Elemente die erst bei Interaktion initalisiert werden
- via system/setting einstellbar ob generell aktiv/inaktiv
- via system/setting einstellbar ob in Frontend und/oder Backend aktiv
- via system/setting einstellbar ob in popups aktiv/inaktiv
Damit die Minibar vom Addon im Frontend eingebunden werden kann muss das HTML der Seite sowohl ein </head> als auch ein </body> enthalten. Die Minibar wird nur angezeigt, wenn man im Backend angemeldet ist.
Je nach Einstellung unter "System" wird die Minibar nur im Frontend und/oder Backend angezeigt.
Die Minibar kann mit eigenen Widgets/Elementen erweitert werden. Es gibt zwei Arten von Elementen: einfache Elemente und Lazy-Elemente.
📖 Vollständige Anleitung: Siehe WIDGETS.md für eine ausführliche Dokumentation mit vielen Beispielen.
Einfache Elemente erweitern die Klasse rex_minibar_element und implementieren die Methode render().
<?php
class mein_minibar_element extends rex_minibar_element
{
public function render()
{
return '<div class="rex-minibar-item">
<span class="rex-minibar-value">Mein Element</span>
</div>';
}
}
// Element registrieren
rex_minibar::getInstance()->addElement(new mein_minibar_element());<?php
class mein_erweitertes_element extends rex_minibar_element
{
public function render()
{
return '
<div class="rex-minibar-item">
<span class="rex-minibar-icon">
<i class="rex-minibar-icon--fa rex-minibar-icon--fa-info-circle"></i>
</span>
<span class="rex-minibar-value">
Info-Text
</span>
</div>
<div class="rex-minibar-info">
<div class="rex-minibar-info-header">Zusätzliche Informationen</div>
<div class="rex-minibar-info-group">
<div class="rex-minibar-info-piece">
<span class="title">Details</span>
<span>Hier steht der Inhalt</span>
</div>
</div>
</div>';
}
// Optional: Position des Elements festlegen
public function getOrientation()
{
return rex_minibar_element::RIGHT; // oder ::LEFT
}
// Optional: Element als "danger" kennzeichnen (rote Färbung)
public function isDanger()
{
return false;
}
// Optional: Element als "primary" kennzeichnen (blaue Färbung)
public function isPrimary()
{
return true;
}
// Optional: Element als "warning" kennzeichnen (gelbe Färbung)
public function isWarning()
{
return false;
}
}
// Element registrieren
rex_minibar::getInstance()->addElement(new mein_erweitertes_element());Wenn das Rendern eines Elements zeit- und/oder ressourcenaufwändig ist, kann die Klasse rex_minibar_lazy_element erweitert werden. Lazy-Elemente laden ihren vollständigen Inhalt erst bei Benutzerinteraktion (Mouse-Hover).
<?php
class mein_lazy_element extends rex_minibar_lazy_element
{
/**
* Initiale, schnelle Darstellung des Elements
* Wird beim Laden der Seite angezeigt
*/
protected function renderFirstView()
{
return '<div class="rex-minibar-item">
<span class="rex-minibar-value">Lade Daten...</span>
</div>';
}
/**
* Vollständige Darstellung mit allen Daten
* Wird erst bei Mouse-Hover geladen
*/
protected function renderComplete()
{
// Hier können aufwändige Datenbankabfragen oder Berechnungen stattfinden
$data = $this->getDatenAusDatenbank();
return '
<div class="rex-minibar-item">
<span class="rex-minibar-icon">
<i class="rex-minibar-icon--fa rex-minibar-icon--fa-database"></i>
</span>
<span class="rex-minibar-value">
' . count($data) . ' Einträge
</span>
</div>
<div class="rex-minibar-info">
<div class="rex-minibar-info-header">Datenbank-Informationen</div>
<div class="rex-minibar-info-group">
<div class="rex-minibar-info-piece">
<span>' . htmlspecialchars(implode(', ', $data)) . '</span>
</div>
</div>
</div>';
}
private function getDatenAusDatenbank()
{
// Beispiel für eine aufwändige Datenbankabfrage
$sql = rex_sql::factory();
$sql->setQuery('SELECT * FROM rex_article LIMIT 10');
$results = [];
foreach ($sql as $row) {
$results[] = $row->getValue('name');
}
return $results;
}
public function getOrientation()
{
return rex_minibar_element::LEFT;
}
}
// Element registrieren
rex_minibar::getInstance()->addElement(new mein_lazy_element());Minibar-Elemente sollten in der boot.php Datei des eigenen Addons oder im Project-Addon registriert werden:
<?php
// boot.php des eigenen Addons
// Element nur im Frontend anzeigen
if (rex::isFrontend()) {
rex_minibar::getInstance()->addElement(new mein_frontend_element());
}
// Element nur im Backend anzeigen
if (rex::isBackend()) {
rex_minibar::getInstance()->addElement(new mein_backend_element());
}
// Element überall anzeigen (Frontend und Backend)
rex_minibar::getInstance()->addElement(new mein_element());
// Element nur bei bestimmten Bedingungen anzeigen
if (rex::isFrontend() && rex::isDebugMode()) {
rex_minibar::getInstance()->addElement(new mein_debug_element());
}Die Minibar verwendet spezifische CSS-Klassen für konsistentes Styling:
rex-minibar-item: Haupt-Container für ein Elementrex-minibar-icon: Container für Iconsrex-minibar-value: Container für Text/Werterex-minibar-info: Container für zusätzliche Informationen (wird bei Hover angezeigt)rex-minibar-info-header: Überschrift des Info-Bereichsrex-minibar-info-group: Gruppierung von Info-Elementenrex-minibar-info-piece: Einzelnes Info-Element mit Titel und Wert
Für Icons können Font Awesome Icons verwendet werden:
<i class="rex-minibar-icon--fa rex-minibar-icon--fa-{icon-name}"></i>Beispiele:
rex-minibar-icon--fa-info-circlerex-minibar-icon--fa-databaserex-minibar-icon--fa-flagrex-minibar-icon--fa-heartbeat
- Performance: Verwende Lazy-Elemente für aufwändige Operationen (Datenbankabfragen, API-Calls)
- Sicherheit: Überprüfe Benutzerrechte, bevor sensible Informationen angezeigt werden
- HTML-Escaping: Verwende
rex_escape()oderhtmlspecialchars()für Benutzereingaben - Internationalisierung: Nutze
rex_i18n::msg()für mehrsprachige Texte - Konditionale Anzeige: Registriere Elemente nur, wenn sie benötigt werden (z.B. nur im Frontend oder nur für Admins)
Im lib/element/ Verzeichnis finden sich weitere Beispiele:
time.php: Einfaches Element mit Zeitanzeigesystem.php: Komplexes Element mit Systeminformationensyslog.php: Element mit bedingter Anzeige (nur für Admins)debug.php: Element mit Warnung und Custom-Stylingarticle.php: Element mit Artikelinformationen im Frontend
Styles werden durch re-install des minibar Addons neu compiliert (Vorraussetzung: be_style Addon ist aktiv)
Consider supporting the project, so we can make this tool even better even faster for everyone.
