0

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.

Developer
  • 25,073
  • 20
  • 81
  • 128

1 Answers1

0

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?

Community
  • 1
  • 1
Developer
  • 25,073
  • 20
  • 81
  • 128