Search code examples
zend-frameworkzend-navigation

How to add accesskey attribute in link using zend navigation


I want to add accesskey attribute in zend navigation.

$navArray = array(
            array(
            'title' => 'front',            
            'uri' => '/home',
            'label' => 'Home',
            'class' => 'a',
            'accesskey' => 'h'

            ),
            array(
            'title' => 'about us',
            'uri' => '/abousus',
            'label' => 'About US',
            'class' => 'b',
            'accesskey'=>'a'
            ));

In this issue it says, it has been fixed. but still it is not working, even I have download latest zf. Any Idea?

EDIT

Zend current release 1.11.10 do not accept the accesskey attribute in anchor tag. which it should. So I did my own implementation by extending the menu helper. I could have add accesskey property in Page.php by extending it. but i prefer to do quick fix and read the accesskey value from page array in menu helper. and I believe soon zendframework will add the support for accesskey in framework.


Solution

  • Here is the solution you need to extend helper and create your own implementation.

    class mylib_View_Helper_Navigation_MyMenu extends Zend_View_Helper_Navigation_Menu
    {
        public function myMenu(Zend_Navigation_Container $container = null)
        {
            return parent::menu($container);
        }  
    
        public function htmlify(Zend_Navigation_Page $page)
        {
           // get label and title for translating
            $label = $page->getLabel();
            $title = $page->getTitle();
    
            // translate label and title?
            if ($this->getUseTranslator() && $t = $this->getTranslator()) {
                if (is_string($label) && !empty($label)) {
                    $label = $t->translate($label);
                }
                if (is_string($title) && !empty($title)) {
                    $title = $t->translate($title);
                }
            }
    
            // get attribs for element
            $attribs = array(
                'id'     => $page->getId(),
                'title'  => $title,
                'class'  => $page->getClass()
            );
    
            // does page have a href?
            if ($href = $page->getHref()) {
                $element = 'a';
                $attribs['href'] = $href;
                $attribs['target'] = $page->getTarget();            
                $pageArray = $page->toArray();            
                if(array_key_exists('accesskey', $pageArray))
                    $attribs['accesskey'] = $pageArray["accesskey"];     
    
            } else {
                $element = 'span';
            }
    
            return '<' . $element . $this->_htmlAttribs($attribs) . '>'
                 . $this->view->escape($label)
                 . '</' . $element . '>';
        }
    
    
    }
    

    /// call it like this

    echo $this->navigation()->myMenu()
                                 ->setUlClass('footer_navigation')
                                 ->render($footerNavContainer);
    

    /// add helper path in bootstrap file

        protected function _initNavigation()
    {
        $this->bootstrap('view');                   
        $view = $this->getResource('view');        
         $view->addHelperPath(
          GLOBAL_LIBRARY_PATH . '/mylib/View/Helper/Navigation',
          'mylib_View_Helper_Navigation'
        );
    
    
    
    }
    

    Thanks to following people for clues

    Getting Zend_Navigation menu to work with jQuery's Fisheye

    zend_navigation and onclick attribute

    How do I extend the Zend Navigation Menu View Helper?