entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

0voto

Redireccionar a la url anterior en que estaba el usuario

Buenos Días, estoy trabajando con el framework de php CodeIgniter versión 3 y he implementado una parte donde salen todos los idiomas que soporta el sitio y quiero que cuando un usuario de click en el idioma el valor idioma de la session se cambia al valor nuevo y regrese a la página en que se encontraba el usuario en vez de ir al home o al index.
Me falta solamente hacer que se redireccione a la url anterior en la cual se encontraba antes de ir a la función que cambia su idioma en la session y quiero hacerlo con php.
Saludos Dairon

2 Respuestas

2votos

white Puntos75880

Hola dairon, se me ocurren 2 formas, utilizando el referer HTTP_REFERER o obteniendolo via $_GET.

por referer:

public function language()
{
    $this->load->library('user_agent');

    // si no existe el referer o no pertenece a este sitio, redirigimos.
    if ( !$this->agent->referrer() ||
          stripos($this->agent->referrer(), base_url()) === false )
    {
        redirect();
    }

    // si el referer es este mismo metodo, redirigimos.
    else if( stripos($this->agent->referrer(), '/language') !== false)
    {
        redirect();
    }

    /* definimos el lenguaje aqui */

    // redirigimos!
    redirect($this->agent->referrer());
}

via $_GET:

public function language()
{
    $url = $this->input->get('ref', TRUE);

    // si no esta definida la url, es invalida o no pertenece a este sitio
    // redirigimos
    if ( !isset($url) ||
         filter_var($url, FILTER_VALIDATE_URL) === false ||
         stripos($url, base_url()) === false )
    {
        redirect();
    }

    // si el referer es este mismo metodo, redirigimos.
    else if( stripos($url, '/language') !== false)
    {
        redirect();
    }

    /* definimos el lenguaje aqui */

    // redirigimos!
    redirect($url);
}

asegurate en esta linea: stripos($this->agent->referrer(), '/language') de cambiar /language por la url de tu sitio donde cambias tu lenguaje.

recuerda agregar ?ref=[url actual] al enlace que cambiar el lenguaje.

0voto

dairon comentado

@white yo tengo este código:

function changeLeng(){      
        $this->load->model('idioma_model');
        $idioma = $this->idioma_model->get_idioma($this->input->get('idioma',true));
        $this->session->set_userdata('id_idioma',$this->input->get('idioma',true));
        $this->session->set_userdata('url_idioma',$idioma->icono);
        //virar a la dirección anterior en el navegador
    }

y voy a el con la siguiente dirección: http://www.admin.cu/adm/changeLeng?idioma=3

0voto

white comentado

intenta asi:

function changeLeng()
{
    $this->load->model('idioma_model');
    $url = $this->input->get('ref', TRUE);
    $idioma = $this->idioma_model->get_idioma($this->input->get('idioma',true));

    // si no esta definida la url, es invalida o no pertenece a este sitio
    // redirigimos
    if ( !isset($url) ||
         filter_var($url, FILTER_VALIDATE_URL) === false ||
         stripos($url, base_url()) === false )
    {
        redirect();
    }

    // si el referer es este mismo metodo, redirigimos.
    else if( stripos($url, base_url('adm/changeLeng')) !== false )
    {
        redirect();
    }

    /* definimos el lenguaje aqui */
    $this->session->set_userdata('id_idioma',$this->input->get('idioma',true));
    $this->session->set_userdata('url_idioma',$idioma->icono);

    // redirigimos!
    redirect($url);
}

y la url para cambiar de idioma asi:

http://www.admin.cu/adm/changeLeng?idioma=3&ref=<?php echo current_url(); ?>

0voto

dairon comentado

hola @white mano, probé el código y cuando llamo ejecuto http://www.admin.cu/adm/changeLeng?idioma=3&ref=<?php echo current_url(); ?>
me sale error Unable to parse URL
Filename: core/URI.php
Line Number: 204
voy a buscar como slucionarlo pero por ahora nada :(
Saludos Dairon,

0voto

dairon comentado

Encontré una forma para hacerlo aunque no creo que se la más elegante pues ahora tengo que hacer unos inventos jejeje: cree un form y ahi en un input hidden metí la current_url y me funcionó la redirección ahora tengo que poner los idiomas jajaja
Gracias por todo. Saludos Dairon

0voto

white comentado

Intenta codificando la url

http://www.admin.cu/adm/changeLeng?idioma=3&ref=<?php echo urlencode(current_url()); ?>

3votos

vendetta Puntos360
 $pagina_anterior = $_SERVER['HTTP_REFERER'];

    redirect($pagina_anterior);

    function redirect ($url)
    {
      header("Location: $pagina_anterior");
      die();
    }

La mayoría te dirá que así sin embargo no recomiendo para nada esto y es posible que ni siquiera funcione(en local si, en producción no), debes usar obj_start() para usarlo y aun asi da mucha lata.

recomiendo usar:

`echo '<META HTTP-EQUIV="Refresh" Content="0; URL=$url">';//tambien debe ir arriba(recomiendo usar` variables globales para escribir el echo) 

en el ultimo de los casos:

echo "<script language='javascript'>window.location='$url'</script>;"

¿que pasa si el usuario chistoso desactiva js?

0voto

vendetta comentado

Ahora que lo pienso si usas codeigniter basta con usar redirect('nombredelpage'); white tiene razon.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta