2013-10-24 49 views
1

所以這是我的問題。我有一個網站,我們正在使用cakephp翻譯法語。當我在一個帶有諸如「www.mydomain.com/eng/store/view/1」之類的URL的頁面上時我在法語語言鏈接中看到的網址是「www.mydomain.com/fre/store/view/」 。點擊語言按鈕刪除URL中的ID參數

這是我在我的routes.php文件的代碼,是關係到商店頁面

Router::connect('/:language/:controller/:action/*', 
        array(), 
        array('language' => '[a-z]{3}')); 
Router::connect('/store/:action/*', array('controller'=>'products')); 
Router::connect('/store', array('controller'=>'products', 'action'=>'index')); 

在我app_helper.php我有

function url($url = null, $full = false) { 
     if(!isset($url['language']) && isset($this->params['language'])) { 
      $url['language'] = $this->params['language']; 
     }  

     return parent::url($url, $full); 
    } 

所以我的問題是:我應該怎麼做在切換語言時,讓我的鏈接保留產品的最後一個參數?

注意:該鏈接完美適用於只有控制器和url中的操作的頁面。如果你想限制你的網址,並添加變量設置爲URL => e.g

Router::connect('/action/**', array('controller' => 'controller_name', 'action'=>'action_name')); 

這裏:

+0

歡迎來到stackoverflow! –

回答

1

我發現爲什麼我的參數並沒有在語言鏈接以下的實際問題。我不完全確定這是最好的選擇,但它適用於我。

當添加該語言的鏈接,而不是具有:

echo $this->Html->link('English', array('language'=>'eng')) 

我使用

echo $this->Html->link('English', array('language'=>'eng')+$this->params['pass']); 

看看是否有一個路由的問題並不完全沒用,因爲我發現有很多漏洞使其他頁面無法訪問正確的URL,主要是頁面文件夾下的頁面。添加

Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display')); 
Router::connect('/:language/pages/*', array('controller' => 'pages', 'action' => 'display'), array('language' => '[a-z]{3}')); 

對這些做了訣竅。

0

這適用於所有的情況下,並通過可變的。控制器/動作/可變

Router::connect('/action/:id', array('controller' => 'controller_name', 'action'=>'action_name') 
           , array('pass'=>array('id'))); 

Here is reference

希望它有助於

+0

對不起,遲交的答案。我已經嘗試過您的解決方案,並已閱讀參考資料。我對路由及其工作原理有了更好的理解,但令人遺憾的是,似乎這不是我需要的具體情況。當您點擊法語或英語按鈕時,最後的參數仍然被切斷。我相信可能還有別的東西,我錯過了。 – ABoudias

+0

我的快樂伴侶 – Fury