From e5c4b0a36b5456d2a27ecda391d75e6f62134a52 Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Fri, 2 Mar 2012 17:10:47 +0100 Subject: [PATCH] ENHANCEMENT Hierarchy->Breadcrumbs() --- model/Hierarchy.php | 15 +++++++++++++++ tests/model/HierarchyTest.php | 11 +++++++++++ 2 files changed, 26 insertions(+) diff --git a/model/Hierarchy.php b/model/Hierarchy.php index daf80c745..5cdbe3751 100644 --- a/model/Hierarchy.php +++ b/model/Hierarchy.php @@ -605,6 +605,21 @@ class Hierarchy extends DataExtension { return $ancestors; } + + /** + * Returns a human-readable, flattened representation of the path to the object, + * using its {@link Title()} attribute. + * + * @param String + * @return String + */ + public function getBreadcrumbs($separator = ' » ') { + $crumbs = array(); + $ancestors = array_reverse($this->owner->getAncestors()->toArray()); + foreach($ancestors as $ancestor) $crumbs[] = $ancestor->Title; + $crumbs[] = $this->owner->Title; + return implode($separator, $crumbs); + } /** * Get the next node in the tree of the type. If there is no instance of the className descended from this node, diff --git a/tests/model/HierarchyTest.php b/tests/model/HierarchyTest.php index 5485a3bb4..2526b39b4 100644 --- a/tests/model/HierarchyTest.php +++ b/tests/model/HierarchyTest.php @@ -150,6 +150,17 @@ class HierarchyTest extends SapphireTest { $this->assertNotContains("Obj 2b", $children); } + function testBreadcrumbs() { + $obj1 = $this->objFromFixture('HierarchyTest_Object', 'obj1'); + $obj2 = $this->objFromFixture('HierarchyTest_Object', 'obj2'); + $obj2a = $this->objFromFixture('HierarchyTest_Object', 'obj2a'); + $obj2aa = $this->objFromFixture('HierarchyTest_Object', 'obj2aa'); + + $this->assertEquals('Obj 1', $obj1->getBreadcrumbs()); + $this->assertEquals('Obj 2 » Obj 2a', $obj2a->getBreadcrumbs()); + $this->assertEquals('Obj 2 » Obj 2a » Obj 2aa', $obj2aa->getBreadcrumbs()); + } + } class HierarchyTest_Object extends DataObject implements TestOnly {