Foros del Web » Programando para Internet » PHP »

Unir condicionales con elseif

Estas en el tema de Unir condicionales con elseif en el foro de PHP en Foros del Web. Hola, En otras ocasiones he resuelto el tema de combinar varias condicionales, pero esta vez no me está resultando por alguna razón. Se trata de ...
  #1 (permalink)  
Antiguo 22/06/2014, 14:57
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Unir condicionales con elseif

Hola,

En otras ocasiones he resuelto el tema de combinar varias condicionales, pero esta vez no me está resultando por alguna razón.

Se trata de combinar estas dos con un elseif:

Código:
<?php
$uri = $_SERVER['REQUEST_URI'];
if (strpos($uri,'blog')  !== false ) {
   echo '<link href="/templates/beez3/css/no-ruta.css" rel="stylesheet" type="text/css" />'; 
   } 
?>
<?php
$uri = $_SERVER['REQUEST_URI'];
if (strpos($uri,'blog/')  !== false ) {
   echo '<link href="/templates/beez3/css/ruta.css" rel="stylesheet" type="text/css" />'; 
   } 
?>

Se trata de que cuando estés en blog, inserte no-ruta.css, pero cuando entres en un artículo dentro del blog (blog/articulo), se muestre ruta.css.

¿Cómo combinarlas?

No me sale en el orden que lo ponga.

Os agradecería alguna indicación.
  #2 (permalink)  
Antiguo 22/06/2014, 15:31
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: Unir condicionales con elseif

Código PHP:
Ver original
  1. <?php
  2. if (strpos($uri=$_SERVER['REQUEST_URI'],'blog')  !== false ) {
  3.    echo '<link href="/templates/beez3/css/no-ruta.css" rel="stylesheet" type="text/css" />';
  4. }
  5. elseif (strpos($uri=$_SERVER['REQUEST_URI'],'blog/')  !== false ) {
  6.    echo '<link href="/templates/beez3/css/ruta.css" rel="stylesheet" type="text/css" />';
  7. }
  8. ?>

Aunque me parece que así también podría ser

Código PHP:
Ver original
  1. $uri=$_SERVER['REQUEST_URI'];
  2. if (strpos($uri,'blog')  !== false ) {
  3.    echo '<link href="/templates/beez3/css/no-ruta.css" rel="stylesheet" type="text/css" />';
  4. }
  5. elseif (strpos($uri,'blog/')  !== false ) {
  6.    echo '<link href="/templates/beez3/css/ruta.css" rel="stylesheet" type="text/css" />';
  7. }

Saludos.
__________________
Ayúdame a hacerlo por mi mismo.
  #3 (permalink)  
Antiguo 22/06/2014, 15:56
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Unir condicionales con elseif

Disculpa, pero no funciona ninguna de las dos. Las he copiado y pegado literalmente y probado.

No sé por qué no funcionan, ya que deberían.

Lo he tenido que dejar así:

Código:
<?php
$uri = $_SERVER['REQUEST_URI'];
if (strpos($uri,'blog') !== false ) {
   echo '<link href="/templates/beez3/css/no-ruta.css" rel="stylesheet" type="text/css" />'; 
   } 
?>
<?php
$uri = $_SERVER['REQUEST_URI'];
if (strpos($uri,'blog/') !== false ) {
   echo '<link href="/templates/beez3/css/ruta.css" rel="stylesheet" type="text/css" />'; 
   } 
?>
Así sí funciona.

Se trata de hacer las cosas mejor y en una única declaración.

Os digo que no entiendo por qué no funciona.


?????????
  #4 (permalink)  
Antiguo 22/06/2014, 17:07
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: Unir condicionales con elseif

Cita:
Iniciado por JUMASOL Ver Mensaje
Disculpa, pero no funciona ninguna de las dos. Las he copiado y pegado literalmente y probado.

No sé por qué no funcionan, ya que deberían.

