2013-06-20 4 views
1

Я настроил Codeigniter 2.1 с помощью i18n и расширенного контроллера.Codeigniter минимизирует URL-адреса с расширенным контроллером и многоязычным языком

Я спрячу главный контроллер «main», и я сохранил видимый контроллер «admin» и «blog».

Этот URLS работает отлично:

www.mysite.com/ ан/FunctionName

www.mysite.com/ ан/блог/

Это моя проблема: www.mysite.com/ it/блог/имя_функции

С основным контроллером "блога" все после того, как "/" игнорируется.

Возможно ли это?

Мой routes.php файл:

$default_controller = "main"; 
$language_alias = array('it','en'); 
// exceptions 
$controller_exceptions = array('admin','blog'); 
// route 
$route['default_controller'] = $default_controller; 
$route["^(".implode('|', $language_alias).")/(".implode('|', $controller_exceptions).")(.*)"] = '$2'; 
$route["^(".implode('|', $language_alias).")?/(.*)"] = $default_controller.'/$2'; 
$route["^((?!\b".implode('\b|\b', $controller_exceptions)."\b).*)$"] = $default_controller.'/$1'; 

foreach($language_alias as $language) { 
    $route[$language] = $default_controller.'/index'; 
} 

$route['404_override'] = ''; 

// URI like '/en/about' -> use controller 'about' 
$route['^(it|en)/(.+)$'] = "$2"; 

// '/it', '/en' URIs -> use default controller 
$route['^(it|en)$'] = $route['default_controller']; 

Если удалить Ланг в моем URL все работает отлично:

www.mysite.com/ блог/имя_функции

ответ

1

I подумайте, что вам нужен другой сегмент в ваших маршрутах для доступа к функции контроллеров.

так что вам понадобится вторая линия:

// '/it', '/en' URIs -> use default controller 
$route['^(it|en)$'] = $route['default_controller']; 
// URI like '/en/about' -> use controller 'about' 
$route['^(it|en)/(.+)$'] = "$2"; 
// URI like '/en/about/test' -> use controller 'about' with function 'test' 
$route['^(it|en)/(.+)/(.+)$'] = "$2/$3"; 

Я не использовать i18n или поддержки нескольких языков в любом проекте атм, так что я не могу проверить, но это должно сделать трюк.

+0

Благодарим вас за ответ, но похоже, что он не работает. Я думаю, что проблема здесь: '$ route ['default_controller'] = $ default_controller;' '$ route ["^(". Implode ('|', $ language_alias).")/(". Implode ('|', $ controller_exceptions). ") (. *)"] = '$ 2'; ' ' $ route ["^ (". implode ('|', $ language_alias). ")?/(. *) "] = $ default_controller. '/ $ 2';' '$ route ["^((?! \ b ".implode ('\ b | \ b', $ controller_exceptions)." \ b). *) $ "] = $ default_controller. '/ $ 1';' – simo

+0

Я изменил свой ответ, я переместил значение по умолчанию вверх. Он никогда не будет работать со значением по умолчанию внизу. – bottleboot

+0

Спасибо, что это работает! Я должен тебе пиво! – simo