如何为Yii自定义面包屑小部件的链接



如何为Yii自定义面包屑小部件的链接?

我可以更改属性tagName,但它适用于容器。我想将每个链接的标记从a更改为li。我该怎么做?

没有可以为默认CBreadcrumbs小部件类指定的设置/属性值,该类将为您提供<li>。如果您检查了它的run()方法,您可以确认这一点。在源代码中,您可以看到:

public function run(){
 // code
 foreach($this->links as $label=>$url)
 {
    if(is_string($label) || is_array($url))
        $links[]=CHtml::link($this->encodeLabel ? CHtml::encode($label) : $label, $url);
    else
        $links[]='<span>'.($this->encodeLabel ? CHtml::encode($url) : $url).'</span>';
 }
 // more code
}

因此,您要做的是extend这个类,并指定您自己的run方法,在那里您可以使用<li>CHtml::tag('li',//other options)而不是默认的CHtml::link

编辑:

尽管我建议用<li>为每个链路封装<a>(而不是替换它):

$links[]='<li>'.CHtml::link($this->encodeLabel ? CHtml::encode($label) : $label, $url).'</li>';

您可以使用"activeLinkTemplate"one_answers"inactiveLinkTemplate"属性:

$this->widget('zii.widgets.CBreadcrumbs',
               array('tagName'=>'ul', 
                     'homeLink'=>'<li>'.CHtml::link('Home', array('/')).'</li>',
                     'activeLinkTemplate'=>'<li><a href="{url}">{label}</a></li>',
                     'inactiveLinkTemplate'=>'<li class="active">{label}</li>',
                     'htmlOptions'=> array('class'=>'breadcrumb'),
                     'separator'=>' / ',
                     'links'=>$this->breadcrumbs,
             ));

或者U可以写"homeLink"=>false。但在这种情况下,你将不得不设置主页网址每次与$this->面包屑。

最新更新