Lo he tenido que dejar así:

Código:
<?php
$uri = $_SERVER['REQUEST_URI'];
if (strpos($uri,'blog') !== false ) {
   echo '<link href="/templates/beez3/css/no-ruta.css" rel="stylesheet" type="text/css" />'; 
   } 
?>
<?php
$uri = $_SERVER['REQUEST_URI'];
if (strpos($uri,'blog/') !== false ) {
   echo '<link href="/templates/beez3/css/ruta.css" rel="stylesheet" type="text/css" />'; 
   } 
?>
Así sí funciona.

Se trata de hacer las cosas mejor y en una única declaración.

Os digo que no entiendo por qué no funciona.


?????????
¿Puedes mostrar qué error te devuelve?
__________________
Ayúdame a hacerlo por mi mismo.
  #5 (permalink)  
Antiguo 23/06/2014, 02:02
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Unir condicionales con elseif

No, no hay ningún error. El efecto es que nunca se inserta ruta.css, sino siempre no-ruta.css.

No lo entiendo.
  #6 (permalink)  
Antiguo 23/06/2014, 02:56
lolainas
Invitado
 
Mensajes: n/a
Puntos:
Comprueba primero primero con la barra, porque si tiene barra siempre tendrá blog, es de libro...
  #7 (permalink)  
Antiguo 23/06/2014, 06:30
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Unir condicionales con elseif

Hola.

El tema es el siguiente.

Metiendo esto funciona.

Código:
<?php
$uri = $_SERVER['REQUEST_URI'];
if (strpos($uri,'blog') !== false ) {
   echo '<link href="/templates/beez3/css/no-ruta.css" rel="stylesheet" type="text/css" />'; 
   } 
?>
<?php
$uri = $_SERVER['REQUEST_URI'];
if (strpos($uri,'blog/') !== false ) {
   echo '<link href="/templates/beez3/css/ruta.css" rel="stylesheet" type="text/css" />'; 
   } 
?>
Y funciona porque primero inserta no-ruta.css y luego ruta.css que incorpora reglas alternativas a no-ruta.css que priman por estar a continuación en el código.

Esa es la cuestión que no había indicado (perdonad).

El tema es si se puede hacer para que no se inserte no.ruta.css sino ruta.css en cada caso.

Estoy pensando que ello no puede ser por lo que me ha dicho el último interviniente: en ambos casos está "blog", y se resuelve por prevalencias entre css.

¿Véis si se podría hacer de una forma conjunta? No ya por necesidad (ahora lo tengo como os muestro), sino simplemente por saberlo.

Gracias.
  #8 (permalink)  
Antiguo 23/06/2014, 07:05
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: Unir condicionales con elseif

Déjanos ver el valor de REQUEST_URI y qué quieres lograr con los condicionales para saber por qué no obtienes lo que esperas.


Yo creo que no estás usando $_SERVER['REQUEST_URI'] como deberías.

Si lees la documentación de PHP respecto a strpos, dice lo siguiente

Cita:
Encuentra la posición numérica de la primera ocurrencia del needle (aguja) en el string haystack (pajar).
Eso quiere decir, que en un ambiente web común y con tu código lo que estás diciendo al intérprete de PHP cuando llega a los condicionales es algo como lo siguiente:

Cita:
Si encuentras la ocurrencia 'blog' entonces imprime esto.
Si encuentras la ocurrencia '/blog' entonces imprime esto también.
Es decir, que te has dado cuenta de que puede no imprimir nada, puede imprimir uno o puede imprimir los dos, por eso quieres rectificar con if-elseif.

Eso está bien, pero se te olvida, que los if-elseif son condicionales, eso significa que el intérprete comienza a leer jerárquicamente de arriba hacia abajo por el if, si no se cumple continúa al elseif inmediato, si tampoco se cumple puedes crear otro elseif o un else en caso de que ninguno se cumpla.

