2013-10-24 2 views
1

Итак, вот моя проблема. У меня есть веб-сайт, который мы сейчас переводим на французский, используя cakephp. Когда я нахожусь на странице с URL-адресом, например «www.mydomain.com/rus/store/view/1». Я вижу ссылку на французском языке «www.mydomain.com/fre/store/view/». ,Нажатие на кнопку языка удаляет идентификационные параметры в URL-адресе

Вот мой код в моем 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-адресе.

+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/**', array('controller' => 'controller_name', 'action'=>'action_name')); 

Вот если вы хотите ограничить свой адрес и добавить переменную в свой URL => например. контроллер/действие/переменная

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

Here is reference

надеюсь, что это помогает

+0

Извините за поздний ответ. Я пробовал ваше решение, и я прочитал ссылку. У меня есть лучшее понимание маршрутизации и того, как это работает, но, к сожалению, похоже, что это не то, что мне нужно для этой конкретной ситуации. Параметры в конце все еще обрезаются, когда вы нажимаете на французскую или английскую кнопку. Я верю, что может быть что-то еще, что мне не хватает. – ABoudias

+0

Мой друг – Fury