From 0522f50bf4baf2320fef5ca144a051fa201cc3d1 Mon Sep 17 00:00:00 2001 From: Larry Barker Date: Mon, 30 Mar 2020 12:49:03 -0500 Subject: [PATCH] Add support for non-numeric menu counter values (#4661) Documented in https://github.com/octobercms/docs/pull/447 --- modules/backend/classes/MainMenuItem.php | 6 ++++++ modules/backend/classes/NavigationManager.php | 13 +++++++++++++ modules/backend/classes/SideMenuItem.php | 6 ++++++ 3 files changed, 25 insertions(+) diff --git a/modules/backend/classes/MainMenuItem.php b/modules/backend/classes/MainMenuItem.php index 2f1431ef8..7c1d1a7b9 100644 --- a/modules/backend/classes/MainMenuItem.php +++ b/modules/backend/classes/MainMenuItem.php @@ -44,6 +44,11 @@ class MainMenuItem */ public $counterLabel; + /** + * @var null|string + */ + public $badge; + /** * @var string */ @@ -118,6 +123,7 @@ class MainMenuItem $instance->iconSvg = $data['iconSvg'] ?? null; $instance->counter = $data['counter'] ?? null; $instance->counterLabel = $data['counterLabel'] ?? null; + $instance->badge = $data['badge'] ?? null; $instance->permissions = $data['permissions'] ?? $instance->permissions; $instance->order = $data['order'] ?? $instance->order; return $instance; diff --git a/modules/backend/classes/NavigationManager.php b/modules/backend/classes/NavigationManager.php index 441684e5c..4fb31c9aa 100644 --- a/modules/backend/classes/NavigationManager.php +++ b/modules/backend/classes/NavigationManager.php @@ -175,6 +175,8 @@ class NavigationManager * - counter - an optional numeric value to output near the menu icon. The value should be * a number or a callable returning a number. * - counterLabel - an optional string value to describe the numeric reference in counter. + * - badge - an optional string value to output near the menu icon. The value should be + * a string. This value will override the counter if set. * @param string $owner Specifies the menu items owner plugin or module in the format Author.Plugin. * @param array $definitions An array of the menu item definitions. * @throws SystemException @@ -349,6 +351,10 @@ class NavigationManager } foreach ($this->items as $item) { + if ($item->badge) { + $item->counter = (string) $item->badge; + continue; + } if ($item->counter === false) { continue; } @@ -360,6 +366,9 @@ class NavigationManager } elseif (!empty($sideItems = $this->listSideMenuItems($item->owner, $item->code))) { $item->counter = 0; foreach ($sideItems as $sideItem) { + if ($sideItem->badge) { + continue; + } $item->counter += $sideItem->counter; } } @@ -402,6 +411,10 @@ class NavigationManager $items = $activeItem->sideMenu; foreach ($items as $item) { + if ($item->badge) { + $item->counter = (string) $item->badge; + continue; + } if ($item->counter !== null && is_callable($item->counter)) { $item->counter = call_user_func($item->counter, $item); if (empty($item->counter)) { diff --git a/modules/backend/classes/SideMenuItem.php b/modules/backend/classes/SideMenuItem.php index e0d1a23ad..27ec84e7f 100644 --- a/modules/backend/classes/SideMenuItem.php +++ b/modules/backend/classes/SideMenuItem.php @@ -47,6 +47,11 @@ class SideMenuItem */ public $counterLabel; + /** + * @var null|string + */ + public $badge; + /** * @var int */ @@ -110,6 +115,7 @@ class SideMenuItem $instance->counter = $data['counter'] ?? null; $instance->counterLabel = $data['counterLabel'] ?? null; $instance->attributes = $data['attributes'] ?? $instance->attributes; + $instance->badge = $data['badge'] ?? null; $instance->permissions = $data['permissions'] ?? $instance->permissions; $instance->order = $data['order'] ?? $instance->order; return $instance;