From 9350b4a425ac4ab714eec322972aa44e1131e919 Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Thu, 24 Aug 2017 17:09:34 +1200 Subject: [PATCH] BUG Fix inconsistent breadcrumbs in CMS section Fixes #1867 --- code/Controllers/CMSMain.php | 46 +++++++++++++++++-- code/Controllers/CMSPageHistoryController.php | 7 --- .../Controllers/CMSPageSettingsController.php | 9 +--- .../Controllers/Includes/CMSMain_Content.ss | 8 ++-- 4 files changed, 47 insertions(+), 23 deletions(-) diff --git a/code/Controllers/CMSMain.php b/code/Controllers/CMSMain.php index 551bc87d..af5466e6 100644 --- a/code/Controllers/CMSMain.php +++ b/code/Controllers/CMSMain.php @@ -920,18 +920,54 @@ class CMSMain extends LeftAndMain implements CurrentPageIdentifier, PermissionPr return $this->getsubtree($this->getRequest()); } + /** + * Get "back" url for breadcrumbs + * + * @return string + */ + public function getBreadcrumbsBackLink() + { + $breadcrumbs = $this->Breadcrumbs(); + if ($breadcrumbs->count() < 2) { + return $this->LinkPages(); + } + // Get second from end breadcrumb + return $breadcrumbs + ->offsetGet($breadcrumbs->count() - 2) + ->Link; + } + /** * @param bool $unlinked * @return ArrayList */ public function Breadcrumbs($unlinked = false) { - $items = parent::Breadcrumbs($unlinked); + $items = new ArrayList(); - if ($items->count() > 1) { - // Specific to the SiteTree admin section, we never show the cms section and current - // page in the same breadcrumbs block. - $items->shift(); + // Check if we are editing a page + /** @var SiteTree $record */ + $record = $this->currentPage(); + if (!$record) { + $items->push(new ArrayData(array( + 'Title' => CMSPagesController::menu_title(), + 'Link' => ($unlinked) ? false : $this->LinkPages() + ))); + return $items; + } + + // Add all ancestors + $ancestors = $record->getAncestors(); + $ancestors = new ArrayList(array_reverse($ancestors->toArray())); + $ancestors->push($record); + /** @var SiteTree $ancestor */ + foreach ($ancestors as $ancestor) { + $items->push(new ArrayData(array( + 'Title' => $ancestor->getMenuTitle(), + 'Link' => ($unlinked) + ? false + : $ancestor->CMSEditLink() + ))); } return $items; diff --git a/code/Controllers/CMSPageHistoryController.php b/code/Controllers/CMSPageHistoryController.php index ed6a78d5..be8789ca 100644 --- a/code/Controllers/CMSPageHistoryController.php +++ b/code/Controllers/CMSPageHistoryController.php @@ -418,13 +418,6 @@ class CMSPageHistoryController extends CMSMain return $form; } - public function Breadcrumbs($unlinked = false) - { - $crumbs = parent::Breadcrumbs($unlinked); - $crumbs[0]->Title = _t('SilverStripe\\CMS\\Controllers\\CMSPagesController.MENUTITLE', 'Pages'); - return $crumbs; - } - /** * Replace all data fields with HTML readonly fields to display diff * diff --git a/code/Controllers/CMSPageSettingsController.php b/code/Controllers/CMSPageSettingsController.php index 9621d279..1450a333 100644 --- a/code/Controllers/CMSPageSettingsController.php +++ b/code/Controllers/CMSPageSettingsController.php @@ -2,6 +2,8 @@ namespace SilverStripe\CMS\Controllers; +use SilverStripe\View\ArrayData; + class CMSPageSettingsController extends CMSMain { @@ -20,13 +22,6 @@ class CMSPageSettingsController extends CMSMain return parent::getEditForm($id, ($record) ? $record->getSettingsFields() : null); } - public function Breadcrumbs($unlinked = false) - { - $crumbs = parent::Breadcrumbs($unlinked); - $crumbs[0]->Title = _t('SilverStripe\\CMS\\Controllers\\CMSPagesController.MENUTITLE', 'Pages'); - return $crumbs; - } - public function getTabIdentifier() { return 'settings'; diff --git a/templates/SilverStripe/CMS/Controllers/Includes/CMSMain_Content.ss b/templates/SilverStripe/CMS/Controllers/Includes/CMSMain_Content.ss index 423bc445..5091f6a2 100644 --- a/templates/SilverStripe/CMS/Controllers/Includes/CMSMain_Content.ss +++ b/templates/SilverStripe/CMS/Controllers/Includes/CMSMain_Content.ss @@ -5,24 +5,24 @@