Yii CMenu小工具 - 如何获取主页

时间:2013-04-12 12:08:21

标签: php yii navigation cmenu

我在Yii(我的第一个使用它的项目)中放了一个菜单,如下所示:

$this->widget('zii.widgets.CMenu',array(
    'items'=>array(
        array('label'=>'Home', 'url'=>array('/')),
        array('label'=>'Examples', 'url'=>array('/examples')),
        array('label'=>'Contact', 'url'=>array('/contact')),
        array('label'=>'FAQ', 'url'=>array('/faq')),
        array('label'=>'Blog', 'url'=>array('/blog')),
        array('label'=>'Order', 'url'=>array('/order')),
    ),
));

这些网址路径中的每一个,例如 / examples 都是在我的配置中定义的路线,因此它看起来不像网站/示例

对于Home链接,我试图将其链接到站点的根级别。显然,CMenu小部件首先通过CHtml::normalizeUrl()传递URL,最终使其指向当前页面。因此,如果我在示例页面上,则主链接指向 / examples

这就是normalizeUrl()所说的:

  

如果输入参数为空字符串,则返回当前请求的URL。

     

如果输入参数是非空字符串,则将其视为有效URL,并且将返回而不进行任何更改。

     

如果输入参数是一个数组,它将被视为控制器路由和GET参数列表,并且将调用CController :: createUrl方法来创建URL。

我已经尝试传递一个空字符串,它最终会按预期指向当前请求的URL。我尝试传递“/”这是一个非空字符串,而仍然指向当前请求的URL。我也尝试将它传递给一个数组并且它与trim() expects parameter 1 to be string, array given一起死亡,因为CMenu期待一个字符串。

我正在努力以Yii的方式做事,但我真的很想让菜单保持静态,如果它不能解决像回到主页那样简单的事情。

TL; DR 如何让Yii中的CMenu小部件创建指向“/”或基本域的链接?

4 个答案:

答案 0 :(得分:4)

当您使用数组作为url时,它将尝试根据您的路由器配置创建URL,但如果您将字符串作为参数传递,它将按字面意思传递,即:

$this->widget('zii.widgets.CMenu',array(
    'items'=>array(
        // Root hardcoded
        array('label'=>'Home', 'url'=>'/'),
        // Root dynamic (works also if not in domain root)
        array('label'=>'Home', 'url'=>Yii::app()->baseUrl),
        // External url
        array('label'=>'Examples', 'url'=> 'http://example.com/'),
        // current url
        array('label'=>'Contact', 'url'=> ''),
        array('label'=>'FAQ', 'url'=>array('/faq')),
        array('label'=>'Blog', 'url'=>array('/blog')),
        array('label'=>'Order', 'url'=>array('/order')),
    ),
));

哦,当你可以使用网址时,这就统治了所有地方。

答案 1 :(得分:2)

array('label'=>'Home', 'url'=>Yii::app() -> request -> baseUrl)

答案 2 :(得分:2)

另一个选择

array('label'=>'Home', 'url'=>Yii::app()->homeUrl)

如果您的baseUrl不是您的homeUrl

,这会有所帮助

答案 3 :(得分:0)

获取绝对的webroot网址,并删除http [s]://

array('label'=>'Home', 'url'=>Yii::app()->getBaseUrl(true)),