Programando la visibilidad de contenido. Ejemplos de código condicional

Cómo mostrar contenido web diferente según la estación del año con PHP

Estaciones del año

Cuando llega la primavera o el verano, especialmente en zonas turísticas como aquí en Mallorca, suele ser frecuente recibir llamadas de clientes que quieren cambiar los horarios que aparecen en sus páginas web o hacer algún cambio que refleje la nueva temporada, como añadir una imagen representativa de la estación y cosas así.

Si no queremos cambiar manualmente el contenido cada año, podemos intentar automatizar la tarea con un poco de PHP. Vamos a ver algunos ejemplo prácticos.

Mostrar contenido diferente según la época del año (enero, febrero…)

Una función PHP simple para mostrar contenido diferente según el mes en el que estamos. En este caso, primero recuperamos el mes actual con la función date() y después lo comparamos con el rango de meses necesario. Útil por ejemplo para mostrar horarios de verano e invierno:

/*
 * Función simple para mostrar contenido condicional
 * según el mes en el que nos encontramos.
 * Utilización: echo mostrar_horario();
 */
function mostrar_horario() {

	// Guardamos el mes actual en una variable
	// Ejemplo de formato: "03"
	$mesActual = date('m');

	// Si estamos entre el 1 de junio y el 31 de septiembre (incluidos)
	if ( $mesActual >= '06' && $mesActual <= '09' ) {

		return 'Horario de verano...';

	// Para cualquier otra fecha
	} else {

		return 'Horario de invierno...';

	}

}

En WordPress, podríamos incluir esta función en functions.php o en cualquier otro archivo de funciones o plugin que tengamos, y después llamarla desde el punto de la plantilla donde necesitemos insertar el contenido (por ejemplo, en sidebar.php, footer.php, etc.)

Una manera de simplificar la función anterior sería hacer la comparación utilizando el operador ternario de PHP:

function mostrar_horario() {

	$mesActual = date('m');
	return ( $mesActual >= '06' && $mesActual <= '09' ) ? 'Horario de verano...' : 'Horario de invierno...';

}

Cómo mostrar una imagen diferente según la estación del año (primavera, verano…)

La imagen que ves a continuación es dinámica; cambia automáticamente según la estación del año en que nos encontremos (si estás leyendo esto desde un lector RSS, pulsa aquí para ver la imagen):

Como siempre, hay muchas maneras de conseguirlo. Si no necesitamos ser precisos en cuanto al comienzo y final de cada estación, podemos dividir el año en cuatro estaciones, con tres meses cada una. Después comparamos con in_array la variable del mes actual y las definiciones de las estaciones y finalmente incluimos el contenido que debe aparecer en cada caso:

/*
 * Código condicional para mostrar una imagen
 * según la estación del año (el mes actual).
 * Utilización: echo mostrar_imagen_del_mes();
 */
function mostrar_imagen_del_mes() {

	// Guardamos en una variable el número del mes actual (sin ceros)
	$mesActual 	= date('n'); // Formato: "3"

	// Definimos los meses de cada estación del año
	$primavera 	= array(3,4,5); // Marzo, abril y mayo
	$verano 	= array(6,7,8); // Junio, julio y agosto
	$otono 		= array(9,10,11); // Septiembre, octubre y noviembre
	$invierno 	= array(12,1,2); // Diciembre, enero y febrero

	// Comprobaciones condicionales con in_array
	if ( in_array( $mesActual, $primavera ) ) {
		return '/ruta/imagen/estacion-primavera.jpg';

	} elseif ( in_array( $mesActual, $verano ) ) {
		return '/ruta/imagen/estacion-verano.jpg';

	} elseif ( in_array( $mesActual, $otono ) ) {
		return '/ruta/imagen/estacion-otono.jpg';

	} else {
		return '/ruta/imagen/estacion-invierno.jpg';

	}

}

Una vez incluída esta función (con los retoques necesarios según el hemisferio en el que nos encontremos), tendremos que invocarla en el punto que queramos que aparezca la imagen (o el horario o cualquier contenido web que hayamos incluído). Así:

echo mostrar_imagen_del_mes();

Otra manera parecida pero más compacta de publicar una imagen diferente según la época del año sería esta:

/*
 * Mostrar una imagen diferente según la estación del año
 * Utilización: echo imagen_temporada();
 */
