Jump to content

Image Rotator com PHP


sEnte
 Share

Recommended Posts

Queria fazer, via PHP, um "rodador" de imagens, quero dizer adequar a imagem à época.

Explicando melhor, ter uma imagem relacionada com o inverno de 2 de janeiro a 20 de Março, depois de 21 de Março a 21 de Agosto uma de Primavera e por ai em diante., exceto alguns casos de datas expecificas como por exemplo 25 de Dezembro, 1 de Janeiro, entre outras.

Qual destes seguintes exemplos será o melhor?

[list=1]
[*]$spring = array(1,2,3);
[*]$summer = array(4,5,6);
[*]$autum = array(7,8,9);
[*]$winter = array(10,11,12);
[*]
[*]if(in_array(date('m'), $spring) ){
[*]//Show picture of spring
[*]}
[*]else if(in_array(date('m'), $summer) ){
[*]//Show picture of summer
[*]}
[*]else if(in_array(date('m'), $autum) ){
[*]//Show picture of autum
[*]}
[*]else if(in_array(date('m'), $winter) ){
[*]//Show picture of winter
[*]}
[*]else{
[*]//Show error message
[*]}
[/list]

[list=1]
[*]if (date("m") == 12){
[*]?>
[*]<style type="text/css">
[*]body{
[*]background-image: url('christmas.png');
[*]}
[*]</style>
[*]<?php
[*]}elseif (date("m") == 10){
[*]?>
[*]<style type="text/css">
[*]body{
[*]background-image: url('halloween.png');
[*]}
[*]</style>
[*]<?php
[*]}
[/list]

