Skip to content

FriendsOfREDAXO/dashboard

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

62 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dashboard AddOn für REDAXO 5.x

Version 2.0.0 - Modernisiertes Dashboard mit Standard-Widgets

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.

✨ Neue Features in Version 2.0

🎯 Standard-Widgets für REDAXO Core-Funktionen

  • 📝 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

🛡️ Sicherheit und Berechtigungen

  • Benutzerrechte: Artikel-Widgets berücksichtigen REDAXO-Benutzerberechtigungen
  • Admin-Widgets: Sensitive Informationen nur für Administratoren sichtbar
  • Structure-Permissions: Integration mit rex_complex_perm('structure')

🎨 Verbessertes UI/UX

  • 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

🚀 Installation und Aktivierung

  1. AddOn installieren und aktivieren
  2. Als Administrator zu Dashboard > Konfiguration gehen
  3. "Default Widgets aktivieren" ankreuzen
  4. Gewünschte Widgets auswählen und Größen konfigurieren
  5. Für RSS-Widget: Feed-URL und Namen eingeben

📋 Verfügbare Standard-Widgets

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

⚙️ Konfiguration

Dashboard-Einstellungen

Ü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-Widget Konfiguration

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.

🔧 Entwickler-API

Für zukunftssichere Jedes Widget als eigene Datei im Lib-Verzeichnis eines Addons ablegen und dabei die NAmesapce-Empfehlungen einhalten

Eigene Widgets erstellen

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>';
    }
}

Widget registrieren

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
    );
}

Verfügbare Basis-Klassen

Die Basisklassen sind im Namespace FriendsOfRedaxo\Dashboard\Baseallokiert.

  • Item - Basis-Widget
  • ChartBar - Balkendiagramm
  • ChartLine - Liniendiagramm
  • ChartPie - Kreisdiagramm
  • Table - Tabellen-Widget

📊 Widget-Typen im Detail

Chart-Widgets

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
        ];
    }
}

Tabellen-Widgets

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']
            ]
        ];
    }
}

🔐 Berechtigungen und Sicherheit

Structure-Berechtigungen

Artikel-Widgets prüfen automatisch:

$user = rex::requireUser();
$structurePerm = $user->getComplexPerm('structure');
if ($structurePerm->hasCategoryPerm($categoryId)) {
    // User hat Zugriff auf diese Kategorie
}

Admin-Only Widgets

use FriendsOfRedaxo\Dashboard\Dashboard;

if (rex::getUser() && rex::getUser()->isAdmin()) {
    // Widget nur für Admins registrieren
    Dashboard::addItem(AdminWidget::factory('admin-widget', 'Admin Widget'));
}

🎛️ Erweiterte Features

Auto-Refresh

  • Dashboard refresht automatisch beim Laden (500ms Verzögerung)
  • Automatisches Refresh alle 5 Minuten
  • Manueller Refresh über Refresh-Button

GridStack Integration

  • Drag & Drop Positionierung
  • Automatische Größenanpassung
  • Benutzer-spezifische Layouts (je User individuell gespeichert)
  • Responsive Breakpoints

Multi-Language Support

  • Widgets passen sich automatisch an verfügbare Sprachen an
  • Sprachenspalten werden nur angezeigt wenn > 1 Sprache vorhanden

📱 Responsive Design

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

🔄 Migration von Version 1.x

Automatische Migration

  • Demo-Plugin wird automatisch aufgelöst
  • Bestehende Widget-Positionen bleiben erhalten
  • Neue Standard-Widgets werden deaktiviert hinzugefügt

Breaking Changes

  • Demo-Plugin entfernt (Funktionalität ins Core integriert)
  • Neue Konfigurationsstruktur
  • Widget-IDs geändert (dashboard-default-* Präfix)

🐛 Debugging

Debug-Modus

Im REDAXO Debug-Modus werden zusätzliche Informationen angezeigt:

  • Widget-Ladezeiten
  • Berechtigungsprüfungen
  • Cache-Status
  • JavaScript-Fehler

Log-Dateien

Fehler werden in REDAXO's System-Log geschrieben:

redaxo/data/log/system.log

🤝 Kompatibilität

  • REDAXO: >= 5.11.0
  • PHP: >= 7.4
  • Browser: Moderne Browser mit ES6-Support
  • Mobile: iOS Safari, Chrome Mobile, Firefox Mobile

📄 Lizenz

MIT License - siehe LICENSE-Datei

👥 Credits

📞 Support


Dashboard AddOn 2.0 - Modernes Dashboard für REDAXO 5.x mit Standard-Widgets, Sicherheitsfeatures und verbessertem UX.

Ein einfaches Info-Item (Text anzeigen)

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.';
    }
}

Ein Dashbord-Element: Balkendiagramm

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),
        ];
    }
}

Ein Dashbord-Element: Liniendiagramm

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,
            ]
        ];
    }
}

Ein Dashboard-Element: Tortendiagramm

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,
        ];
    }
}

Ein Dashboard-Element: Datentabelle

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,
        ];
    }
}

Anmeldung der eigenen Widgets

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
    );

);

Auswählen des Widgets im Dashboard

Sobald die Widgets angemeldet sind, können sie im Dashboard ausgewählt und angeordnet werden. Dazu klickt man im Widget auf Widget auswählen.

Umstellung auf Namespace

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

About

Ein REDAXO 5 Dashboard AddOn

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Contributors 5