You are viewing revision #2 of this wiki article.
This is the latest version of this article.
You may want to see the changes made in this revision.
The CMenu class provides some useful features for generating menus in your web application.
HTML friendly labels. ¶
You may want to add some HTML to your menu labels to display icons or images. You can do this by setting the encodeLabel
property:
'encodeLabel' => false,
Styling your Sub-menus. ¶
If your sub-menu is a drop down, then you may want to style it differently from the parent menu. You can do this using the submenuOptions
property:
'submenuHtmlOptions' => array(
'class' => 'dropdown-menu',
)
Link Options. ¶
If you're creating a drop down menu and your top item doesn't need a link, you can customize the behavior using the linkOptions
property:
'linkOptions'=> array(
'class' => 'dropdown-toggle',
'data-toggle' => 'dropdown',
),
Putting it All Together. ¶
I always find it helpful to see all these snippets together in action. Here is a full implementation of CMenu widget:
<?php $this->widget('zii.widgets.CMenu', array(
'items' => array(
array(
'label' => '<i class="icon-user"></i><span class="username">Admin</span> <i class="icon-angle-down"></i>',
'url' => '#',
'linkOptions'=> array(
'class' => 'dropdown-toggle',
'data-toggle' => 'dropdown',
),
'itemOptions' => array('class'=>'dropdown user'),
'items' => array(
array(
'label' => '<i class="icon-user"></i> My Profile',
'url' => '#'
),
array(
'label' => '<i class="icon-calendar"></i> My Calendar',
'url' => '#',
),
array(
'label' => '<i class="icon-tasks"></i> My Tasks</a>',
'url' => '#',
),
array(
'label' => '',
array(
'class' => 'divider',
)
),
array(
'label' => '<i class="icon-key"></i> Log Out',
'url' => array('site/logout'),
),
)
),
),
'encodeLabel' => false,
'htmlOptions' => array(
'class'=>'nav pull-right',
),
'submenuHtmlOptions' => array(
'class' => 'dropdown-menu',
)
));?>
Let me know if I missed anything.
--bhavik . . .
Doesn't Drop Down, Already expanded
I cut and pasted your code into layouts/main.php
The submenu is there but it is already expanded. How can I make the submenu drop down when I hover over the top menu?
Also, can you make it drop vertically instead of horizontally?
thanks!
Yes you have missed something which is important. The problem I am facing when I try to make the menu multilevel. I can add 'id' to the first 'items' array. But I want to add 'id' to the arrays inside the items. But I am unable to do it. I don't know if its possible but is there any way around add id to submenu ul? If I add 'id' in 'submenuHtmlOptions' then all of the submenu ul have the same id.
<?php $this->widget('zii.widgets.CMenu', array( 'items' => array( array( 'label' => '<i class="icon-green"></i> Services <span class="icon-chevron-down"></span>', 'url' => '#', 'linkOptions'=> array( 'class' => '',// <a> has no class so <a class=''> ), 'itemOptions' => array('class'=>'collapsed', 'data-toggle' => 'collapse','data-target'=>"#service", 'aria-expanded'=>"false"),//<li class='collapsed'> 'encodeLabel' => false, 'items' => array( array( 'label' => '<i class="icon-user"></i> My Profile', 'url' => '#' ), array( 'label' => '<i class="icon-calendar"></i> My Calendar', 'url' => '#', ), array( 'label' => '<i class="icon-tasks"></i> My Tasks</a>', 'url' => '#', ), ), 'id' => 'services',<!--This ID does not work--> ), ), 'id'=>"menu-content", <!--This ID works--> 'encodeLabel' => false, 'htmlOptions' => array( 'class'=>'menu-content collapse out', ), 'submenuHtmlOptions' => array( 'class' => 'sub-menu collapse',//<ul class="sub-menu collapse"> 'id'=>'service' ) ));?>
Here is the output of this code
<ul class="menu-content collapse out" id="menu-content"><!--The id="menu-content" came here--> <li class="collapsed" data-toggle="collapse" data-target="#service" aria-expanded="false"><a class="" href="#"><i class="icon-green"></i> Services <span class="icon-chevron-down"></span></a> <ul class="sub-menu collapse"> <!-- id="service" did not come here --> <li><a href="#"><i class="icon-user"></i> My Profile</a></li> <li><a href="#"><i class="icon-calendar"></i> My Calendar</a></li> <li><a href="#"><i class="icon-tasks"></i> My Tasks</a></li> </ul> </li> </ul>
If you have any questions, please ask in the forum instead.
Signup or Login in order to comment.