Das Dashboard AddOn ermöglicht es, wichtige Informationen aus REDAXO und anderen AddOns übersichtlich auf der Startseite des Backends anzuzeigen. Mit Version 2.0 wurde das Dashboard grundlegend modernisiert und um Standard-Widgets erweitert.
- 📝 Artikel-Widgets: Zuletzt bearbeitete und neue Artikel mit Benutzerrechte-Integration
- 📊 System-Status: Speicherverbrauch, PHP-Version, Datenbankgröße (nur Admins)
- 📁 Medien-Speicher: Kategorisierte Übersicht des Medienpools nach Dateitypen
- 🔧 AddOn-Verwaltung: Verfügbare Updates und AddOn-Statistiken (nur Admins)
- 📡 RSS-Feed: Konfigurierbare RSS-Feeds mit Paginierung
- 📈 Artikel-Status: Übersicht über Online/Offline-Artikel
- Benutzerrechte: Artikel-Widgets berücksichtigen REDAXO-Benutzerberechtigungen
- Admin-Widgets: Sensitive Informationen nur für Administratoren sichtbar
- Structure-Permissions: Integration mit
rex_complex_perm('structure')
- Auto-Refresh: Dashboard lädt automatisch aktuelle Daten beim Aufrufen
- Responsive Design: Optimiert für verschiedene Bildschirmgrößen
- Drag & Drop: Widgets frei positionierbar mit GridStack.js
- Konfigurationsseite: Zentrale Verwaltung aller Widget-Einstellungen
- AddOn installieren und aktivieren
- Als Administrator zu Dashboard > Konfiguration gehen
- "Default Widgets aktivieren" ankreuzen
- Gewünschte Widgets auswählen und Größen konfigurieren
- Für RSS-Widget: Feed-URL und Namen eingeben
| Widget | Beschreibung | Berechtigung | Größe |
|---|---|---|---|
| Zuletzt aktualisierte Artikel | Die 10 neuesten bearbeiteten Artikel | Structure-Rechte | 2 Spalten |
| Neue Artikel (30 Tage) | Artikel der letzten 30 Tage | Structure-Rechte | 2 Spalten |
| Medien-Speicherverbrauch | Dateityp-kategorisierte Übersicht | Alle User | 1 Spalte |
| Artikel-Status | Online/Offline Artikel-Statistik | Alle User | 1 Spalte |
| System-Status | PHP, MySQL, Speicher-Infos | Nur Admins | 2 Spalten |
| AddOn Updates | Verfügbare Updates anzeigen | Nur Admins | 2 Spalten |
| AddOn Statistiken | Installierte AddOns-Übersicht | Nur Admins | 1 Spalte |
| RSS Feed | Konfigurierbare RSS-Feeds | Alle User | 1-2 Spalten |
Über Dashboard > Konfiguration können Administratoren:
- Default Widgets aktivieren/deaktivieren
- Widget-Größen konfigurieren (1 oder 2 Spalten)
- RSS-Feed URL und Namen festlegen
- Demo-Widgets aktivieren (zu Testzwecken)
RSS Feed URL: https://example.com/feed.xml
RSS Feed Name: Mein RSS Feed
Größe: 1 Spalte (klein) oder 2 Spalten (breit)
Das RSS-Widget zeigt 2 Items pro Seite mit Paginierung an.
Für zukunftssichere Jedes Widget als eigene Datei im Lib-Verzeichnis eines Addons ablegen und dabei die NAmesapce-Empfehlungen einhalten
Widgets basieren auf einem vorhandenen Widget oder auf einem der Basis-Elemente.
namespace MyWorkspace\MyAddon\Dashbaord;
use FriendsOfRedaxo\Dashboard\Base\Item;
class MeinCustomWidget extends Item
{
public function getTitle(): string
{
return 'Mein Custom Widget';
}
public function getData()
{
return '<p>Hier steht der Inhalt</p>';
}
}use FriendsOfRedaxo\Dashboard\Dashboard;
use MyWorkspace\MyAddon\Dashbaord\MeinCustomWidget;
// In der boot.php des eigenen AddOns
if (rex::isBackend() && rex_addon::exists('dashboard')) {
Dashboard::addItem(
MeinCustomWidget::factory('mein-widget-id', 'Mein Widget')
->setColumns(2) // 1 oder 2 Spalten
);
}Die Basisklassen sind im Namespace FriendsOfRedaxo\Dashboard\Baseallokiert.
Item- Basis-WidgetChartBar- BalkendiagrammChartLine- LiniendiagrammChartPie- KreisdiagrammTable- Tabellen-Widget
namespace MyWorkspace\MyAddon\Dashbaord;
use FriendsOfRedaxo\Dashboard\Base\ChartBar;
class MeinChartWidget extends ChartBar
{
public function getChartData()
{
return [
'Label 1' => 42,
'Label 2' => 37,
'Label 3' => 28
];
}
}namespace MyWorkspace\MyAddon\Dashbaord;
use FriendsOfRedaxo\Dashboard\Base\Table;
class MeinTabellenWidget extends Table
{
public function getTableData()
{
return [
'headers' => ['Name', 'Wert', 'Status'],
'rows' => [
['Eintrag 1', '100', 'Aktiv'],
['Eintrag 2', '200', 'Inaktiv']
]
];
}
}Artikel-Widgets prüfen automatisch:
$user = rex::requireUser();
$structurePerm = $user->getComplexPerm('structure');
if ($structurePerm->hasCategoryPerm($categoryId)) {
// User hat Zugriff auf diese Kategorie
}use FriendsOfRedaxo\Dashboard\Dashboard;
if (rex::getUser() && rex::getUser()->isAdmin()) {
// Widget nur für Admins registrieren
Dashboard::addItem(AdminWidget::factory('admin-widget', 'Admin Widget'));
}- Dashboard refresht automatisch beim Laden (500ms Verzögerung)
- Automatisches Refresh alle 5 Minuten
- Manueller Refresh über Refresh-Button
- Drag & Drop Positionierung
- Automatische Größenanpassung
- Benutzer-spezifische Layouts (je User individuell gespeichert)
- Responsive Breakpoints
- Widgets passen sich automatisch an verfügbare Sprachen an
- Sprachenspalten werden nur angezeigt wenn > 1 Sprache vorhanden
Das Dashboard passt sich automatisch an verschiedene Bildschirmgrößen an:
- Desktop: Vollständiges Grid mit Drag & Drop
- Tablet: Optimierte Spaltenbreiten
- Mobile: Single-Column Layout mit vertikalem Scrolling
- Demo-Plugin wird automatisch aufgelöst
- Bestehende Widget-Positionen bleiben erhalten
- Neue Standard-Widgets werden deaktiviert hinzugefügt
- Demo-Plugin entfernt (Funktionalität ins Core integriert)
- Neue Konfigurationsstruktur
- Widget-IDs geändert (
dashboard-default-*Präfix)
Im REDAXO Debug-Modus werden zusätzliche Informationen angezeigt:
- Widget-Ladezeiten
- Berechtigungsprüfungen
- Cache-Status
- JavaScript-Fehler
Fehler werden in REDAXO's System-Log geschrieben:
redaxo/data/log/system.log
- REDAXO: >= 5.11.0
- PHP: >= 7.4
- Browser: Moderne Browser mit ES6-Support
- Mobile: iOS Safari, Chrome Mobile, Firefox Mobile
MIT License - siehe LICENSE-Datei
- Entwicklung: Friends of REDAXO
- GridStack: https://gridstackjs.com/
- Chart.js: https://www.chartjs.org/
- Bootstrap: https://getbootstrap.com/
- GitHub: https://github.com/FriendsOfRedaxo/dashboard
- REDAXO Slack: #addons Channel
- Forum: https://redaxo.org/forum/
Dashboard AddOn 2.0 - Modernes Dashboard für REDAXO 5.x mit Standard-Widgets, Sicherheitsfeatures und verbessertem UX.
siehe DemoItems\Info
namespace FriendsOfRedaxo\Dashboard\DemoItems;
use FriendsOfRedaxo\Dashboard\Base\Item;
class Info extends Item
{
public function getData()
{
return 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.';
}
}namespace MyWorkspace\MyAddon\Dashbaord;
use FriendsOfRedaxo\Dashboard\Base\ChartBar;
class MeinBalkenDiagramm extends ChartBar
{
protected function __construct($id, $name)
{
parent::__construct($id, $name);
$this->setHorizontal(); // optional, sonst vertikal
}
public function getChartData()
{
return [
'Rot' => rand(1,122),
'Blau' => rand(1,122),
'Gelb' => rand(1,122),
'Grün' => rand(1,122),
'Lila' => rand(1,122),
'Orange' => rand(1,122),
];
}
}namespace MyWorkspace\MyAddon\Dashbaord;
use FriendsOfRedaxo\Dashboard\Base\ChartLine;
class MeinLinienDiagramm extends ChartLine
{
public function getChartData()
{
return [
'Linie 1' => [
'Rot' => 12,
'Blau' => 19,
'Gelb' => 3,
'Grün' => 5,
'Lila' => 2,
'Orange' => 3,
],
'Linie 2' => [
'Rot' => 3,
'Blau' => 5,
'Gelb' => 8,
'Grün' => 10,
'Lila' => 11,
'Orange' => 11.5,
],
'Linie 3' => [
'Rot' => 5,
'Blau' => 13,
'Gelb' => 16,
'Grün' => 12,
'Lila' => 7,
'Orange' => 2,
]
];
}
}namespace MyWorkspace\MyAddon\Dashbaord;
use FriendsOfRedaxo\Dashboard\Base\ChartPie;
class MeinLinienDiagramm extends ChartPie
class MeinTortenDiagramm extends ChartPie
{
public function getChartData()
{
return [
'Rot' => 12,
'Blau' => 19,
'Gelb' => 3,
'Grün' => 5,
'Lila' => 2,
'Orange' => 3,
];
}
}namespace MyWorkspace\MyAddon\Dashbaord;
use FriendsOfRedaxo\Dashboard\Base\Table;
class MeineDatenTabelle extends Table
{
protected $header = [];
protected $data = [];
protected function getTableData()
{
$tableData = rex_sql::factory()->setQuery('
SELECT id ID
, label Label
, dbtype `DB-Type`
FROM rex_metainfo_type
ORDER BY id ASC
')->getArray();
if (!empty($tableData)) {
$this->data = $tableData;
$this->header = array_keys($tableData[0]);
}
return [
'data' => $this->data,
'header' => $this->header,
];
}
}In der boot.php des eigenen Project-AddOns oder in der jeweiligen boot.php des entsprechenden AddOns (Für AddOn-Entwickler) müssen die entsprechenden Widgets angemeldet werden.
Hier ein Beispiel für die Anmeldung der Widgets aus dem DemoPlugin, siehe oben:
use FriendsOfRedaxo\Dashboard\Dashboard;
use use FriendsOfRedaxo\Dashboard\DemoItems\Info;
use use FriendsOfRedaxo\Dashboard\DemoItems\ChartBarHorizontal;
use use FriendsOfRedaxo\Dashboard\DemoItems\ChartBarVertical;
use use FriendsOfRedaxo\Dashboard\DemoItems\ChartPie;
use use FriendsOfRedaxo\Dashboard\DemoItems\ChartLine;
use use FriendsOfRedaxo\Dashboard\DemoItems\BigNumber;
if (rex::isBackend() && rex_addon::exists('dashboard')) {
Dashboard::addItem(
Info::factory('dashboard-demo-1', 'Demo 1'),
);
Dashboard::addItem(
Info::factory('dashboard-demo-2', 'Demo 2')
->setColumns(2),
);
Dashboard::addItem(
Info::factory('dashboard-demo-3', 'Demo 3')
->setColumns(3),
);
Dashboard::addItem(
ChartBarHorizontal::factory('dashboard-demo-chart-bar-horizontal', 'Chartdemo Balken horizontal'),
);
Dashboard::addItem(
ChartBarVertical::factory('dashboard-demo-chart-bar-vertical', 'Chartdemo Balken vertikal'),
);
Dashboard::addItem(
ChartPie::factory('dashboard-demo-chart-pie', 'Chartdemo Kreisdiagramm'),
);
Dashboard::addItem(
ChartPie::factory('dashboard-demo-chart-donut', 'Chartdemo Donutdiagramm')
->setDonut(),
);
Dashboard::addItem(
Table::factory('dashboard-demo-table-sql', 'Tabelle (SQL)')
->setTableAttribute('data-locale', 'de-DE'),
);
Dashboard::addItem(
ChartLine::factory('dashboard-demo-chart-line', 'Liniendiagramm'),
);
Dashboard::addItem(
BigNumber::factory('dashboard-demo-big-number', 'Big Number Demo')
->setColumns(1), // Als kleines Widget
);
);Sobald die Widgets angemeldet sind, können sie im Dashboard ausgewählt und angeordnet werden. Dazu klickt man im Widget auf Widget auswählen.
Bis Version 2.1.3 waren wenige Klassen bereits in einen Namespace (FriendsOfREDAXO/Dashboard) angeordnet. Mit der Folgeversion 2.2
sind alle Klassen einheitlich im Namespace FriendsOfRedaxo/Dashboard (andere Schreibweise) bzw. in Sub-Namespaces dazu eingeordnet.
I.d.R. wurden die Klassen dabei auch umbenannt, denn Teile des Namens sind nun Teil des Namespace.
Die bisherigen Klassen (z.B. rex_dashboard) existieren für eine Übergangszeit bis zur Version 3.0 weiter. Das Update auf Version 2.4 sollte daher keine Funktionseinschränkungen bezüglich eigener Elemente mit sich bringen.
Die Umstellung im eigenen Code auf die neuen Klassennamen und Namespaces sollte dennoch zeitnah erfolgen!
Hinweise zur allgemeinen Vorgehensweise sind z.B. auf Github (FriendsOfRedaxo/Discussions) zu finden.
Die Tabelle stellt alte und neue Klassen gegenüber, jeweils mit Namespace:
| Alt | Neu |
|---|---|
| rex_dashboard | FriendsOfRedaxo\Dashboard\Dashbord |
| rex_dashboard_item | FriendsOfRedaxo\Dashboard\Base\Item |
| rex_dashboard_item_chart | FriendsOfRedaxo\Dashboard\Base\Chart |
| rex_dashboard_item_chart_bar | FriendsOfRedaxo\Dashboard\Base\ChartBar |
| rex_dashboard_item_chart_line | FriendsOfRedaxo\Dashboard\Base\ChartLine |
| rex_dashboard_item_chart_pie | FriendsOfRedaxo\Dashboard\Base\ChartPie |
| rex_dashboard_item_table | FriendsOfRedaxo\Dashboard\Base\Table |
| rex_dashboard_chart_colors | FriendsOfRedaxo\Dashboard\Traits\ChartColors |
| FriendsOfREDAXO\Dashboard\DashboardDemo | FriendsOfRedaxo\Dashboard\DemoItems\DashboardDemo |
| FriendsOfREDAXO\Dashboard\rex_dashboard_item | FriendsOfRedaxo\Dashboard\DemoItems\Info |
| FriendsOfREDAXO\Dashboard\DashboardItemDemoBigNumber | FriendsOfRedaxo\Dashboard\DemoItems\BigNumber |
| FriendsOfREDAXO\Dashboard\DashboardItemDemoChartBarHorizontal | FriendsOfRedaxo\Dashboard\DemoItems\ChartBarHorizontal |
| FriendsOfREDAXO\Dashboard\DashboardItemDemoChartBarVertical | FriendsOfRedaxo\Dashboard\DemoItems\ChartBarVertical |
| FriendsOfREDAXO\Dashboard\DashboardItemDemoChartLine | FriendsOfRedaxo\Dashboard\DemoItems\ChartLine |
| FriendsOfREDAXO\Dashboard\DashboardItemDemoChartPie | FriendsOfRedaxo\Dashboard\DemoItems\ChartPie |
| FriendsOfREDAXO\Dashboard\DashboardItemDemoTable | FriendsOfRedaxo\Dashboard\DemoItems\Table |
| FriendsOfREDAXO\Dashboard\DashboardDefault | FriendsOfRedaxo\Dashboard\DashboardDefault |
| FriendsOfREDAXO\Dashboard\DashboardItemAddonStatistics | FriendsOfRedaxo\Dashboard\Items\AddonStatistics |
| FriendsOfREDAXO\Dashboard\DashboardItemAddonUpdates | FriendsOfRedaxo\Dashboard\Items\AddonUpdates |
| FriendsOfREDAXO\Dashboard\DashboardItemArticleStatus | FriendsOfRedaxo\Dashboard\Items\ArticleStatus |
| FriendsOfREDAXO\Dashboard\DashboardItemBackupStatus | FriendsOfRedaxo\Dashboard\Items\BackupStatus |
| FriendsOfREDAXO\Dashboard\DashboardItemBigNumberDemo | FriendsOfRedaxo\Dashboard\Items\BigNumberDemo |
| FriendsOfREDAXO\Dashboard\DashboardItemClock | FriendsOfRedaxo\Dashboard\Items\Clock |
| FriendsOfREDAXO\Dashboard\DashboardItemCountdownDemo | FriendsOfRedaxo\Dashboard\Items\CountdownDemo |
| FriendsOfREDAXO\Dashboard\DashboardItemMediaStorage | FriendsOfRedaxo\Dashboard\Items\MediaStorage |
| FriendsOfREDAXO\Dashboard\DashboardItemNewArticles | FriendsOfRedaxo\Dashboard\Items\NewArticles |
| FriendsOfREDAXO\Dashboard\DashboardItemRecentArticles | FriendsOfRedaxo\Dashboard\Items\RecentArticles |
| FriendsOfREDAXO\Dashboard\DashboardItemRssClean | FriendsOfRedaxo\Dashboard\Items\RssClean |
| FriendsOfREDAXO\Dashboard\DashboardItemSystemStatus | FriendsOfRedaxo\Dashboard\Items\SystemStatus |
| FriendsOfREDAXO\Dashboard\DashboardItemUserActivity | FriendsOfRedaxo\Dashboard\Items\UserActivity |
| rex_api_dashboard_get | FriendsOfRedaxo\Dashboard\Api\Get |
| rex_api_dashboard_store | FriendsOfRedaxo\Dashboard\Api\Store |