[list=1]
[*]<!DOCTYPE HTML>
[*]<html>
[*]<head>
[*]<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
[*]<style>
[*].container { width:80%; margin:auto; min-height:750px;}
[*]
[*].container.month-1{ background:#9F3;}
[*].container.month-2{ background:#9F3;}
[*]
[*]
[*].container.month-12{ background:#F00;}
[*]</style>
[*]<title></title>
[*]</head>
[*]
[*]<body>
[*]<div class="container month-<?php echo date('m'); ?>">
[*]
[*]</div>
[*]</body>
[*]</html>
[/list]

[list=1]
[*]$date = explode(' ', date('n j'));
[*]
[*]		if (($date["0"] == 12 && $date["1"] <= 25)){
[*]			echo '<link rel="stylesheet" type="text/css" href="/css/xmas-style.css">';		
[*]		} else {
[*]			echo '<link rel="stylesheet" type="text/css" href="/css/style.css">';
[*]		}
[*]				
[*]		?>
[/list]

"If It Ain't Broke, Break it and build something Cooler!" Unknown

Link to comment
Share on other sites

Um short if statement xD

yoda esse código aplica-se ao 1º exemplo?

Andei a perguntar em outros forums, e pralém de usar PHP também me foi dado um exemplo com CSS, mas sinceramente também prefiro em PHP xD

"If It Ain't Broke, Break it and build something Cooler!" Unknown

Link to comment
Share on other sites

Agora é que reparei. O código que escreveste é uma minificação do 4º exemplo, mas isso e digamos a excepção, ou seja datas especificas. Agora para o geral. seria melhor juntar o 1º e o 4º exemplo certo?

"If It Ain't Broke, Break it and build something Cooler!" Unknown

Link to comment
Share on other sites

Nenhum dos scripts te dá o que queres, não verificam bem as estações nem contam com anos bissextos.

O script abaixo assume que o teu locale está em inglês. Talvez seja exagerado a quantidade de código para o caso, mas ..

#


$css = holiday() ? holiday() : season();

#


function season()
{
static $current = null;

if (!is_null($current))
{
 return $current;
}

$date = date('z');
$seasons = array(
 'spring' => array('March 21', 'June 20'),
 'summer' => array('June 21', 'September 22'),
 'autumn' => array('September 23', 'December 20'),
 'winter' => array('December 21', 'March 20')
);

foreach ($seasons as $name=>$range)
{
 if ($date >= date('z', strtotime($range[0])) && $date <= date('z', strtotime($range[1])))
 {
  return $name;
 }
}

return false;
}
function holiday()
{
static $current = null;

if (!is_null($current))
{
 return $current;
}

$date = date('j/n');
$holidays = array(
 'christmas' => '20/6',
 'apocalypse' => '21/12',
);

foreach ($holydays as $name=>$holiday)
{
 if ($date == $holyday)
 {
  return $name;
 }
}

return false;
}
Edited by yoda
Link to comment
Share on other sites

Ui... tenho de ler isto bem.

Eu sei que os exemplos que dei não são os melhores, mas era para mostrar a ideia.

Agora vamos a dúvidas....

O primeiro $css é facil de perceber.

Onde se encaixa o $css que usas-te no inicio?

o

return = false

é caso haja erros certo? Caso contrário vai mostrar como deve ser.

AHAHA

'apocalypse' => '21/12',

morri loooooooooool

Pode-se usar isto para o default time

date_default_timezone_set('Europe/Lisbon');

testei o código... tens um pequeno erro, no foreach escreves-te holydays em vez de holidays mas já está resolvido, fora isso não deu erro nenhum

http://exp.net84.net/season2.php

Edited by sEnte

"If It Ain't Broke, Break it and build something Cooler!" Unknown

Link to comment
Share on other sites

@ yoda

 <?php
function season()
{
   static $current = null;

   if (!is_null($current)) {
    return $current;
   }

   $date    = date('z');
   $seasons = array(
    'Spring' => array(
	    'March 21',
	    'June 20'
    ),
    'Summer' => array(
	    'June 21',
	    'September 22'
    ),
    'Autumn' => array(
	    'September 23',
	    'December 20'
    ),
    'Winter' => array(
	    'December 21',
	    'March 20'
    )
   );

   foreach ($seasons as $name => $range) {
    if ($date >= date('z', strtotime($range[0])) && $date <= date('z', strtotime($range[1]))) {
	    return $name;
    }
   }

   return false;
}
function holiday()
{
   static $current = null;

   if (!is_null($current)) {
    return $current;
   }

   $date	 = date('j/n');
   $holidays = array(
    'christmas' => '25/12'

   );

   foreach ($holidays as $name => $holiday) {
    if ($date == $holiday) {
	    return $name;
    }
   }

   return false;
}
#
echo holiday() ? holiday() : season();
#
?>

Algo de estranho se passa neste código.

Pelo menos para o outono funcionou bem, para o Inverno é que nem por isso?

Não será preciso verificar se é este ano ainda?

"If It Ain't Broke, Break it and build something Cooler!" Unknown

Link to comment
Share on other sites

Sim, tens razão, esqueci-me disso. Como o Inverno conta de um ano para o outro, e o script verifica os dias, não está a dar.

Podes na mesma assumir que se a função retornar falso (e souberes que está a funcionar quando a meteres no servidor), que é Inverno, pois o script só retorna falso se for Inverno ou se o locale for irreconhecivel.

Ou seja, em vez de retornar falso na função season(),

return 'Winter';
Edited by yoda
Link to comment
Share on other sites

Podes dar umas dicas?

Posso fazer algo assim?

(($now >= $inv_start && $now < $prim_prox_ano) || ($now >= $inv_ano_ant && $now < $prim_start))

mas como fizeste de maneira diferente não estou a conseguir aplicar

"If It Ain't Broke, Break it and build something Cooler!" Unknown

Link to comment
Share on other sites

Realmente tens razão lol

mas vou experimentar noutra alteração que fiz que em vez de aparecer um string de texto aparece mesmo uma imagem.

EDIT: Pelo menos parece estar a funcionar e com datas especificas mostra como deve ser.

Agora é uma questão de esperar 3 meses para ver se muda para Spring e respectiva imagem.

Edited by sEnte

"If It Ain't Broke, Break it and build something Cooler!" Unknown

Link to comment
Share on other sites

experimentei mudar o

$date = date('z');
..
if ($date >= date('z', strtotime($range[0])) && $date <= date('z', strtotime($range[1]))) {
...
$date	 = date('j/n');

para

$date = 19/10;
..
if ($date >= date('19/10', strtotime($range[0])) && $date <= date('19/10', strtotime($range[1]))) {
...
$date	 = date('19/10');

e dizia que estava no Verão...

"If It Ain't Broke, Break it and build something Cooler!" Unknown

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.