Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema en selección de niveles url

Estas en el tema de Problema en selección de niveles url en el foro de PHP en Foros del Web. Hola a todos. Tengo esta función para inserción de un css a partir de un número determinado de niveles en el url. Código: <?php if ...
  #1 (permalink)  
Antiguo 07/11/2013, 06:52
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 19 años, 1 mes
Puntos: 8
Problema en selección de niveles url

Hola a todos.

Tengo esta función para inserción de un css a partir de un número determinado de niveles en el url.

Código:
<?php
if (substr_count($_SERVER['REQUEST_URI'], '/') === 4) {
   echo '<link href="/css/archivo.css" rel="stylesheet" type="text/css" />'; 
}  
?>
Funciona perfectamente.

El problema es que he instalado idiomas y ahora la cosa se ha complicado.

Imaginemos esta url:

www. el sitio .com/nivel1/nivel2/nivel3/nivel4

El css se insertaría cuando estemos en "nivel4" sin problemas.

Pero al instalar idioma inglés (necesito el sufijo en el url por otro tema), queda así:

www. el sitio .com/en/nivel1/nivel2/nivel3/nivel4

Y ya no funciona, así que tendrías que instalar otra función:


Código:
<?php
if (substr_count($_SERVER['REQUEST_URI'], '/') === 5) {
   echo '<link href="/css/archivo.css" rel="stylesheet" type="text/css" />'; 
}  
?>
Y solucionado.

Pero lo que ocurre es que ahora la primera función afectaría a "nivel3" en la versión en inglés, ya que es el cuarto nivel en tal url.

No voy a cambiar este sistema porque ya he realizado múltiples cambios y adaptaciones.

Se trata de encontrar la fórmula de articular esto para que la primera función hasta el cuarto nivel no funcione en la versión lingüística. Introducir una excepción o articularlas de alguna forma en que esto no ocurra.

¿Me podéis orientar de alguna forma?

Gracias.
  #2 (permalink)  
Antiguo 07/11/2013, 07:10
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 9 meses
Puntos: 96
Respuesta: Problema en selección de niveles url

Se me ocurre que hagas una funcion que como parametro le pases el request_uri y dentro de la funcion manipules el substr_count con switch & case
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #3 (permalink)  
Antiguo 07/11/2013, 07:10
Avatar de Cuervoo  
Fecha de Ingreso: octubre-2013
Mensajes: 165
Antigüedad: 11 años, 2 meses
Puntos: 43
Respuesta: Problema en selección de niveles url

Podrías crearle una función que se fije si eligieron idioma o no.

Código PHP:
Ver original
  1. if (is_lang($url)) //Verifica si el primer parametro es "en" "es" "fr", lo que sea
  2. {
  3.     $pos = 5;
  4. }
  5. else //No esta especificado
  6. {
  7.     $pos = 4;
  8. }
  9.  
  10. if (substr_count($_SERVER['REQUEST_URI'], '/') === $pos) {
  11.    echo '<link href="/css/archivo.css" rel="stylesheet" type="text/css" />';
  12. }

También te coviene manejar con clases esas cosas, asi solamente usas $helpercss->trameCSS(), y cuando vayas modificando las reglas que usa para elegir el css, como en este caso, lo haces solamente en la clase sin tener que tocar otra cosa.
  #4 (permalink)  
Antiguo 07/11/2013, 07:55
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 19 años, 1 mes
Puntos: 8
Respuesta: Problema en selección de niveles url

Gracias por responder:


Esta solución tiene algún error.

Código:
<?php
    if (is_lang($url)) 
    {
        $pos = 5;
    }
    else //No esta especificado
    {
        $pos = 4;
    }
     
    if (substr_count($_SERVER['REQUEST_URI'], '/') === $pos) {
       echo '<link href="/css/archivoccccc.css" rel="stylesheet" type="text/css" />';
    }
        
?>
Me da esto:

Fatal error: Call to undefined function is_lang()

en relación a

if (is_lang($url))
  #5 (permalink)  
Antiguo 07/11/2013, 08:03
Avatar de Cuervoo  
Fecha de Ingreso: octubre-2013
Mensajes: 165
Antigüedad: 11 años, 2 meses
Puntos: 43
Respuesta: Problema en selección de niveles url

