sEnte Posted December 9, 2012 at 04:18 PM Report #486369 Posted December 9, 2012 at 04:18 PM 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
HappyHippyHippo Posted December 10, 2012 at 03:14 PM Report #486440 Posted December 10, 2012 at 03:14 PM para mim, a melhor solução e aquela que leva a que menos informação é necessária envia para o vliente. logo será uma solução server-side (a 1ª ou a 4ª) IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
sEnte Posted December 10, 2012 at 03:50 PM Author Report #486448 Posted December 10, 2012 at 03:50 PM Agora para datas especificas terei de usar um switch certo? "If It Ain't Broke, Break it and build something Cooler!" Unknown
yoda Posted December 10, 2012 at 04:52 PM Report #486458 Posted December 10, 2012 at 04:52 PM (edited) Assim fica mais compacto, e podes adicionar outras datas : $datas = array( 'natal' => '25/12' ); $css = date('j/n') == $datas['natal'] ? 'xmas-style.css' : 'style.css'; ps : não testei Edited December 10, 2012 at 04:54 PM by yoda before you post, what have you tried? - http://filipematias.info sense, purpose, direction
sEnte Posted December 10, 2012 at 05:04 PM Author Report #486461 Posted December 10, 2012 at 05:04 PM 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
yoda Posted December 10, 2012 at 09:08 PM Report #486506 Posted December 10, 2012 at 09:08 PM Esse código foi feito a partir do 4ª exemplo. before you post, what have you tried? - http://filipematias.info sense, purpose, direction
sEnte Posted December 11, 2012 at 12:33 AM Author Report #486547 Posted December 11, 2012 at 12:33 AM 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
yoda Posted December 11, 2012 at 04:30 AM Report #486552 Posted December 11, 2012 at 04:30 AM (edited) 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 December 11, 2012 at 04:32 AM by yoda before you post, what have you tried? - http://filipematias.info sense, purpose, direction
sEnte Posted December 11, 2012 at 01:30 PM Author Report #486604 Posted December 11, 2012 at 01:30 PM (edited) 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 December 11, 2012 at 05:14 PM by sEnte "If It Ain't Broke, Break it and build something Cooler!" Unknown
sEnte Posted December 22, 2012 at 08:39 PM Author Report #488119 Posted December 22, 2012 at 08:39 PM @ 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
yoda Posted December 22, 2012 at 09:17 PM Report #488121 Posted December 22, 2012 at 09:17 PM (edited) 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 December 22, 2012 at 09:23 PM by yoda before you post, what have you tried? - http://filipematias.info sense, purpose, direction
sEnte Posted December 22, 2012 at 09:22 PM Author Report #488122 Posted December 22, 2012 at 09:22 PM 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
yoda Posted December 22, 2012 at 10:09 PM Report #488123 Posted December 22, 2012 at 10:09 PM Já respondi em cima. before you post, what have you tried? - http://filipematias.info sense, purpose, direction
sEnte Posted December 22, 2012 at 11:31 PM Author Report #488131 Posted December 22, 2012 at 11:31 PM (edited) 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 December 22, 2012 at 11:35 PM by sEnte "If It Ain't Broke, Break it and build something Cooler!" Unknown
yoda Posted December 24, 2012 at 05:13 AM Report #488235 Posted December 24, 2012 at 05:13 AM (edited) Vai mudar. Só colidiu com o inverno porque as circunstâncias eram diferentes. De qualquer forma podes testar inserindo uma data à mão na função. Edited December 24, 2012 at 05:13 AM by yoda before you post, what have you tried? - http://filipematias.info sense, purpose, direction
sEnte Posted December 24, 2012 at 05:25 PM Author Report #488298 Posted December 24, 2012 at 05:25 PM pode ser assim? $date = 24-12-12 Obrigado "If It Ain't Broke, Break it and build something Cooler!" Unknown
yoda Posted December 24, 2012 at 07:58 PM Report #488321 Posted December 24, 2012 at 07:58 PM Tem de ser dia / mês, $date = '23/7'; before you post, what have you tried? - http://filipematias.info sense, purpose, direction
sEnte Posted December 26, 2012 at 12:15 AM Author Report #488383 Posted December 26, 2012 at 12:15 AM 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
yoda Posted December 26, 2012 at 01:16 AM Report #488389 Posted December 26, 2012 at 01:16 AM Eu já te dei a resposta, porque foste fazer mais coisas? before you post, what have you tried? - http://filipematias.info sense, purpose, direction
sEnte Posted December 26, 2012 at 01:48 AM Author Report #488390 Posted December 26, 2012 at 01:48 AM lol Esquece xD "If It Ain't Broke, Break it and build something Cooler!" Unknown
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now