Search by

manuxi / sulu-dashboard-bundle

manuxi

Dashboard for the Sulu 3 admin: start page with tiles, plus a small interface for other bundles and projects to add their own tiles

Package info

github.com/manuxi/SuluDashboardBundle

Type:symfony-bundle

pkg:composer/manuxi/sulu-dashboard-bundle

Statistics

Installs: 10

Dependents: 1

Suggesters: 2

Stars: 0

Open Issues: 0

v1.1.0 2026-11-14 03:13 UTC

This package is auto-updated.

Last update: 2026-11-14 03:28:03 UTC


README

ci workflow License: MIT GitHub Tag Supports Sulu 3.0 or later

๐Ÿ‡ฉ๐Ÿ‡ช German Version

The SuluDashboardBundle gives the Sulu 3 admin a start page. Instead of an empty area, editors see what is left to do (open drafts), what happened lately, how complete the translations are and how much content there is.

The page is built only from the components of Sulu (toolbar with language select, grid, cards, tables, publish indicator). Other bundles and projects add their own tiles with a small PHP class, without JavaScript.

The dashboard

The screenshots show the German admin.

Every user can arrange the tiles to their liking. In customize mode a tile can be moved, hidden or reset to the default:

The dashboard in customize mode

โœจ Features

  • Open drafts - Pages and articles that are not live as edited, sortable, filter by type and "Only mine", pen button to the form
  • Figures - Pages, articles, snippets and media, split by publish state with Sulu's publish indicator
  • Translations - Missing and outdated translations per language, with a list of what is missing
  • Recent activity - From Sulu's activity API
  • Customize - Every user can arrange, hide and reset tiles; the columns balance themselves until then
  • Permissions - Own permission for the dashboard; every tile respects the permissions of the content and its own security context
  • Tile interface - DashboardWidgetInterface, display types number, progress, list, bars and custom (own React component)
  • Tabs - Bundles can add a whole page as a tab (DashboardTabProviderInterface); with amoifr/sulu-log-stats-bundle the dashboard gets the tab "Visitors" and a tile. The visitor statistics come from the bundle amoifr/sulu-log-stats-bundle by Amoifr. Thank you for such a lean bundle that keeps data to a minimum.
  • Errors stay in their tile - Every tile loads its data on its own

๐Ÿ“‹ Prerequisites

  • PHP 8.2 or higher
  • Sulu CMS 3.0 or higher
  • Symfony 6.4 or higher

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿญ Installation

Step 1: Install the package

composer require manuxi/sulu-dashboard-bundle

Without Symfony Flex, add the bundle to config/bundles.php:

return [
    //...
    Manuxi\SuluDashboardBundle\SuluDashboardBundle::class => ['all' => true],
];

Step 2: Configure routes

Add to config/routes_admin.yaml:

SuluDashboardBundle:
    resource: '@SuluDashboardBundle/Resources/config/routes_admin.yaml'

Step 3: Admin JavaScript

In assets/admin/package.json:

"sulu-dashboard-bundle": "file:../../vendor/manuxi/sulu-dashboard-bundle/src/Resources/js"

In assets/admin/app.js:

import 'sulu-dashboard-bundle';

Then build the admin (npm install, npm run build in assets/admin) and clear the cache.

Step 4: Grant permissions

  1. Go to Sulu Admin โ†’ Settings โ†’ User Roles
  2. Find the role, open the group Settings
  3. Enable "view" for sulu.settings.dashboard
  4. Reload the page

The dashboard has no database tables.

๐ŸŽฃ Usage

After the login the admin opens the dashboard; the first menu item Dashboard leads back to it. The language select in the toolbar sets the content language of the tiles.

Check what a user sees without logging in:

php bin/console sulu:dashboard:dump --user=admin --locale=en

Your own tile

final class ProjectsWidget implements DashboardWidgetInterface
{
    // getKey(), getTitle(), getType(), getSecurityContext(), getColumn(), getPriority() ...

    public function getData(string $locale): array
    {
        return ['value' => $this->projects->count()];
    }
}

With autoconfigure the class is found automatically. More: Your own tile in 5 minutes, including an optional dependency for other bundles.

๐Ÿงถ Configuration

# config/packages/sulu_dashboard.yaml
sulu_dashboard:
    start_page: true       # true: dashboard on "/", Sulu's search moves to "/search"; false: dashboard on "/dashboard", search stays on "/"
    tabs:
        replace_navigation: true   # a tab may replace a menu item of another bundle (the statistics of the log statistics)
    layout:
        balance: true      # after loading, move tiles from the end of the longer column into the shorter one (once); false: tiles stay in their column
    disabled_widgets: []   # keys of tiles that are not shown, e.g. ['sulu_activities']

Sulu's search and the dashboard both want the path /. The router of the admin takes the first matching view, so with start_page: true the dashboard moves the search view sulu_search.search to /search (its name, menu item and links stay the same).

๐Ÿ“– Documentation

๐Ÿ‘ฉโ€๐Ÿณ Contributing

Contributions are welcome! Please create issues or pull requests.

๐Ÿ“ License

This bundle is licensed under the MIT License. See LICENSE.

๐ŸŽ‰ Credits

Created and maintained by manuxi.

Thanks to the Sulu team for the great CMS and fantastic support!