Si seguro, fue a modo de ejemplo esa función, no es nativa de php, la tenés que crear vos en base a como armás la url. Si el lenguaje está especificado en la primer "capa", tenés que ver que esta sea uno de los lenguajes que usas, si es asi retorna verdadero, y sino falso, o que retorne lo que creas conveniente.
  #6 (permalink)  
Antiguo 07/11/2013, 08:14
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 9 meses
Puntos: 96
Respuesta: Problema en selección de niveles url

Código PHP:
Ver original
  1. function is_lang($url){
  2. $en=strpos('/en/',$url);
  3. if($en !== false){
  4. return true;
  5. }else{
  6. return false;
  7. }
  8. }
me imagino que seria algo asi
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #7 (permalink)  
Antiguo 07/11/2013, 08:37
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 19 años, 1 mes
Puntos: 8
Respuesta: Problema en selección de niveles url

Hola SkAr88.

Código:
<?php
    function is_lang($url){
    $en=strpos('/eu/',$url);
    if($en !== false){
    $pos = 5;
    }
    else{
    $pos = 4;
    }
        if (substr_count($_SERVER['REQUEST_URI'], '/') === $pos) {
       echo '<link href="/css/archivoccccc.css" rel="stylesheet" type="text/css" />';
    }
    }
?>
Creía que esto funcionaba, pero no ha sido así.

Última edición por JUMASOL; 07/11/2013 a las 09:00
  #8 (permalink)  
Antiguo 07/11/2013, 09:03
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 19 años, 1 mes
Puntos: 8
Respuesta: Problema en selección de niveles url

He marcado como solucionado pero no lo está.
  #9 (permalink)  
Antiguo 07/11/2013, 09:49
Avatar de Cuervoo  
Fecha de Ingreso: octubre-2013
Mensajes: 165
Antigüedad: 11 años, 2 meses
Puntos: 43
Respuesta: Problema en selección de niveles url

Porque nunca le pasás la URL a la función.

Probá asi

Código PHP:
Ver original
  1. //Es la misma función que puso SkAr88, solamente que con un array para poder verificar varios lenguajes
  2. function is_lang($url)
  3. {
  4.     //Valor que devuelve
  5.     $ret = false;
  6.  
  7.     //Creamos un array de la URL
  8.     $exp = array_values(array_filter(explode('/', $url)));
  9.    
  10.     //Tomamos el primer indice, que va a ser /es, /en, lo que sea, si es que lo tiene
  11.     $lang = $exp[0];
  12.  
  13.     //Array con los lenguajes que tenés
  14.     $langs = array(
  15.         'es',
  16.         'en',
  17.         'fr'
  18.     );
  19.  
  20.     //Si el lenguaje está, el valor de retorno va a ser true
  21.     if (in_array($lang, $langs))
  22.     {
  23.         $ret = true;
  24.     }
  25.    
  26.     return $ret;
  27. }
  28.  
  29. $url = $_SERVER['REQUEST_URI'];
  30.  
  31. if (is_lang($url))
  32. {
  33.     $pos = 5;
  34. }
  35. else
  36. {
  37.     $pos = 4;
  38. }
  39.  
  40. if (substr_count($_SERVER['REQUEST_URI'], '/') === $pos) {
  41.    echo '<link href="/css/archivo.css" rel="stylesheet" type="text/css" />';
  42. }

Lo acabo de probar y funciona.
  #10 (permalink)  
Antiguo 07/11/2013, 10:47
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 19 años, 1 mes
Puntos: 8
Respuesta: Problema en selección de niveles url

Sí, es cierto funciona perfectamente.

Gracias.

El tema es que el idioma español no funciona con "es", sino que es un sitio que sólo muestra sufijo con los idiomas.

Lo que he hecho es invertir el orden así:

Código:
    if (is_lang($url))
    {
        $pos = 4;
    }
    else
    {
        $pos = 5;
    }
E insertar un archivo que es una excepción con respecto al incluido por la versión española.

Lo ideal sería hacerlo como tú dices, pero el sitio está hecho así, sin sufijo en el español, y es demasiado grande y elaborado con muchas secciones y especificaciones como para cambiar esto.

Pero sí está entendido y funciona perfectamente.

Gracias.

Etiquetas: niveles, url
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:03.