From 4374317dd23debed0a6bb8c936905972f87fe3f6 Mon Sep 17 00:00:00 2001 From: Christophe Coevoet Date: Tue, 17 Apr 2012 22:54:57 +0200 Subject: [PATCH 1/5] Added a first implementation of a BreadcrumbRenderer --- src/Knp/Menu/Renderer/BreadcrumbRenderer.php | 142 +++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 src/Knp/Menu/Renderer/BreadcrumbRenderer.php diff --git a/src/Knp/Menu/Renderer/BreadcrumbRenderer.php b/src/Knp/Menu/Renderer/BreadcrumbRenderer.php new file mode 100644 index 00000000..4568066c --- /dev/null +++ b/src/Knp/Menu/Renderer/BreadcrumbRenderer.php @@ -0,0 +1,142 @@ +defaultOptions = array_merge(array( + 'additional_path' => null, + 'compressed' => false, + 'root_attributes' => array(), + ), $defaultOptions); + + parent::__construct($charset); + } + + /** + * Renders a menu with the specified renderer. + * + * @param \Knp\Menu\ItemInterface $item + * @param array $options + * @return string + */ + public function render(ItemInterface $item, array $options = array()) + { + $options = array_merge($this->defaultOptions, $options); + + $breadcrumb = $item->getBreadcrumbsArray($options['additional_path']); + + if (empty($breadcrumb)) { + return ''; + } + + return $this->renderBreadcrumb($breadcrumb, $options); + } + + /** + * Renders the breadcrumb + * + * @param array $breadcrumb + * @param array $options + * @return string + */ + protected function renderBreadcrumb(array $breadcrumb, array $options) + { + $html = $this->format('renderHtmlAttributes($options['root_attributes']).'>', 'ul', 0, $options); + $html .= $this->renderList($breadcrumb, $options); + $html .= $this->format('', 'ul', 0, $options); + + return $html; + } + + /** + * Renders the breadcrumb list + * + * @param array $breadcrumb + * @param array $options + * @return string + */ + protected function renderList(array $breadcrumb, array $options) + { + $html = ''; + foreach ($breadcrumb as $label => $uri) { + $html .= $this->renderItem($label, $uri, $options); + } + + return $html; + } + + /** + * @param string $label + * @param string $uri + * @param array $options + * @return string + */ + protected function renderItem($label, $uri, array $options) + { + // opening li tag + $html = $this->format('
  • ', 'li', 1, $options); + + // render the text/link inside the li tag + if (null === $uri) { + $content = $this->renderLabel($label, $options); + } else { + $content = sprintf('%s', $this->escape($uri), $this->renderLabel($label, $options)); + } + $html .= $this->format($content, 'link', 1, $options); + + // closing li tag + $html .= $this->format('
  • ', 'li', 1, $options); + + return $html; + } + + protected function renderLabel($label, array $options) + { + return $this->escape($label); + } + + /** + * If $this->renderCompressed is on, this will apply the necessary + * spacing and line-breaking so that the particular thing being rendered + * makes up its part in a fully-rendered and spaced menu. + * + * @param string $html The html to render in an (un)formatted way + * @param string $type The type [ul,link,li] of thing being rendered + * @param integer $level + * @param array $options + * @return string + */ + protected function format($html, $type, $level, array $options) + { + if ($options['compressed']) { + return $html; + } + + switch ($type) { + case 'ul': + case 'link': + $spacing = $level * 4; + break; + + case 'li': + $spacing = $level * 4 - 2; + break; + } + + return str_repeat(' ', $spacing).$html."\n"; + } +} From 7988016fc1b5de5de0d8169e60f35cdbd51e3c10 Mon Sep 17 00:00:00 2001 From: Christophe Coevoet Date: Thu, 17 May 2012 16:05:55 +0200 Subject: [PATCH 2/5] Updated the BreadcrumbRenderer for the new format, added options and tests --- src/Knp/Menu/Renderer/BreadcrumbRenderer.php | 36 ++++-- .../Tests/Renderer/BreadcrumbRendererTest.php | 115 ++++++++++++++++++ 2 files changed, 142 insertions(+), 9 deletions(-) create mode 100644 tests/Knp/Menu/Tests/Renderer/BreadcrumbRendererTest.php diff --git a/src/Knp/Menu/Renderer/BreadcrumbRenderer.php b/src/Knp/Menu/Renderer/BreadcrumbRenderer.php index 4568066c..a7aab600 100644 --- a/src/Knp/Menu/Renderer/BreadcrumbRenderer.php +++ b/src/Knp/Menu/Renderer/BreadcrumbRenderer.php @@ -2,7 +2,7 @@ namespace Knp\Menu\Renderer; -use \Knp\Menu\ItemInterface; +use Knp\Menu\ItemInterface; /** * Renders MenuItem tree as a breadcrumb @@ -18,8 +18,11 @@ class BreadcrumbRenderer extends Renderer implements RendererInterface public function __construct(array $defaultOptions = array(), $charset = null) { $this->defaultOptions = array_merge(array( + 'current_as_link' => true, + 'current_class' => 'current', 'additional_path' => null, 'compressed' => false, + 'allow_safe_labels' => false, 'root_attributes' => array(), ), $defaultOptions); @@ -72,8 +75,9 @@ protected function renderBreadcrumb(array $breadcrumb, array $options) protected function renderList(array $breadcrumb, array $options) { $html = ''; - foreach ($breadcrumb as $label => $uri) { - $html .= $this->renderItem($label, $uri, $options); + foreach ($breadcrumb as $element) { + $element = array_replace(array('label' => null, 'uri' => null, 'item' => null), $element); + $html .= $this->renderItem($element['label'], $element['uri'], $options, $element['item']); } return $html; @@ -83,18 +87,22 @@ protected function renderList(array $breadcrumb, array $options) * @param string $label * @param string $uri * @param array $options + * @param \Knp\Menu\ItemInterface|null $item * @return string */ - protected function renderItem($label, $uri, array $options) + protected function renderItem($label, $uri, array $options, ItemInterface $item = null) { + $isCurrent = null !== $item && $item->isCurrent(); + $attributes = $isCurrent ? array('class' => $options['current_class']) : array(); + // opening li tag - $html = $this->format('
  • ', 'li', 1, $options); + $html = $this->format('renderHtmlAttributes($attributes).'>', 'li', 1, $options); // render the text/link inside the li tag - if (null === $uri) { - $content = $this->renderLabel($label, $options); + if (null === $uri || ($isCurrent && !$options['current_as_link'])) { + $content = $this->renderLabel($label, $options, $item); } else { - $content = sprintf('%s', $this->escape($uri), $this->renderLabel($label, $options)); + $content = sprintf('%s', $this->escape($uri), $this->renderLabel($label, $options, $item)); } $html .= $this->format($content, 'link', 1, $options); @@ -104,8 +112,18 @@ protected function renderItem($label, $uri, array $options) return $html; } - protected function renderLabel($label, array $options) + /** + * @param string $label + * @param array $options + * @param \Knp\Menu\ItemInterface|null $item + * @return string + */ + protected function renderLabel($label, array $options, ItemInterface $item = null) { + if ($options['allow_safe_labels'] && null !== $item && $item->getExtra('safe_label', false)) { + return $item->getLabel(); + } + return $this->escape($label); } diff --git a/tests/Knp/Menu/Tests/Renderer/BreadcrumbRendererTest.php b/tests/Knp/Menu/Tests/Renderer/BreadcrumbRendererTest.php new file mode 100644 index 00000000..f01b5f24 --- /dev/null +++ b/tests/Knp/Menu/Tests/Renderer/BreadcrumbRendererTest.php @@ -0,0 +1,115 @@ + true)); + + $expected = '
    • Root li
    • Parent 1
    • Child 1
    '; + + $this->assertEquals($expected, $renderer->render($this->ch1)); + } + + public function testAdditionalPath() + { + $renderer = new BreadcrumbRenderer(array('compressed' => true)); + + $expected = '
    • Root li
    • Parent 1
    • Child 1
    • Foo
    '; + + $this->assertEquals($expected, $renderer->render($this->ch1, array('additional_path' => array('Foo' => 'http://example.com')))); + } + + public function testCurrentLink() + { + $this->pt1->setUri('foobar')->setCurrent(true); + + $renderer = new BreadcrumbRenderer(array('compressed' => true)); + + $expected = ''; + + $this->assertEquals($expected, $renderer->render($this->ch1)); + } + + public function testCurrentNoLink() + { + $this->pt1->setUri('foobar')->setCurrent(true); + + $renderer = new BreadcrumbRenderer(array('compressed' => true, 'current_as_link' => false)); + + $expected = '
    • Root li
    • Parent 1
    • Child 1
    '; + + $this->assertEquals($expected, $renderer->render($this->ch1)); + } + + public function testCurrentCustomClass() + { + $this->pt1->setCurrent(true); + + $renderer = new BreadcrumbRenderer(array('compressed' => true, 'current_class' => 'foo')); + + $expected = '
    • Root li
    • Parent 1
    • Child 1
    '; + + $this->assertEquals($expected, $renderer->render($this->ch1)); + } + + public function testEscapedLabel() + { + $this->pt1->setExtra('safe_label', true)->setLabel('Foo'); + + $renderer = new BreadcrumbRenderer(array('compressed' => true)); + + $expected = '
    • Root li
    • <strong>Foo</strong>
    • Child 1
    '; + + $this->assertEquals($expected, $renderer->render($this->ch1)); + } + + public function testUnsafeLabel() + { + $this->pt1->setLabel('Foo'); + + $renderer = new BreadcrumbRenderer(array('compressed' => true, 'allow_safe_labels' => true)); + + $expected = '
    • Root li
    • <strong>Foo</strong>
    • Child 1
    '; + + $this->assertEquals($expected, $renderer->render($this->ch1)); + } + + public function testSafeLabel() + { + $this->pt1->setExtra('safe_label', true)->setLabel('Foo'); + + $renderer = new BreadcrumbRenderer(array('compressed' => true, 'allow_safe_labels' => true)); + + $expected = '
    • Root li
    • Foo
    • Child 1
    '; + + $this->assertEquals($expected, $renderer->render($this->ch1)); + } + + public function testPrettyRendering() + { + $renderer = new BreadcrumbRenderer(); + + $rendered = << +
  • + Root li +
  • +
  • + Parent 1 +
  • +
  • + Child 1 +
  • + + +HTML; + + $this->assertEquals($rendered, $renderer->render($this->ch1)); + } +} From b5610c097dd63c30a36145d55d59af3e6802d3ad Mon Sep 17 00:00:00 2001 From: "Nek (Maxime Veber)" Date: Tue, 24 Jun 2014 14:33:53 +0200 Subject: [PATCH 3/5] Breadcrumbs renderer now uses menu manipulator --- src/Knp/Menu/Renderer/BreadcrumbRenderer.php | 46 ++++++++++--------- .../Tests/Renderer/BreadcrumbRendererTest.php | 19 ++++---- 2 files changed, 35 insertions(+), 30 deletions(-) diff --git a/src/Knp/Menu/Renderer/BreadcrumbRenderer.php b/src/Knp/Menu/Renderer/BreadcrumbRenderer.php index a7aab600..e323d5df 100644 --- a/src/Knp/Menu/Renderer/BreadcrumbRenderer.php +++ b/src/Knp/Menu/Renderer/BreadcrumbRenderer.php @@ -3,6 +3,7 @@ namespace Knp\Menu\Renderer; use Knp\Menu\ItemInterface; +use Knp\Menu\Util\MenuManipulator; /** * Renders MenuItem tree as a breadcrumb @@ -10,12 +11,14 @@ class BreadcrumbRenderer extends Renderer implements RendererInterface { private $defaultOptions; + private $itemManipulator; /** - * @param array $defaultOptions - * @param string $charset + * @param array $defaultOptions + * @param string $charset + * @param MenuManipulator $menuManipulator */ - public function __construct(array $defaultOptions = array(), $charset = null) + public function __construct(MenuManipulator $itemManipulator, array $defaultOptions = array(), $charset = null) { $this->defaultOptions = array_merge(array( 'current_as_link' => true, @@ -25,6 +28,7 @@ public function __construct(array $defaultOptions = array(), $charset = null) 'allow_safe_labels' => false, 'root_attributes' => array(), ), $defaultOptions); + $this->itemManipulator = $itemManipulator; parent::__construct($charset); } @@ -32,15 +36,15 @@ public function __construct(array $defaultOptions = array(), $charset = null) /** * Renders a menu with the specified renderer. * - * @param \Knp\Menu\ItemInterface $item - * @param array $options + * @param \Knp\Menu\ItemInterface $item + * @param array $options * @return string */ public function render(ItemInterface $item, array $options = array()) { $options = array_merge($this->defaultOptions, $options); - $breadcrumb = $item->getBreadcrumbsArray($options['additional_path']); + $breadcrumb = $this->itemManipulator->getBreadcrumbsArray($item, $options['additional_path']); if (empty($breadcrumb)) { return ''; @@ -52,8 +56,8 @@ public function render(ItemInterface $item, array $options = array()) /** * Renders the breadcrumb * - * @param array $breadcrumb - * @param array $options + * @param array $breadcrumb + * @param array $options * @return string */ protected function renderBreadcrumb(array $breadcrumb, array $options) @@ -68,8 +72,8 @@ protected function renderBreadcrumb(array $breadcrumb, array $options) /** * Renders the breadcrumb list * - * @param array $breadcrumb - * @param array $options + * @param array $breadcrumb + * @param array $options * @return string */ protected function renderList(array $breadcrumb, array $options) @@ -84,10 +88,10 @@ protected function renderList(array $breadcrumb, array $options) } /** - * @param string $label - * @param string $uri - * @param array $options - * @param \Knp\Menu\ItemInterface|null $item + * @param string $label + * @param string $uri + * @param array $options + * @param \Knp\Menu\ItemInterface|null $item * @return string */ protected function renderItem($label, $uri, array $options, ItemInterface $item = null) @@ -113,9 +117,9 @@ protected function renderItem($label, $uri, array $options, ItemInterface $item } /** - * @param string $label - * @param array $options - * @param \Knp\Menu\ItemInterface|null $item + * @param string $label + * @param array $options + * @param \Knp\Menu\ItemInterface|null $item * @return string */ protected function renderLabel($label, array $options, ItemInterface $item = null) @@ -132,10 +136,10 @@ protected function renderLabel($label, array $options, ItemInterface $item = nul * spacing and line-breaking so that the particular thing being rendered * makes up its part in a fully-rendered and spaced menu. * - * @param string $html The html to render in an (un)formatted way - * @param string $type The type [ul,link,li] of thing being rendered - * @param integer $level - * @param array $options + * @param string $html The html to render in an (un)formatted way + * @param string $type The type [ul,link,li] of thing being rendered + * @param integer $level + * @param array $options * @return string */ protected function format($html, $type, $level, array $options) diff --git a/tests/Knp/Menu/Tests/Renderer/BreadcrumbRendererTest.php b/tests/Knp/Menu/Tests/Renderer/BreadcrumbRendererTest.php index f01b5f24..7d32ee1a 100644 --- a/tests/Knp/Menu/Tests/Renderer/BreadcrumbRendererTest.php +++ b/tests/Knp/Menu/Tests/Renderer/BreadcrumbRendererTest.php @@ -4,12 +4,13 @@ use Knp\Menu\Renderer\BreadcrumbRenderer; use Knp\Menu\Tests\TestCase; +use Knp\Menu\Util\MenuManipulator; class BreadcrumbRendererTest extends TestCase { public function testBreadcrumbRendering() { - $renderer = new BreadcrumbRenderer(array('compressed' => true)); + $renderer = new BreadcrumbRenderer(new MenuManipulator, array('compressed' => true)); $expected = '
    • Root li
    • Parent 1
    • Child 1
    '; @@ -18,7 +19,7 @@ public function testBreadcrumbRendering() public function testAdditionalPath() { - $renderer = new BreadcrumbRenderer(array('compressed' => true)); + $renderer = new BreadcrumbRenderer(new MenuManipulator, array('compressed' => true)); $expected = '
    • Root li
    • Parent 1
    • Child 1
    • Foo
    '; @@ -29,7 +30,7 @@ public function testCurrentLink() { $this->pt1->setUri('foobar')->setCurrent(true); - $renderer = new BreadcrumbRenderer(array('compressed' => true)); + $renderer = new BreadcrumbRenderer(new MenuManipulator, array('compressed' => true)); $expected = ''; @@ -40,7 +41,7 @@ public function testCurrentNoLink() { $this->pt1->setUri('foobar')->setCurrent(true); - $renderer = new BreadcrumbRenderer(array('compressed' => true, 'current_as_link' => false)); + $renderer = new BreadcrumbRenderer(new MenuManipulator, array('compressed' => true, 'current_as_link' => false)); $expected = '
    • Root li
    • Parent 1
    • Child 1
    '; @@ -51,7 +52,7 @@ public function testCurrentCustomClass() { $this->pt1->setCurrent(true); - $renderer = new BreadcrumbRenderer(array('compressed' => true, 'current_class' => 'foo')); + $renderer = new BreadcrumbRenderer(new MenuManipulator, array('compressed' => true, 'current_class' => 'foo')); $expected = '
    • Root li
    • Parent 1
    • Child 1
    '; @@ -62,7 +63,7 @@ public function testEscapedLabel() { $this->pt1->setExtra('safe_label', true)->setLabel('Foo'); - $renderer = new BreadcrumbRenderer(array('compressed' => true)); + $renderer = new BreadcrumbRenderer(new MenuManipulator, array('compressed' => true)); $expected = '
    • Root li
    • <strong>Foo</strong>
    • Child 1
    '; @@ -73,7 +74,7 @@ public function testUnsafeLabel() { $this->pt1->setLabel('Foo'); - $renderer = new BreadcrumbRenderer(array('compressed' => true, 'allow_safe_labels' => true)); + $renderer = new BreadcrumbRenderer(new MenuManipulator, array('compressed' => true, 'allow_safe_labels' => true)); $expected = '
    • Root li
    • <strong>Foo</strong>
    • Child 1
    '; @@ -84,7 +85,7 @@ public function testSafeLabel() { $this->pt1->setExtra('safe_label', true)->setLabel('Foo'); - $renderer = new BreadcrumbRenderer(array('compressed' => true, 'allow_safe_labels' => true)); + $renderer = new BreadcrumbRenderer(new MenuManipulator, array('compressed' => true, 'allow_safe_labels' => true)); $expected = '
    • Root li
    • Foo
    • Child 1
    '; @@ -93,7 +94,7 @@ public function testSafeLabel() public function testPrettyRendering() { - $renderer = new BreadcrumbRenderer(); + $renderer = new BreadcrumbRenderer(new MenuManipulator); $rendered = << From 4ed5d82fac03bd0384c4010f66be7b25e790ff74 Mon Sep 17 00:00:00 2001 From: "Nek (Maxime Veber)" Date: Tue, 24 Jun 2014 15:12:47 +0200 Subject: [PATCH 4/5] Fixed documentation --- src/Knp/Menu/Renderer/BreadcrumbRenderer.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Knp/Menu/Renderer/BreadcrumbRenderer.php b/src/Knp/Menu/Renderer/BreadcrumbRenderer.php index e323d5df..5422f96d 100644 --- a/src/Knp/Menu/Renderer/BreadcrumbRenderer.php +++ b/src/Knp/Menu/Renderer/BreadcrumbRenderer.php @@ -36,8 +36,8 @@ public function __construct(MenuManipulator $itemManipulator, array $defaultOpti /** * Renders a menu with the specified renderer. * - * @param \Knp\Menu\ItemInterface $item - * @param array $options + * @param ItemInterface $item + * @param array $options * @return string */ public function render(ItemInterface $item, array $options = array()) @@ -88,10 +88,10 @@ protected function renderList(array $breadcrumb, array $options) } /** - * @param string $label - * @param string $uri - * @param array $options - * @param \Knp\Menu\ItemInterface|null $item + * @param string $label + * @param string $uri + * @param array $options + * @param ItemInterface|null $item * @return string */ protected function renderItem($label, $uri, array $options, ItemInterface $item = null) @@ -117,9 +117,9 @@ protected function renderItem($label, $uri, array $options, ItemInterface $item } /** - * @param string $label - * @param array $options - * @param \Knp\Menu\ItemInterface|null $item + * @param string $label + * @param array $options + * @param ItemInterface|null $item * @return string */ protected function renderLabel($label, array $options, ItemInterface $item = null) From 219add0a71e4c70f9f928d809a242c0ffa92ab86 Mon Sep 17 00:00:00 2001 From: "Nek (Maxime Veber)" Date: Tue, 24 Jun 2014 16:45:17 +0200 Subject: [PATCH 5/5] Added base Renderer in order to have a set of basic options for renderers --- src/Knp/Menu/Renderer/BaseRenderer.php | 30 +++++++++++++++++++ src/Knp/Menu/Renderer/BreadcrumbRenderer.php | 15 ++++------ src/Knp/Menu/Renderer/ListRenderer.php | 21 ++----------- src/Knp/Menu/Renderer/Renderer.php | 6 ++-- src/Knp/Menu/Renderer/TwigRenderer.php | 22 ++++---------- .../Tests/Renderer/BreadcrumbRendererTest.php | 4 +-- 6 files changed, 50 insertions(+), 48 deletions(-) create mode 100644 src/Knp/Menu/Renderer/BaseRenderer.php diff --git a/src/Knp/Menu/Renderer/BaseRenderer.php b/src/Knp/Menu/Renderer/BaseRenderer.php new file mode 100644 index 00000000..96a0d7aa --- /dev/null +++ b/src/Knp/Menu/Renderer/BaseRenderer.php @@ -0,0 +1,30 @@ +defaultOptions = array_merge(array( + 'depth' => null, + 'matchingDepth' => null, + 'currentAsLink' => true, + 'currentClass' => 'current', + 'ancestorClass' => 'current_ancestor', + 'firstClass' => 'first', + 'lastClass' => 'last', + 'compressed' => false, + 'allow_safe_labels' => false, + 'clear_matcher' => true, + 'leaf_class' => null, + 'branch_class' => null, + ), $defaultOptions); + } + + public abstract function render(ItemInterface $item, array $options = array()); +} diff --git a/src/Knp/Menu/Renderer/BreadcrumbRenderer.php b/src/Knp/Menu/Renderer/BreadcrumbRenderer.php index 5422f96d..4a87b3e6 100644 --- a/src/Knp/Menu/Renderer/BreadcrumbRenderer.php +++ b/src/Knp/Menu/Renderer/BreadcrumbRenderer.php @@ -10,7 +10,6 @@ */ class BreadcrumbRenderer extends Renderer implements RendererInterface { - private $defaultOptions; private $itemManipulator; /** @@ -20,17 +19,13 @@ class BreadcrumbRenderer extends Renderer implements RendererInterface */ public function __construct(MenuManipulator $itemManipulator, array $defaultOptions = array(), $charset = null) { - $this->defaultOptions = array_merge(array( - 'current_as_link' => true, - 'current_class' => 'current', + $this->itemManipulator = $itemManipulator; + $defaultOptions = array_merge(array( 'additional_path' => null, - 'compressed' => false, - 'allow_safe_labels' => false, 'root_attributes' => array(), ), $defaultOptions); - $this->itemManipulator = $itemManipulator; - parent::__construct($charset); + parent::__construct($defaultOptions, $charset); } /** @@ -97,13 +92,13 @@ protected function renderList(array $breadcrumb, array $options) protected function renderItem($label, $uri, array $options, ItemInterface $item = null) { $isCurrent = null !== $item && $item->isCurrent(); - $attributes = $isCurrent ? array('class' => $options['current_class']) : array(); + $attributes = $isCurrent ? array('class' => $options['currentClass']) : array(); // opening li tag $html = $this->format('renderHtmlAttributes($attributes).'>', 'li', 1, $options); // render the text/link inside the li tag - if (null === $uri || ($isCurrent && !$options['current_as_link'])) { + if (null === $uri || ($isCurrent && !$options['currentAsLink'])) { $content = $this->renderLabel($label, $options, $item); } else { $content = sprintf('%s', $this->escape($uri), $this->renderLabel($label, $options, $item)); diff --git a/src/Knp/Menu/Renderer/ListRenderer.php b/src/Knp/Menu/Renderer/ListRenderer.php index 4d7db5d0..5e355b6b 100644 --- a/src/Knp/Menu/Renderer/ListRenderer.php +++ b/src/Knp/Menu/Renderer/ListRenderer.php @@ -8,10 +8,9 @@ /** * Renders MenuItem tree as unordered list */ -class ListRenderer extends Renderer implements RendererInterface +class ListRenderer extends Renderer { protected $matcher; - protected $defaultOptions; /** * @param MatcherInterface $matcher @@ -21,22 +20,8 @@ class ListRenderer extends Renderer implements RendererInterface public function __construct(MatcherInterface $matcher, array $defaultOptions = array(), $charset = null) { $this->matcher = $matcher; - $this->defaultOptions = array_merge(array( - 'depth' => null, - 'matchingDepth' => null, - 'currentAsLink' => true, - 'currentClass' => 'current', - 'ancestorClass' => 'current_ancestor', - 'firstClass' => 'first', - 'lastClass' => 'last', - 'compressed' => false, - 'allow_safe_labels' => false, - 'clear_matcher' => true, - 'leaf_class' => null, - 'branch_class' => null, - ), $defaultOptions); - - parent::__construct($charset); + + parent::__construct($defaultOptions, $charset); } public function render(ItemInterface $item, array $options = array()) diff --git a/src/Knp/Menu/Renderer/Renderer.php b/src/Knp/Menu/Renderer/Renderer.php index a82de569..c30daa2e 100644 --- a/src/Knp/Menu/Renderer/Renderer.php +++ b/src/Knp/Menu/Renderer/Renderer.php @@ -6,18 +6,20 @@ define('ENT_SUBSTITUTE', 8); } -abstract class Renderer +abstract class Renderer extends BaseRenderer { protected $charset = 'UTF-8'; /** * @param string $charset */ - public function __construct($charset = null) + public function __construct($defaultOptions = array(), $charset = null) { if (null !== $charset) { $this->charset = (string) $charset; } + + parent::__construct($defaultOptions); } /** diff --git a/src/Knp/Menu/Renderer/TwigRenderer.php b/src/Knp/Menu/Renderer/TwigRenderer.php index 4d379f05..60b7a03f 100644 --- a/src/Knp/Menu/Renderer/TwigRenderer.php +++ b/src/Knp/Menu/Renderer/TwigRenderer.php @@ -5,14 +5,13 @@ use Knp\Menu\ItemInterface; use Knp\Menu\Matcher\MatcherInterface; -class TwigRenderer implements RendererInterface +class TwigRenderer extends BaseRenderer { /** * @var \Twig_Environment */ private $environment; private $matcher; - private $defaultOptions; /** * @param \Twig_Environment $environment @@ -24,21 +23,12 @@ public function __construct(\Twig_Environment $environment, $template, MatcherIn { $this->environment = $environment; $this->matcher = $matcher; - $this->defaultOptions = array_merge(array( - 'depth' => null, - 'matchingDepth' => null, - 'currentAsLink' => true, - 'currentClass' => 'current', - 'ancestorClass' => 'current_ancestor', - 'firstClass' => 'first', - 'lastClass' => 'last', - 'template' => $template, - 'compressed' => false, - 'allow_safe_labels' => false, - 'clear_matcher' => true, - 'leaf_class' => null, - 'branch_class' => null, + + $defaultOptions = array_merge(array( + 'template' => $template ), $defaultOptions); + + parent::__construct($defaultOptions); } public function render(ItemInterface $item, array $options = array()) diff --git a/tests/Knp/Menu/Tests/Renderer/BreadcrumbRendererTest.php b/tests/Knp/Menu/Tests/Renderer/BreadcrumbRendererTest.php index 7d32ee1a..8d75b2cf 100644 --- a/tests/Knp/Menu/Tests/Renderer/BreadcrumbRendererTest.php +++ b/tests/Knp/Menu/Tests/Renderer/BreadcrumbRendererTest.php @@ -41,7 +41,7 @@ public function testCurrentNoLink() { $this->pt1->setUri('foobar')->setCurrent(true); - $renderer = new BreadcrumbRenderer(new MenuManipulator, array('compressed' => true, 'current_as_link' => false)); + $renderer = new BreadcrumbRenderer(new MenuManipulator, array('compressed' => true, 'currentAsLink' => false)); $expected = '
    • Root li
    • Parent 1
    • Child 1
    '; @@ -52,7 +52,7 @@ public function testCurrentCustomClass() { $this->pt1->setCurrent(true); - $renderer = new BreadcrumbRenderer(new MenuManipulator, array('compressed' => true, 'current_class' => 'foo')); + $renderer = new BreadcrumbRenderer(new MenuManipulator, array('compressed' => true, 'currentClass' => 'foo')); $expected = '
    • Root li
    • Parent 1
    • Child 1
    ';