function imagen_temporada() {
	$estaciones = array( 'invierno', 'primavera', 'verano', 'otono', 'invierno' );
	$mesActual = intval( date('m') );
	return '<img src="/ruta/imagen/'.$estaciones[($mesActual)/3].'.jpg" alt="" />';
}

En este caso, primero definimos los nombre de las estaciones. Después calculamos el mes actual y guardamos el valor entero correspondiente en una variable. Finalmente imprimimos el nombre de la estación como nombre del archivo de imagen.

El resultado se obtiene al dividir entre 3 el mes actual (por ejemplo “5”, si estamos en mayo) y utilizar el valor resultante como posición a recuperar del array. Es decir, si el resultado de la operación es 0, recuperamos el primer mes de la lista (invierno); si el resultado fuera 1, el segundo mes (primavera); si es 2, nos mostraría el tercer mes de la lista (verano), y así sucesivamente.

Después podemos utilizar el resultado (la palabra correspondiente a la estación) como nombre de una imagen en CSS, para pasar a Javascript, para imprimirla directamente o para utilizarla junto con algún otro código.

Con fechas de inicio y final de las estaciones

Si necesitamos ser más precisos con las fechas, habría que definir el día exacto en que empieza y termina cada estación.

Hay muchas maneras de hacerlo, pero tal vez la más simple sea averiguar el día del año en que empiezan las estaciones y compararlo con el día actual.

Las fechas de inicio de las estaciones del año (en el hemisferio norte y para 2014) son estas:

  • Primavera: empieza el 21 de marzo, el día número 79 del año
  • Verano: empieza el 22 de junio, el día número 172 del año
  • Otoño: empieza el 23 de septiembre, el día número 265 del año
  • Invierno: empieza el 19 de diciembre, el día número 352 del año

Puedes encontrar calculadoras en Internet que ayudan a encontrar este tipo de información: tabla de los números de día del año, calculadora del día del año

Una vez que tenemos esta información, sólo nos queda crear una función con la que primero recuperaremos el día de hoy con date(‘z’) y después lo compararemos con las fechas de inicio de las estaciones. La función únicamente nos devolverá el nombre de la estación, que es lo que después podremos incluir en combinación con alguna regla CSS (para cambiar fondos, fotos, cambiar colores, hojas de estilo, etc.):

/*
 * Función para mostrar una imagen diferente
 * según la estación del año (primavera, verano...)
 * Utilización: echo foto_de_estacion();
 */
function foto_de_estacion() {

	// Guardamos en una variable el día del año
	$dia = date('z'); // Por ejemplo: "80" (empieza por 0)

	// Si la fecha actual es anterior al 21 de marzo
	if ( $dia < 79 ) {
		$estacion = 'invierno';

	// Si la fecha actual es anterior al 22 de junio
	} elseif ( $dia < 172 ) {
		$estacion = 'primavera';

	// Si la fecha actual es anterior al 23 de septiembre
	} elseif ( $dia < 265 ) {
		$estacion = 'verano';

	// Si la fecha actual es anterior al 19 de diciembre
	} elseif ( $dia < 352 ) {
		$estacion = 'otono';

	// Si no es ninguna de las anteriores
	} else {
		$estacion = 'invierno';

	}

	return '/ruta/imagen/' . $estacion . '.jpg';

}

Imágenes de las estaciones: Freevector.com

Comentarios

  1. Aptoide

    Me gusta, un toque más para nuestros blogs.

  2. Franko

    Hola, me gustaria saber como hacerlo por mes automáticamente.

    Me gustaria crear una nueva hoja pagina.php y seleccionar los post del mes en que estamos (ahora septiembre) en esa nueva página y automáticamente cuando cambie al mes de octubre seleccione los post que se publicaron durante el mes actual.

    No se si me explico bien.

Y tú qué opinas?

Las URLs se convertirán en enlaces automáticamente. Tu dirección de email no se publicará ni se utilizará para enviar ningún tipo de información. Los mensajes que no aporten nada al tema que se trata en esta entrada se borrarán. Las imágenes que aparecen al lado de cada autor utilizan el servicio de Gravatar. Recuerda que puedes usar etiquetas HTML como <a href>, <code>, <em> o <strong> en los comentarios.

(necesario)

(opcional)