Hi, I have a Problem when I want to create routing for my application I have 2 flow in my application
first, multiple languages routing
second, singgle language routing
here my routing configuration for frontend
':lang_code'/(:any)=> 'pages/frontend/pages/details/$1', // this routing refer to module page with controller pages under folder frontend and method details with params
//this is for singgle language
':any'=> 'pages/frontend/pages/details/$1',
the problem is how to refer that routing into multiple module, I have another module example 'news' , how to point this ':lang_code'/(:any) into module pages and news ?
Currently, module routes are only loaded when the module is loaded, which is not going to happen if the URI doesn't start with '/news/'...
Most multi-laguage solutions strip the language code from the URI before it is processed by Fuel.
The quickest way is to overload Input::uri(), something like this:
/** * Detects and returns the current URI based on a number of different server * variables. * * @return string */ public static function uri() { if (static::$detected_uri !== null) { return static::$detected_uri; }
if (isset($segments[1]) and in_array($segments[0], array('en', 'fr', 'de'))) { // langauge is in $segments[0], store it somewhere (config, new input method, etc)
// remove the language from the uri static::$detected_uri = $segments[1]; }
and in my controller just detected configuration site using multiple language or not if use that I should detection path of route :lang_code by using $this->param('lang_code'); and then process another code.
//under page controller and another module (news,testimonial,ect) possible same
public static function action_details($name)
{
$page = array();
if (\Common::multiple_languages() === 'yes') {
$lang_code = $this->param('lang_code');
$page = //----- doing code for get page by filtering language---//
//return page response;
}
// for singgle language
$page = //----- doing code for get page by filtering language---//
//return page response singgle language
}
from that code and routing it's possible one url with same content and that is will be problem in SEO, example if I am using multiple_language = yes, so the url for http//:example.domain/en/news/hot-news show content by english language.
and then I can also access single language url http//:example.domain/news/hot-news then show content same with english language.
it's possible to active or inactive routing with statement from controller, example I am inactive route for singgle language when system detection multiple_language = yes ? sorry for my bad english
As long as you define your routes globally, it's not a problem.
From an SEO point of view, my suggestion will not have any impact. I've just pulled the language detection bit out of all your controllers, and centralized it.
if in the Input extension you store the detected language in a static property, and add a new method for retrieving it, you can replace your $this->param() call with \Input::uri_language() or something, and the rest remains the same.