Hola,
mi archivo con las reglas de ruteo es este:
Código PHP:
Ver original$route['index/page/(:num)'] = "index/index/$1";
$route['index/cambiarSession'] = "index/cambiarSession";
$route['index'] = "index";
$route['inicio/pagina/(:num)'] = "index/index/$1";
$route['inicio/cambiarSession'] = "index/cambiarSession";
$route['inicio'] = "index";
$route['fields/page/(:num)'] = "propiedades/index/$1";
$route['fields/details/(:any)'] = "propiedades/detalles/$1";
$route['fields'] = "propiedades";
$route['campos/pagina/(:num)'] = "propiedades/index/$1";
$route['campos/detalles/(:any)'] = "propiedades/detalles/$1";
$route['campos'] = "propiedades";
dentro de mi frontcontroller.php tengo lo siguiente para validar que archivo de lenguaje tengo que levantar:
Código PHP:
Ver original//cargo el lenguaje del sistema
if($config->get('multi')==1) {
$leng = Language::singleton();
$leng->get_session_handler();
$idiomaActual = $config->get('lenguaje');
$_SESSION['leng'] = $idiomaActual;
if(strlen($url->segment(0))<3 && $url->segment(0)!='') { $idiomaActual = $url->segment(0);
$_SESSION['leng'] = $idiomaActual;
}
elseif(isset($_REQUEST['leng'])) { //setcookie ("leng", $_REQUEST['leng'], time () + 7*24*60*60);
$idiomaActual = $_REQUEST['leng'];
$_SESSION['leng'] = $idiomaActual;
}
elseif(isset($_COOKIE['leng'])) { if(file_exists($config->get('root')."lenguajes/".$_COOKIE['leng'].".php")) { $idiomaActual = $_COOKIE['leng'];
$_SESSION['leng'] = $idiomaActual;
}
}
else {
if(file_exists($config->get('root')."lenguajes/".$_SESSION['leng'].".php")) { $idiomaActual = $config->get('lenguaje');
$_SESSION['leng'] = $idiomaActual;
}
}
// Incluimos el archivo del idioma seleccionado
// o el archivo por defecto si no se seleccionó
// idioma o si no se encuentra el archivo
include $config->get('root')."/lenguajes/".$idiomaActual.".php";
}
else {
$leng = Language::singleton();
$leng->get_session_handler();
$idiomaActual = $config->get('lenguaje');
$_SESSION['leng'] = $idiomaActual;
include $config->get('root')."/lenguajes/".$config->get('lenguaje').".php";
}
y por últmo esta es mi funcion que parsea la reglas de ruteo:
Código PHP:
Ver originalprivate function parsearRuta() {
//creo una instancia de la clase url
$url = Url::singleton();
$config = Config::singleton();
$debug = firePHP::getInstance();
//valido si la url es distinta a /
if($this->uri != '/') {
//valido si la url es literal
if (isset($this->routes[$this->uri])) { $this->uri = $this->routes[$this->uri];
$url->uri_string = $this->uri;
return $this->uri;
}
// recorro el arreglo de reglas router
foreach ($this->routes as $key => $val) {
// Convierto los wild-cards a RegEx
//$key = str_replace(':any', '.+', str_replace(':num', '[0-9]+', $key));
//$key = str_replace(':any', '.+', str_replace(':num', '[0-9]+', str_replace(':alphanum','[a-z0-9]+',str_replace(':alpha','[a-z]+',$key))));
if (strpos($key, ':') !== false) { $wildcard = array(':any', ':alphanum', ':num', ':alpha'); $regex = array('(.+)', '([a-z0-9]+)', '([0-9]+)', '([a-z]+)'); }
//valido si hay un lenguaje en la session
if(!empty ($_SESSION['leng']) && $config->get('multi') && $config->get('prefix_multi')) { $key = $_SESSION['leng'].'/'.$key;
}
// Valido si existe coincidencia
// Valido si hay concidencia con las back-reference?
if (strpos($val, '$') !== FALSE AND
strpos($key, '(') !== FALSE) { }
// setteo la uri final
$this->uri = $val;
$url->uri_string = $this->uri;
return $this->uri;
}
//valido si la regla esta dentro de la url
elseif(strpos($this->uri, $key)!== FALSE) { $this->uri = $val;
$url->uri_string = $this->uri;
return $this->uri;
}
}
}
else{
//si no esta dentro de una regla de ruteo armo la uri
// con los segmentos
$this->uri = implode('/', $url->segments); $url->uri_string = $this->uri;
}
}
Esta linea:
Código PHP:
Ver originalif(!empty ($_SESSION['leng']) && $config->get('multi') && $config->get('prefix_multi'))
lo que hace es validar si quiero tomar el prefijo del lenguaje (es,fr,en, etc) o no.
como dije antes, el tema donde se me complica es como cambiar el valor de la session para que me cambie de lenguaje. Hoy estuve probando de nuevo desde jquery que al hacer click en el link de las banderas haga esto:
Código Javascript
:
Ver original$('#en').click(function(){
var params = {
'nuevoleng':'en'
}
$.ajax({
url : '<?=$config->get('base') ?>index/cambiarSession',
type: 'POST',
data: params,
dataType: 'html',
success: function(v){
console.log(v);
if($.trim(v)=="1"){
//$(location).attr('href',$(this).attr('href'));
location.replace('index.php');
}
}
})
console.log($(this).attr('href'));
});
y mi método cambiarSession tiene esto:
Código PHP:
Ver originalpublic function cambiarSession(){
$this->Debug->info($this->Session->get('leng'));
$antes = $this->Session->get('leng');
$this->Session->set('leng',$_REQUEST['nuevoleng']);
$this->Debug->warn($this->Session->get('leng'));
if($antes!=$this->Session->get('leng')){
echo 1;
}
else{
echo 0;
}
//echo 'en';
}
el cambio de session en el método me lo hace, pero cuando redirecciono con el jquery me sigue tomando el lenguaje por defecto y no entiendo porque :s