【发布时间】:2015-04-10 19:18:36
【问题描述】:
如何为 Yii 自定义面包屑小部件的链接?
我可以更改属性tagName,但它是用于容器的。我想将每个链接的标签从a 更改为li。我该怎么做?
【问题讨论】:
标签: yii breadcrumbs
如何为 Yii 自定义面包屑小部件的链接?
我可以更改属性tagName,但它是用于容器的。我想将每个链接的标签从a 更改为li。我该怎么做?
【问题讨论】:
标签: yii breadcrumbs
没有设置/属性值可以为默认的 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”和“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。
【讨论】: