diff --git a/code/model/SiteTree.php b/code/model/SiteTree.php index 14c39e22..cdf05623 100644 --- a/code/model/SiteTree.php +++ b/code/model/SiteTree.php @@ -154,13 +154,6 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid "Versioned('Stage', 'Live')", ); - /** - * Delimit breadcrumb-links generated by BreadCrumbs() - * - * @var string - */ - public static $breadcrumbs_delimiter = " » "; - /** * Whether or not to write the homepage map for static publisher */ @@ -625,24 +618,25 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid */ public function Breadcrumbs($maxDepth = 20, $unlinked = false, $stopAtPageType = false, $showHidden = false) { $page = $this; - $parts = array(); - $i = 0; + $pages = array(); + while( $page - && (!$maxDepth || sizeof($parts) < $maxDepth) + && (!$maxDepth || count($pages) < $maxDepth) && (!$stopAtPageType || $page->ClassName != $stopAtPageType) ) { if($showHidden || $page->ShowInMenus || ($page->ID == $this->ID)) { - if(($page->ID == $this->ID) || $unlinked) { - $parts[] = Convert::raw2xml($page->Title); - } else { - $parts[] = ("Link() . "\">" . Convert::raw2xml($page->Title) . ""); - } + $pages[] = $page; } + $page = $page->Parent; } - - return implode(self::$breadcrumbs_delimiter, array_reverse($parts)); + + $template = new SSViewer('BreadcrumbsTemplate'); + + return $template->process($this->customise(new ArrayData(array( + 'Pages' => new ArrayList(array_reverse($pages)) + )))); } /** diff --git a/templates/BreadcrumbsTemplate.ss b/templates/BreadcrumbsTemplate.ss new file mode 100644 index 00000000..d18be08c --- /dev/null +++ b/templates/BreadcrumbsTemplate.ss @@ -0,0 +1,5 @@ +<% if Pages %> + <% control Pages %> + <% if Last %>$Title.XML<% else %>$MenuTitle.XML »<% end_if %> + <% end_control %> +<% end_if %> \ No newline at end of file