2013-10-24 37 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