- 2012/04/04

Have you ever met the condition where you want to inject html code to Zend_Navigation menu ? Yes, take a look at picture below :

nav custom

Of course you can accomplish that in several ways, but this is my way to inject html tag without having to create custom view to render navigation menu.

  • Add “extra tags” to navigation application resource config
  • Create view helper to convert “extra tags”

Here is the break down :

Add “extra tags” To Navigation Application Resource Config

return array(
    'pages' => array(
        'index' => array(
            'label'     => '{{i class=||icon-home||}}{{/i}}siMukti.NET',
            'route'     => 'default',
            'order'     => '-100',
            'visible'   => true,
            'id'        => 'index'
        'blog' => array(
            'label'     => '{{i class=||icon-th-list||}}{{/i}}Blog',
            'route'     => 'blog-index',
            'visible'   => true,
            'id'        => 'blog'
        'about' => array(
            'label'     => '{{i class=||icon-info-sign||}}{{/i}}About Me',
            'route'     => 'about-index',
            'visible'   => true,
            'id'        => 'about',

I choose to use characters that will not escaped by default in “extra tags”.

Create View Helper To Convert “extra tags”

Lets say that I create Iconify view helper class to convert these “extra tags”

 * Description of Iconify
 * @author Sarjono Mukti Aji <[email protected]>
use \Zend_View_Helper_Abstract as HelperAbstract;
class View_Helper_Iconify extends HelperAbstract
    public function iconify($string)
        if(is_string($string)) {
            $string = str_replace(array('{{', '}}', '||'), array('<','>', '"'), $string);
        return $string;

What’s Next ?

Just simply call iconify view helper to render zend navigation menu in layout script.

    echo $this->iconify($this->navigation()
                             ->setUlClass('block_nav top_nav_left')

What it looks like ? you can see at top menu at this site as a live demo for this post ;)

Update 2016: This blog is no longer using Zend Framework 2