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