Yendo más atrás ¿para qué regular con PHP el CSS cargado si el CSS se "auto-regula" al ser utilizado por la aparición de HTML?

Y no solo eso, como cabe la posibilidad de que se encuentren ambas posiciones, un usuario podría romper la lógica cambiando el orden de la URL; y además, que el usuario puede introducir en el navegador 'Blog' o '/Blog', por ello deberías utilizar stripos en vez de strpos.


En definitiva, creo que te estás complicando sin tener por qué, simplemente carga los dos css, y deja que cada etiqueta HTML utilice el CSS con los estilos y clases que le correspondan.
__________________
Ayúdame a hacerlo por mi mismo.
  #9 (permalink)  
Antiguo 23/06/2014, 08:29
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Unir condicionales con elseif

Matizando, no es "/blog", sino "blog" y "blog/"

El tema es introducir una variación en función de si estás en la categoría o en un artículo de la categoría:

www. sitio web. com/blog

o

www. sitio web. com/blog/estamosenunarticulo


No es lo mismo. Y se trata de discriminar utilizando los términos en la URL.

Esto otro también funciona:

Código:
<?php
$uri = $_SERVER['REQUEST_URI'];
if (strpos($uri,'blog') !== false ) {
   echo '<link href="/templates/beez3/css/no-ruta.css" rel="stylesheet" type="text/css" />'; 
   } 
if (strpos($uri,'blog/') !== false ) {
   echo '<link href="/templates/beez3/css/ruta.css" rel="stylesheet" type="text/css" />';  
   }
?>
Pero es lo mismo uniendo dos condiciones en una declaración.

¿Hay algo más limpio?

Como véis, mi nivel es bajo.

Gracias.
  #10 (permalink)  
Antiguo 23/06/2014, 11:17
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: Unir condicionales con elseif

El código debe funcionar porque lo que has mostrado y lo que te he contribuido no tiene ningún error. Así que debe funcionar sí o sí. Distinto es que no te funcione con motivo de otro código que no has mostrado.

Sigo manteniendo la misma pregunta de antes y sumo otra pregunta:

¿Qué problema tienes para no poder o no querer cargar los dos CSS y que cada etiqueta HTML utilice los estilos que le correspondan ?¿Qué te parece que solucionas/logras haciendo lo que haces con esas cargas de CSS controladas con PHP?
__________________
Ayúdame a hacerlo por mi mismo.
  #11 (permalink)  
Antiguo 23/06/2014, 12:50
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: Unir condicionales con elseif

Es un WordPress que introduce un breadcrumb.

Se puede seleccionar los ítems de menú donde será visible o aparecerá.

El problema:

Si le dices que se vea en la categoría "blog", se mostrará en esa categoría y en todas los artículos dentro de la misma:

blog/articulouno

blog/articulo2

blog/otroarticuloetc

Por una cuestión que no vamos a comentar aquí, no quiero que se muestre en la categoría, sino sólo en las páginas de la misma correspondientes a los artículos.

Eso que dices de identificar el elemento (el id del breadcrumb, se entiende) añadiendo una clase más para especificación - lo cual es muy lógico y básico - no es posible sin una modificación de programación mucho más compleja y que habría que ver cómo se puede hacer.

Es decir, la ruta es un módulo que activas y le asignas una posición y un ítem de menú que selecciona en qué categorías se verá.

No puedo añadir clases aquí sí y allá no o viceversa.

Por supuesto, otro sistema es crear un menú oculto con un ítem para cada artículo y atribuir luego el breadcrumb, lo cual es mucho (muchísimo) más costoso y cargante para la página.

Lo más sencillo es mediante detección de algún elemento en el URL para cargar luego el estilo correspondiente en función de si estamos en la categoría o en algún artículo.

Así, si aparece "blog/" es que estamos en un artículo; y si aparece "blog" es que estamos en la categoría sin más.

Etiquetas: condicionales, elseif
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 04:36.