2

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

我可以更改属性tagName,但它是用于容器的。我想将每个链接的标签从 更改ali。我该怎么做?

4

2 回答 2

2

好吧,您可以为默认的 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.

编辑:

虽然我建议用一个(而不是替换它)封闭<a>每个链接:<li>

$links[]='<li>'.CHtml::link($this->encodeLabel ? CHtml::encode($label) : $label, $url).'</li>';
于 2012-07-14T15:54:24.837 回答
0

您可以使用 'activeLinkTemplate' 和 '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,
             ));

或者你可以写 'homeLink'=>false。但在这种情况下,你必须每次都用 $this->breadcrumbs 设置 Home url。

于 2015-04-10T11:18:36.320 回答