Yii框架如何高亮当前菜单标签?默认激活inbox标签
解决Yii菜单标签默认激活与高亮问题
嘿,这事儿好办!在Yii 1.x里,我们可以通过给菜单项添加active参数,结合当前请求的动作判断,就能实现你要的效果:默认激活inbox标签,点击sent时自动高亮它。
直接上修改后的代码:
$this->breadcrumbs=array( 'Dailymarket Reports', ); $this->menu=array( array( 'label'=>'inbox', 'url'=>array('index'), // 默认激活inbox,除非当前是sent动作 'active'=>Yii::app()->controller->action->id == 'index' || Yii::app()->controller->action->id != 'sent' ), array( 'label'=>'sent', 'url'=>array('sent'), // 当当前动作是sent时激活该标签 'active'=>Yii::app()->controller->action->id == 'sent' ), );
如果想更简洁,还可以先把当前动作存成变量:
$this->breadcrumbs=array( 'Dailymarket Reports', ); $currentAction = Yii::app()->controller->action->id; $this->menu=array( array( 'label'=>'inbox', 'url'=>array('index'), // 空动作(刚进入页面)或index动作时激活 'active'=>empty($currentAction) || $currentAction == 'index' ), array( 'label'=>'sent', 'url'=>array('sent'), 'active'=>$currentAction == 'sent' ), );
简单说下原理:
Yii::app()->controller->action->id能获取当前执行的动作ID,比如访问index页面时这个值是'index',访问sent页面时是'sent'。- 菜单项的
active属性接受布尔值,设为true就会触发框架自带的激活样式(一般是CSS里的.active类),实现高亮。 - 第一个菜单项的判断逻辑,确保了只要当前不是
sent页面,inbox就保持激活状态,刚进入页面时自然默认高亮它。
要是你的页面还没激活样式,自己加一段CSS就行:
.yii-nav li.active a { background-color: #2196F3; /* 换成你想要的高亮色 */ color: #fff; }
内容的提问来源于stack exchange,提问作者Mallesh
相关产品推荐
相关产品推荐

