如何使用CHtml :: link将参数附加到当前页面?

时间:2011-12-12 07:06:53

标签: yii

使用Yii,并尝试将Lang = xx附加到当前页面url的末尾并将其显示在页面上。

我将以下代码放在protected / views / layout / main.php

<?php echo CHtml::link('English', array('','lang'=>'en'), array('class'=>'en')) ?>
<?php echo CHtml::link('中文', array('','lang'=>'tw'), array('class'=>'tw')) ?>
<?php echo CHtml::link('日本語', array('','lang'=>'jp'), array('class'=>'jp')) ?>

使用“/ site / index”等标准页面或“/ site / contact”等控制器操作页面,它们可以正常工作。但是对于像“site / page?view = about”这样的标准静态页面,它不起作用。预期的网址应该是“site / page?view = about&amp; lang = tw”,但相反,它会给我“site / page?lang = tw”。

我该如何解决?

2 个答案:

答案 0 :(得分:1)

我最终用langhandeler扩展和url规则并将[site] / [path]?lang = [语言代码]映射到[site] / [语言代码] / [路径]

然后我编写了如下链接:

        <?php 
        $request = $_SERVER['REQUEST_URI'];
        $path_a = explode("/",$request);
        $haveLang = isSet($_GET["lang"]);
        $uri = ($haveLang?
                substr($request, strlen($path_a[1])+1) //strip language prefix and the slash
                :$request);                               //don't process if the page is in default language
        echo CHtml::link(CHtml::encode(Yii::app()->name), CHtml::normalizeUrl(($haveLang?'/'.$_GET["lang"].'/':'/')), array('id'=>'logo')); 
        ?>
          <div id="lang_switch">                  
            <?php
            echo CHtml::link('English', CHtml::normalizeUrl($uri), array('class'=>'en')); //no need to add default language prefix
            echo CHtml::link('中文', CHtml::normalizeUrl('/tw'.$uri), array('class'=>'tw'));
            echo CHtml::link('日本語', CHtml::normalizeUrl('/jp'.$uri), array('class'=>'jp'));
            ?>
          </div>

几乎解决了我的问题。我希望将来可以帮助其他人。

答案 1 :(得分:0)

你可以像这样给出链接

$language = 'en';
CHtml::link("English", array('site/about/lang/' . $language));

site / about / lang / en = controller / action / lang / en

我希望这会对你有所帮助。