【问题标题】:How to customize links for breadcrumbs widget for Yii?如何为 Yii 自定义面包屑小部件的链接?
【发布时间】:2015-04-10 19:18:36
【问题描述】:

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

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

【问题讨论】:

    标签: yii breadcrumbs


    【解决方案1】:

    没有设置/属性值可以为默认的 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方法,你可以使用&lt;li&gt;CHtml::tag('li',//other options)来代替默认的CHtml::link

    编辑:

    虽然我建议用&lt;li&gt; 为每个链接附上&lt;a&gt;(而不是替换它):

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

    【讨论】:

    • 我做了一个小更新,提出了一个建议。不要犹豫,要求澄清,让我知道这对你有什么影响。
    【解决方案2】:

    您可以使用“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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-08
      • 2011-11-05
      • 2014-10-14
      • 1970-01-01
      • 1970-01-01
      • 2010-12-20
      • 1970-01-01
      • 2020-10-25
      相关资源
      最近更新 更多