2011-12-12 80 views
0

使用Yii,並嘗試將Lang = xx附加到當前頁面url的末尾並將其顯示在頁面上。如何使用CHtml :: link將參數追加到當前頁面?

我把下面的代碼在受保護/視圖/佈局/ 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/page?view = about」這樣的標準靜態頁面,它不起作用。預計的網址應該是「site/page?view = about & lang = tw」,但是它給了我「site/page?lang = tw」。

我該如何解決這個問題?

+0

你只是想爲用戶提供一種設置Yii應用程序的'CLocale'的方法嗎?或者每個Controller都尋找$ _GET ['lang']參數? – thaddeusmt

+0

我想要做的是爲網站提供通用語言切換器。事實證明,靜態頁面的工作方式不同。我確實想要解決這個問題,但在這裏重複有點太長了。如果有人感興趣,請參考鏈接:http://www.yiiframework.com/forum/index.php?/topic/3148-extension-langhandler/ – T1000

回答

0

你可以給這樣的

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

網站/約/郎/ EN =控制器/動作/郎/ CHTML鏈路連接

我希望這會幫助你。

+0

感謝您的評論。不過,我正在尋找更有活力的東西。我需要鏈接回自己並添加語言代碼來切換語言。 – T1000

+0

@ T1000您可以詳細說明這種情況。我想我可以幫你.. –

1

我結束了langhandeler擴展名和URL規則,這樣做並映射[現場]/[路徑]?LANG = [語言代碼]到[現場]/[語言代碼]/[路徑]

然後我編碼的鏈接如下:

 <?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> 

這幾乎解決了我的問題。我希望這可以幫助未來的其他人。

相關問題