Bläddra i källkod

ZF-6854: Switch to make invisible Elements visible for Breadcrumb

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@15838 44c647ce-9c0f-0410-b52a-842ac1e357ba
norm2782 16 år sedan
förälder
incheckning
5dc876a26d

+ 16 - 0
library/Zend/View/Helper/Navigation/Helper.php

@@ -125,6 +125,22 @@ interface Zend_View_Helper_Navigation_Helper
      * @return bool  whether ACL should be used
      */
     public function getUseAcl();
+    
+    /**
+     * Return renderInvisible flag
+     *
+     * @return bool
+     */
+    public function getRenderInvisible();
+
+    /**
+     * Render invisible items?
+     *
+     * @param  bool $renderInvisible                       [optional] boolean flag
+     * @return Zend_View_Helper_Navigation_HelperAbstract  fluent interface
+     *                                                     returns self
+     */
+    public function setRenderInvisible($renderInvisible = true);
 
     /**
      * Sets whether translator should be used

+ 31 - 1
library/Zend/View/Helper/Navigation/HelperAbstract.php

@@ -85,6 +85,13 @@ abstract class Zend_View_Helper_Navigation_HelperAbstract
     protected $_acl;
 
     /**
+     * Wheter invisible items should be rendered by this helper
+     *
+     * @var bool
+     */
+    protected $_renderInvisible = false;
+
+    /**
      * ACL role to use when iterating pages
      *
      * @var string|Zend_Acl_Role_Interface
@@ -424,6 +431,29 @@ abstract class Zend_View_Helper_Navigation_HelperAbstract
     }
 
     /**
+     * Return renderInvisible flag
+     *
+     * @return bool
+     */
+    public function getRenderInvisible()
+    {
+        return $this->_renderInvisible;
+    }
+
+    /**
+     * Render invisible items?
+     *
+     * @param  bool $renderInvisible                       [optional] boolean flag
+     * @return Zend_View_Helper_Navigation_HelperAbstract  fluent interface
+     *                                                     returns self
+     */
+    public function setRenderInvisible($renderInvisible = true)
+    {
+        $this->_renderInvisible = (bool) $renderInvisible;
+        return $this;
+    }
+
+    /**
      * Sets whether translator should be used
      *
      * Implements {@link Zend_View_Helper_Navigation_Helper::setUseTranslator()}.
@@ -675,7 +705,7 @@ abstract class Zend_View_Helper_Navigation_HelperAbstract
         // accept by default
         $accept = true;
 
-        if (!$page->isVisible(false)) {
+        if (!$page->isVisible(false) && !$this->getRenderInvisible()) {
             // don't accept invisible pages
             $accept = false;
         } elseif ($this->getUseAcl() && !$this->_acceptAcl($page)) {

+ 30 - 0
tests/Zend/View/Helper/Navigation/NavigationTest.php

@@ -351,4 +351,34 @@ class Zend_View_Helper_Navigation_NavigationTest
 
         $this->assertEquals($expected, $actual);
     }
+
+    /**
+     * @group ZF-6854
+     */
+    public function testRenderInvisibleItem()
+    {
+        $container = new Zend_Navigation(array(
+            array(
+                'label' => 'Page 1',
+                'id'    => 'p1',
+                'uri'   => 'p1'
+            ),
+            array(
+                'label'   => 'Page 2',
+                'id'      => 'p2',
+                'uri'     => 'p2',
+                'visible' => false
+            )
+        ));
+
+        $render = $this->_helper->menu()->render($container);
+
+        $this->assertFalse(strpos($render, 'p2'));
+
+        $this->_helper->menu()->setRenderInvisible();
+
+        $render = $this->_helper->menu()->render($container);
+
+        $this->assertTrue(strpos($render, 'p2') !== false);
+    }
 }